本帖最后由 luozhenni 于 2021-10-21 00:27 编辑
原文链接:一次黑盒加白盒的渗透过程原创 雁行安全团队
一次黑盒加白盒的渗透过程
01 前期黑盒
目标首页长这样 首页就暴露了CMS版本号,经查是蝉知,后台默认路径是admin。
搜了下cnvd,这版本还真有漏洞。 尝试访问一手后台,可惜报错。 然后随手一顿乱试,试出后台地址Admin(运气) admin/123456又进去了,运气实在不错 后台翻阅了一遍,找到个模板设置,再次感谢运气之神,这不是有手就行,直接获得shell吗? 好了,运气到此为止。 老老实实找洞吧。在定义附件后缀处,尝试添加php被拒绝,但可以添加一个pht。 在素材库上传附件 上传成功 直接访问就变成404,啊这,就有点难受 界面显示是这样 点击直接变成下载,似乎这里存在任意文件下载漏洞 抓个包一看,只有ID可控,只能遍历数字看别人上传的素材。 又看到上传后路径显示这样,想着这个f参数是否可控去下载文件 尝试后发现不行 02 白盒审计 无奈,只有去找源码搭环境了。 官网直接下8.6版本,安装后直接照着之前黑盒上传,发现文件保存的时候将后缀给去掉了 来看源码,先看下config文件,了解下大致的框架路由 去上传处抓包 找到上传文件代码位置chanzhieps/system/module/file/control.php 首先跟进到getUploadFile,chanzhieps/system/module/file/model.php 这里$name有两种获取方式,一种是文件上传部分的filename,另一种是name参数传入,这里确保后缀为.pht即可 继续跟进$this->getExtension($name)获取后缀,在这里会判断后缀是否存在、后缀是否被允许,这里已添加.pht所以直接返回.pht 回到chanzhieps/system/module/file/control.php,跟进saveUploadFile,首先跟入getSaveName 来到getSaveName定义处 这部分代码会检测$pathName后缀是否在$config->file->videoExtensions内 不在则取去掉第一个“.”之后的部分,去掉后缀。所以最后返回的是一个不包含后缀的文件名。 又回到saveUploadFile,继续往后看,虽然保存的时候文件名后缀被去掉了,但是实际后缀还在$file['extension']中,在saveUploadFile函数后半部分会将file数组值写入数据库,包括了实际后缀.pht。 上传文件后的界面中还有个编辑功能。 跟进编辑功能源码editsource,chanzhieps/system/module/file/control.php 跟入getById(),这部分从数据库取出来前面保存的file信息 $filename为post传入filename参数的值 再跟进editSource()位置在chanzhieps/system/module/file/model.php 因为没重新上传附件,所以直接进入第二个if语句。 这里$newPath由原来规定的存储路径+文件名+原文件后缀(即pht),然后拼接成新路径,这样最后保存的文件就保留了原始后缀。
编辑该文件,修改名称后保存即可对文件添加后缀 成功将后缀还原。 然后实战上传获取shell 03 后续小小扩展 按理说这里就结束了,但是之前审计过程中有一个点引起了注意。 回到之前说到的模板问题上。 这里明确告知缺少/system/tmp/eurn.txt文件,并且暴露出了绝对路径。然后再次回到之前editSource方法上。 刚才已经分析过,这里新路径是由默认路径+文件名+上传的文件后缀。其中$filename可控并且没有任何过滤,这就意味着可以使用../目录穿越形式在目标处写入编辑模板所需的txt文件。 先上传一个txt文件,名字随意,目的是将后缀txt写入到$file[extension]。 编辑时候抓包,将filename的值改成../../../../../system/tmp/eurn 去目录看一下,果然写入成功 再回到编辑页面,成功写入一句话 因为是全局模板,所以直接在首页就能获取shell
|