AB模板網:專注于dede模板,織夢源碼,織夢模板,網站模板下載,dedecms模板,網站源碼,dedecms教程以及各類手機網站模板和企業網站模板分享.
用戶名:
密碼:
注冊

織夢模板

網站模板搜索
VIP

Discuz x3.1任務刷積分漏洞說明和修復方法

網站模板下載 www.vyoxwq.live / 2014-11-21
這個是4月份之前的漏洞的,不知道新版本有沒有修復這個問題,但最新一個VIP會員反饋遇到刷積分的問題,可能是QQ互聯綁定刷積分導致的,所以這里就把烏云上面的discuz x3.1任務刷積分漏洞的方法拿過來跟大家分享下。
 
在完成任務時(home.php?mod=draw&do=view&id=xx),任務先前的狀態缺少判斷
完成任務的鏈接形如:home.php?mod=draw&do=view&id=xx
這個地址最終在 source\class\class_task.php 中被處理
 
約第370行:
function draw($id) {
 
        global $_G;
 
        if(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) {
 
                showmessage('task_nonexistence');
 
        } elseif($this->task['status'] != 0) {
 
                showmessage('task_not_underway');
 
        } elseif($this->task['tasklimits'] && $this->task['achievers'] >= $this->task['tasklimits']) {
 
                return -1;
 
        }
 
......
復制代碼
 
之后就是獲得任務獎勵了
總覺得上面這一段少了些什么判斷?我們對比下其他代碼
 
約第473行:
function giveup($id) {
 
        global $_G;
 
        if($_GET['formhash'] != FORMHASH) {
 
                showmessage('undefined_action');
 
        } elseif(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) {
 
                showmessage('task_nonexistence');
 
        } elseif($this->task['status'] != '0') {
 
                showmessage('task_not_underway');
 
        }
復制代碼
 
這一段是放棄任務的判斷,我們看到如果 $this->task['status'] != '0',就是說任務沒有開始的時候,是不能放棄任務的。
 
但是,在上面那段獲取任務獎勵的代碼中,并沒有判斷任務是否開始,造成了無需領取任務,就可以無限次數獲取獎勵。
 
此漏洞還可以用于強行獲取由于用戶組不符,沒有權限領取的任務的獎勵。
 
漏洞詳細利用,請見漏洞證明。
 
漏洞證明:
1、新建一個任務,就選擇紅包類任務吧
 
2、此時千萬不要申請任務,而是進入任務詳細頁面(完成之后就不能刷了)
home.php?mod=task&do=view&id=2
這樣就能看到任務詳情了,任務的獎勵是 威望+1。
我們把地址改為領取任務獎勵
home.php?mod=task&do=draw&id=2
打開這個地址,獲得了 威望+1。
 
不斷刷新這個頁面,即可不斷獲得獎勵。
 
修復方案:
 
在 source\class\class_task.php 中的 draw 函數部分,加入任務是否領取的判斷
即加上
......
 
elseif($this->task['status'] != '0') {
 
        showmessage('task_not_underway');
 
}
復制代碼
 
這樣,再次使用漏洞時,就會提示:不是進行中的任務
本文由AB模板網整理發布,轉載請說明出處:http://www.vyoxwq.live/discuzjc/446.html
本文標簽:
首頁 VIP專區 靜態模板 會員中心
收縮
分分彩漏洞交流