phpBB BBcode处理的漏洞

2016-02-19 11:36 9 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享phpBB BBcode处理的漏洞教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - Web开发 】


发布日期: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]

[/code1][1code]

[/code1][1code]

[/code1][1code]

[/code1][1code]

[/code1][1code]

[/code1][1code]

[/code1]

即实际系统要负担的数据量是输入的“”的数量的平方,如果发送 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][/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 style="text-align:center" WIDTH=85%TRTDfont size=-1Code:/fontHR/TD/TRTRTDFONT SIZE=-1PRE1/PRE/FONT/TD/TRTRTDHR/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的,希望大家自己对自己的论坛进行测试,如有问题,参考本文酌情解决。

来源:http://www.tulaoshi.com/n/20160219/1597963.html

延伸阅读
标签: 电脑入门
小知识:两个概念 1、热键 热键是用来启动一个程序或者使用一个程序的某项功能的一个键和一组键,一个键的可以包括F1,F2这些功能键,也可以是一些特制的键,比如DELL键盘上的internet,mail等一般键盘上没有的键,最常见的主要是一些组合键,使用QQ的人最熟悉的热键是ctrl+~组合键,用来打开快捷地查看发来的信息。 还有许...
标签: windows 操作系统
如何彻底禁止Windows 2000和Windows XP系统的共享漏洞呢?今天我们来介绍几招,对你肯定有用!大家好好看看哟! 快速查看共享资源 在Windows XP系统中,电脑所有的驱动器都默认为自动共享,但不会显示共享的手形标志,这就给网络安全留下了隐患。我们可以在“运行”栏中填入cmd进入命令提示符,输入net share,快速查看电脑...
1、售房者不了解房屋产权状况,被人“吃差价” 房价上涨很快的市场下,一些不法的中介取得了售房者的信任之后,便取得了房子的全权委托代理权,之后以更高的价格卖出,赚钱这其中的差价。更有甚者出现 “一房多卖”的情形,黑中介收到买方的首付款之后便逃之夭夭,最后让卖家平白无故惹上麻烦。 2、资金安全没有保障 全权...
标签: ASP
       ASP教程:堵住ASP漏洞      作者:书生            --------------------------------------------------------------------------------    无论你相不相信,通过 asp,可能可以很方便地入侵 web server、窃取服务器上...
标签: ASP
  apollosun 原创 其实无论是组件还是非组件上传,都有这个漏洞,以下代码请需要得朋友仔细阅读,只要读懂代码就能融会贯通。 这里以ASPUPLOAD组件上传为例 以下3个关键函数: function killext(byval s1) '干掉非法文件后缀 dim allowext allowext=".JPG,.JPEG,.GIF,.BMP,.PNG,.SWF,.RM,.MP3,.WAV,.MID,.MIDI,.RA,. AVI,.MPG,.MPEG,...

经验教程

414

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部