0x00 背景
下载链接:
站长之家:http://down.chinaz.com/soft/34205.htm
官网:http://www.dayucms.com/show/?id=105&page=1&siteid=1
首先是感觉代码加固过,可能被之前的白帽子审计过,审计完才发现JoyChou早已对1.526的版本撸过一遍了,具体见:http://www.joychou.org/index.php/web/dayucms-1-526-foreground-remote-code-execution.html
0x01 CSRF
初看源码时感觉IP是无法伪造的,XSS和SQL注入方面代码当中也有一些加固。想要找找短板,于是乎来到比较容易被忽略的CSRF。首先利用管理员账号登录后台,看看在一些表单提交处是否有hidden的token,在添加管理员处用burp抓包看看:
的确是没有的,只有一些添加的管理员信息,再到对应的代码中看看,在dayucms.php的38行,是要对应包含admin/admin.inc.php文件:
在admin.inc.php的开头并没有对referer进行验证就开始操作对应的action:
于是一趟下来就很愉快:
下面简单给个PoC代码
最后使用虚拟机搭建PoC来验证CSRF,结果可成功添加管理员:
0x02 代码执行
本来以为就存在个CSRF,不过再耐心看看也是定位到了global.func.php的string2array函数,很明显得存在代码注入可执行任意php代码:
可是再一查找全局调用该函数的地方,可能由于代码之前被爆过一次漏洞,发现用到的php脚本都是和后台相关联的,也就是需要登录后台才可以利用:
所以就定位到在gather.class.php中gather对象的import方法会$data1字段在base64解码后传入string2array函数:
对应得在gather.inc.php文件中对规则的导入使用import这一action,进而可以造成代码注入执行:
在后台导入规则处传入larry-'larry';phpinfo()的base64
编码bGFycnk=-J2xhcnJ5JztwaHBpbmZvKCk=
后(’-‘分割),即可执行php代码:
0x03 结合
后台执行代码太low怎么办,那就结合呀,正好利用CSRF就可以GetShell了,原理也是相同的,如图所示:
PoC代码如下: