<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      phpBB BBcode處理的漏洞

      [摘要]發布日期:2002-04-3 漏洞類別:PHP,遠程WEB接口,拒絕服務 bugtraq ID 4432、4434 存在問題的版本: phpBB 1.44,更低的版本及 phpBB 2.0 未測試。 描述: phpBB是一個被廣泛應用的基于PHP的論壇。發現其BBcode中對于“源...

      發布日期: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的帖子時的資源占用情況:

      PID  USER      PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
      8643 nobody    13   0   212M  81M 13604 D     8.0 65.7   0:07 httpd

      提交貼子后會提示出錯:

      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
      25741 nobody    14   0 11828 9996   416 R    99.9  7.8   2:38 httpd

      幾秒鐘后產生了大量的數據,內存大量消耗:
        PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
          3 root      10   0     0    0     0 SW    2.5  0.0   4:13 kswapd
      25742 nobody    17   0  265M  90M 52104 R    25.1 73.0   1:45 httpd

      這樣的鑲套帖子是不會存儲到數據庫中的,但隨著鑲套的增加資源的占用會按照幾何級數遞
      增。如果一次發送更多數據,或者不斷的發送,可以導致系統資源大量占用,最終拒絕服務。

      實驗環境:linux 2.4.10   Apache/1.3.23   PHP 4.12


      解決方案:

      1、暫時禁用BBcode。
      2、alert7給出了functions.php的如下修改方法,暫時停用對鑲套標記的支持:

      把773行開始的bbencode_code函數改為:

      function bbencode_code($message, $is_html_disabled)
      {
      $message = preg_replace("/\[code\](.*?)\[\/code\]/si", "<!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>\\1</PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->", $message);
      return $message;

      } // bbencode_code()

          對于無法正常刪除的帖子,需要手工連接數據庫刪除。假設有這樣一個帖子:
      http://host/forums/viewtopic.php?topic=1162&forum=1&0
      可以這樣:
      $ 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 主頁:http://www.whitecell.org/
      WSS 論壇:http://www.whitecell.org/forum/


      補充:后來的測試發現相當多的BBS都有類似問題,包括基于php、cgi、asp的,希望大家自己對自己的論壇進行測試,如有問題,參考本文酌情解決。


      日韩精品一区二区三区高清