Discuz論壇是由Crossday工作室(涉及版本:
目前(2003/9/21)所有免費版本(我沒有商業版)
描述:
由于pm.php發送消息那部分代碼,缺乏對時間間隔的限制。導致任何用戶可以對任何用戶發送消息炸彈。導致服務器空間、資源被消耗。嚴重可導致拒絕服務。
具體:
大家可以看到pm.php文件的86行的代碼:
86 } elseif($action == ’send’) {
87
88 if(!$pmsubmit) {
……
179 showmessage(’pm_send_succeed’, ’pm.php’);
180 }
這部分代碼沒有檢測用戶發送短信的時間間隔限制代碼。我們只要注冊任意一個用戶登陸后,提交:
http://127.0.0.1/discuz/pm.php?action=send...st&message=test
就可以轟炸angel這個用戶了。提高效率的攻擊方法:
#incluse
main()
{
int i;
for(i=0;i<55933;i++)
{
printf("\nwww.xxx.com/discuz/pm.php?action=send&pmsubmit=submit&msgto=angel&subject=test&message=test",i);
}
}
編譯運行file.exe >discuzpm.txt,然后把discuzpm.txt導入任何一款CGI掃描器。Run……
防范方法:
一,限制用戶發信的間隔時間
可以利用PHP的SESSION或者COOKIE來限制用戶每次發信的間隔。處理用戶發送短信時,可以選擇以下兩種方式區別用戶是否在規定的時間內連續發送短信,假設管理員設置兩次發帖時間的間隔為2分鐘,看看下面兩個例子:
Cookie方式:
if ($beforepmid) die("對不起,你兩次發信的時間間隔還不到2分鐘"); // $beforepmid
前一次發信的ID
else setcookie("beforepmid",$pmid,time()+60*2,"/","",0); // $pmid
短信ID
Session方式:
session_start();
if (session_is_registered("time") && time()-$_SESSION[’time’]<60*2)
{
die("對不起,你兩次發帖的時間間隔還不到2分鐘"); // $time 前一次發信的時間
} else {
$time=time();
session_register("time");
}
看起來Cookie需要發送到客戶端,攻擊者可以刪除該Cookie,好象Session比較安全些,在服務器端。不過實際上我認為應該是差不多的。因為他是連續發送,中間的間隔時間很短,來不急去刪除該Cookie的。但也不排除自己編段小程序來刪除Cookie。為了萬全,還是使用Session吧。Session方式的文件為"session_pm.php",去掉前面的"session_"然后覆蓋到Discuz目錄下,記得備份原Discuz目錄下的pm.php,以免出錯后可以挽回。
如果希望用Cookie的方式來防止攻擊的哈,就用這個"cookie_pm.php"吧。把前面的"cookie_"去掉,然后覆蓋到Discuz目錄下,最好先備份Discuz目錄下的pm.php文件。
二,對于以上提高效率的攻擊的防止辦法
將第86行后加入以下代碼
$pmsubmit=$_POST[’pmsubmit’];
$msgto=$_POST[’msgto’];
$subject=$_POST[’subject’];
$message=$_POST[’message’];
OK,這下上面所說的的高效攻擊方法失效了。
最后,付上兩個修改好的pm.php文件(http://www.4ngel.net/img/pm.rar)。一個為cookie方式,一個為session方式。如果你是直接使用上面文件中的一樣,請將文件名改為pm.php然后在覆蓋到discuz目錄下,再進入管理遠后臺的:界面風格->模板套系
下編輯:Discuz! 語言包 下的 templates 選項。搜索"pm_box_isfull",把
’pm_box_isfull’ => ’您的信箱已滿,在閱讀短消息前必須刪除一些不用的信息。’,
改為以下內容:
’pm_box_isfull’ => ’您的信箱已滿,在閱讀短消息前必須刪除一些不用的信息。’,
’pm_send_partition’ => ’對不起,你兩次發信的時間間隔還不到2分鐘。’,
’pm_nonexistence’ => ’對不起,短消息不存在或已被刪除。’
特別感謝金玄網(http://www.gixuan.net)的金玄給予大力的支持和幫助。其實discuz論壇還是個未成熟的論壇。還有一些大大小小的漏洞。希望開發者們能注意。