首页 > 作文

phpBB BBcode处理的漏洞

更新时间:2023-04-06 08:53:06 阅读: 评论:0

发布日期: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的帖子时的资源占用情况:

pidurprinisizerss share stat %cpu %mem time command

8643 nobod高考特长有哪些y13 0 212m81m 13604 d 8.0 65.7 0:07 httpd

提交贴子后会提示出错:

could not enter post text!

但实际上贴子的标题和提交者这两个数据已存到数据库中,但内容和其他一些数据没有,所

以打开的时候会出现错误页面。而且这样的帖子无法用正常的方法删掉,只能用直接连接到

数据库来删除。以下是提交不同数据量的结果:

”* =<583正常贴上,可以删除

”* 584正常贴上,可以编辑,但不能删除

”* 585提示 cou奥运知识问答ld 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 ur prinisizerss share stat %cpu %mem time command

25741 nobody14 0 11828 9996 416 r99.97.8 2:38 httpd

几秒钟后产生了大量的数据,内存大量消耗:

pid ur prinisizerss share stat %cpu %mem time command

3 root10 万圣节要到了0 00 0 sw2.50.0 4:13 kswapd

25742 睡前故事宝宝nobody17 0265m90m 52104 r25.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><t虚拟语气d><hr></td></tr></table><!– bbcode end –>”, $message);

return $message;

} // bbencode_code()

对于无法正常删除的帖子,需要手工连接数据库删除。假设有这样一个帖子:

http://host/forums/viewtopic.php?topic=1162&forum=1&0

可以这样:

$ mysql -uur -ppasswd

mysql> u databaname;

mysql> lect *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> deletefrom topics where topic_id = 1162;

关于我们:

wss (whitecell curity systems),一个非营利性民间技术组织,致力于各种系统安

全技术的研究。坚持传统的hacker精神,追求技术的精纯。

wss 主页:http://www.whitecell.org/

wss 论坛:http://www.whitecell.org/forum/

补充:后来的测试发现相当多的bbs都有类似问题,包括基于php、cgi、asp的,希望大家自己对自己的论坛进行测试,如有问题,参考本文酌情解决。

本文发布于:2023-04-06 08:52:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/da6459f8b18bdd0168630fe2b1caada3.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:phpBB BBcode处理的漏洞.doc

本文 PDF 下载地址:phpBB BBcode处理的漏洞.pdf

标签:数据   帖子   贴子   贴上
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图