發布日期:2002-04-3
漏洞類別:php,遠端web介面,拒絕服務
bugtraq id 4432、4434
存在問題的版本:
phpbb 1.44,更低的版本及 phpbb 2.0 未測試。
描述:
phpbb是乙個被廣泛應用的基於php的論壇。發現其bbcode中對於「源**」類的引用處
理存在漏洞,通過傳送特殊格式的轉義字串可導致資料庫的損壞以及伺服器的 cpu、記憶體
資源大量消耗。
詳細:
phpbb在對「源**」類的引用處理不當,主要是為了要支援鑲套的標記
而造成的。有問題的**是functions.php中的bbencode_code函式。
當我們提交乙個這樣的貼子:
實際向資料庫中儲存的資料是這樣:
[1code]
\0\0\0\0\0\0\0
[/code1][1code]
\0\0\0\0\0\0\0
[/code1][1code]
\0\0\0\0\0\0\0
[/code1][1code]
\0\0\0\0\0\0\0
[/code1][1code]
\0\0\0\0\0\0\0
[/code1][1code]
\0\0\0\0\0\0\0
[/code1][1code]
\0\0\0\0\0\0\0
[/code1]
即實際系統要負擔的資料量是輸入的「\0」的數量的平方,如果傳送 1 mbyte的資料,系統
實際處理的資料將接近 1 tbyte。
這是我們在實驗機器上傳送乙個包含''*800的帖子時的資源占用情況:
提交貼子後會提示出錯:
could not enter post text!
但實際上貼子的標題和提交者這兩個資料已存到資料庫中,但內容和其他一些資料沒有,所
以開啟的時候會出現錯誤頁面。而且這樣的帖子無法用正常的方法刪掉,只能用直接連線到
資料庫來刪除。以下是提交不同資料量的結果:
''* =<583 正常貼上,可以刪除
''* 584 正常貼上,可以編輯,但不能刪除
''* 585 提示 could not enter post text! 但貼子也沒有
''* 586 正常貼上,可以刪除
''* 587 提示 could not enter post text! 但貼子也沒有
''* 588 正常貼上,可以刪除
''* 589 提示 could not enter post text! 但貼子也沒有
''* >=590 提示 could not enter post text! 出現刪不掉的帖子
如果傳送鑲套的標記則占用資源更多,我們在實驗機器上傳送這樣的帖子:
複製** **如下:
[code]\0
\0[/code]
雖然只有49byte的資料,但資源占用非常可觀:
幾秒鐘後產生了大量的資料,記憶體大量消耗:
pid user pri ni size rss share stat %cpu %mem time command
3 root &n程式設計客棧bsp; 10 0 0 0 0 sw 2.5 0.0 4:13 kswapd
這樣的鑲套帖子是不會儲存到資料庫中的,但隨著鑲套的增加資源的占用會按照幾何級數遞
增。如果一次傳送更多資料,或者不斷的傳送,可以導致系統資源大量占用,最終拒絕服務。
實驗環境:linux 2.4.10 apache/1.3.23 php 4.12
解決方案:
1、暫時禁用bbcode。
2、alert7給出了functions.php的如下修改方法,暫時停用對鑲套標記的支援:
把773行開始的bbencode_code函式改為:
functi bbencode_code($mdtwwbkjboessage, $is_html_disabled)
// bbencode_code()
對於無法正常刪除的帖子,需要手工連線資料庫刪除。假設有這樣乙個帖子:
可以這樣:
$ mysql -uuser -ppasswd
mysql> use databasename;
mysql> select * from topics where topic_id = 1162; //得到post_id
mysql> delete from posts where post_id = 6280;
mysql> delete from posts_text where post_id = 6280;
mysql> delete from topics where topic_id = 1162;
關於我們:
wss (whitecell security systems),乙個非營利性民間程式設計客棧技術組織,致力於各種系統安
全技術的研究。堅持傳統的hacker精神,追求技術的精純。
wss 主頁:
wss 論壇:forum/
本文標題: phpbb bbcode處理的漏洞
本文位址:
蘋果內購漏單處理思路
支付流程解釋 3.客戶端向我們可以信任的伺服器 後台 提供receipt data 4.伺服器對receipt data進行一次base64編碼 7.伺服器對商品購買狀態以及商品型別,向客戶端發放相應的道具與推送資料更新通知 問題 以上七個步驟實際上是乙個很安全的支付流程了。那問題會出在 呢?問題出...
BUG漏測的原因總結,以及如何處理
一 漏測的概率 漏測,是指軟體產品的缺陷沒有在測試過程中被發現,而是在版本發布之後,使用者在使用過程中發現存在的缺陷。二 預防漏測的意義 我們都知道,缺陷越早被發現,發現和解決缺陷所花的成本就越小,如果缺陷是在測試中發現的,那麼所花的成本將小得多。測試 是保證軟體質量的最重要手段之一,因此,進行漏測...
njupt 會漏的棧
出題原意是考雙端佇列,但是因為a題要讓大家都過,所以把資料搞得很小。第乙份 是純陣列模擬棧暴搞的,遇到大資料會完蛋,第二份是用雙端佇列模擬,可以勝任大資料的情況。純陣列模擬棧暴搞 include using namespace std int s 10005 int k,top m,x,bottom...