查看Discuz論壇付費隱藏內容:discuz破解插件

概述

Discuz是一個通用的社區論壇軟件系統。最近看到一個Discuz邏輯漏洞,該漏洞源於Discuz微信登陸功能。Discuz 3.4默認安裝了微信登陸。利用這個漏洞攻擊者可以越權登陸論壇其他會員的賬號甚至是管理員賬號,主要還得看臉。

原理

首先看了下作者的描述,「如果有用戶點了一下綁定微信,但是並沒有綁定」 這句話說的很模糊,開始沒有明白什麼意思。然後跟進代碼看了一下。

【分析】Discuz 3.4 越權登陸漏洞分析

漏洞源碼位於
/upload/source/plugin/wechat/wechat.inc.php文件中。在226-246行:

【分析】Discuz 3.4 越權登陸漏洞分析

主要看下代碼的邏輯:

第231行:從common_member_wechatmp表查詢對應openid的第一條結果,這裡openid可以由用戶控制。

$mpmember = C::t('#wechat#common_member_wechatmp')->fetch_by_openid($wxopenid ? $wxopenid : $_GET['wxopenid']);

下面是fetch_by_openid函數。

232行:從common表中取出對應uid的所有結果,array_keys($mpmember)返回的是上一步查詢數據的uid值。

$mpmembers = C::t('common_member')->fetch_all(array_keys($mpmember));

234-237行:

取上一步的第一條數據,然後從common_member_archive表裡取出對應uid的用戶數據,將該用戶設置為登錄狀態。

$memberfirst = array_shift($mpmembers);
$member = getuserbyuid($memberfirst['uid'], 1);
if($member) {
 setloginstatus($member, 1296000);

根據上述邏輯,也就是說只要知道用戶的openid就能登陸用戶的賬號。看了下微信接口文檔,這個openid是唯一的,並且只有用戶授權了之後,公眾號才可以獲取。這裡顯然得不到openid。

在作者的payload中沒有看到openid參數。

【分析】Discuz 3.4 越權登陸漏洞分析

其實這個Payload只是登陸了openid為空的第一個用戶。openid為空的情況目前發現通過/plugin.php?id=wechat:wechat&ac=wxregister&username={name}這種方式可以使openid為空,但註冊的是一個新的賬號。

根據作者所說 「如果有用戶點了一下綁定微信,但是並沒有綁定,會寫入common_member_wechatmp」,這裡「並沒有綁定」的意思就是綁定失敗,openid為空,但作者使用的何種綁定方法說的很模糊。

第二個是越權解除指定uid綁定的微信。同樣在webchat.inc.php,判斷csrftoken正確後,刪除common_member_wechatmp表中對應uid的數據。

【分析】Discuz 3.4 越權登陸漏洞分析

根據以上兩個洞,可以遍歷並且登陸所有openid為空的賬戶。先登錄第一個openid為空的賬號->然後解綁->再登陸之後即為第二個openid為空的用戶……,臉好的話是可以登陸admin的。

【分析】Discuz 3.4 越權登陸漏洞分析

payload

解除指定uid綁定的微信:/plugin.php?id=wechat:wechat&ac=unbindmp&uid={uid}&hash={formhash}

登陸第一個openid為空的賬號:/plugin.php?id=wechat:wechat&ac=wxregister

修復

在最新版本中作者刪除了這段代碼。下載最新版即可。

【分析】Discuz 3.4 越權登陸漏洞分析

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/219263.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 10:56
下一篇 2024-12-09 10:56

相關推薦

發表回復

登錄後才能評論