Discuz! 3.0 产品中的CSRF漏洞

漏洞利用:

[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吧

标签: Discuz


仅有 1 条评论
  1. 所以说密码到底是多少呀。。。ヽ(●-`Д´-)ノ

添加新评论