免责申明
本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。
0x00 前言
前段时间有位师傅在群里说在攻防期间遇到一个极致CMS的网站,但是没能拿到webshell,事后对这个CMS进行一下审计,还是审计出来了后台的漏洞,前台还是没有能力可以审计出来
今天这个漏洞也归档了,总结一下这个漏洞当时的审计思路
0x01 SSRF
还是常规思路,直接定位敏感函数,这次的漏洞是SSRF+自解压漏洞导致的RCE漏洞
首先全局搜索curl_exec函数
我们进行跟进查看,对应文件为app/admin/c/PluginsController.php
我们发现请求的变量为$remote_url,并且这个变量是可控的,可控参数为download_url,访问对应的功能点查看是什么功能
在插件处进行下载,之后会得到对应的方法,这里就不说这套CMS的源码路由解析部分了,如果师傅们不懂可以单独问我
开启抓包
发现参数download_url是我们可控的,尝试SSRF漏洞
改为dnslog地址然后进行发包查看
成功得到回显,至此得到一个SSRF漏洞,我们继续向下看代码
0x02 自解压ZIP文件
在同文件当中继续向下走查看代码,发现将请求之后的资源全部写入了一个压缩包当中
使用fwrite进行了zip压缩包写入,这里download_fp是要写入的压缩包文件名称,fp变量是我们请求的资源
然后继续向下走,发现存在解压ZIP压缩包的代码
这里方法get_zip_originalsize方法进行了遍历压缩包当中的内容并且进行了遍历写入一个文件当中,第一个参数为待解压的压缩包,第二个为解压路径,我们查看在哪里调用了这个函数方法
在case的值为file_unzip的时候进行了方法的调用,并且写入到了文件夹app/admin/exts/文件夹下,刚好第一个对应了那个被写入的压缩包,第二个为解压的路径
至此,我们审计完成,我们来捋一下思路
-
请求的地址资源是我们可控的
-
他会自己将请求下载好的资源压缩写入到一个文件夹下
-
路径为根目录 /cache/文件夹下,且命名为/upadata_.xxx.zip
-
他会自动对这个文件夹下的压缩包进行解压
-
解压的路径为 /app/admin/exts/压缩包名称/
0x03 RCE漏洞复现
首先我们先去做一个恶意的压缩包文件
直接随便选择一个压缩包,然后在其中添加一个恶意文件
我们上传到服务器上,这里就使用kali开一个http服务充当服务器
准备好burp进行抓包尝试漏洞复现,现在先将环境都恢复,下载的正常压缩包什么的全部删除
第一次发包,先去下载
成功
第二次发包,写入ZIP文件
成功
第三次发包,进行解压
解压完毕!本次解压花费:0.022 秒
查看对应文件是否存在了
成功写入了文件,尝试访问
至此完结
原文始发于微信公众号(进击安全):极致CMS代码审计实现RCE