首先声明这些漏洞不是我挖的,我想挖但是挖不出来,蛋疼。本次讲解栈溢出漏洞,这个漏洞是比较常见的漏洞,现在php里面不太常见了,php漏洞挖掘没有啥好工具,只能人工慢慢的看,afl好像可以自动化挖掘,不过我跑了10几天也没跑出个crash。
包含漏洞的版本:PHP 7.0.11
首先下载源码1f8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5M7q4)9J5k6h3&6W2N6q4)9J5c8Y4u0W2L8r3g2S2M7$3g2K6i4K6u0r3,然后编译安装,版本可以低一点,往后的漏洞这个版本都是没打补丁的。环境采用ubuntu和编译版本的php7.0.2,只有linux才有符号表,windows下不好调试,虽然方便的多。现在正式开始吧。
定位到漏洞函数代码 /ext/gd/gd.c:2222
有可能上面的代码长了点,但是只要找到关键函数就行了_php_image_create_from_string,在这个函数中的gdNewDynamicCtxEx这个函数才是关键点,跟踪进去就行了。在gd.c:2196行,假如你使用其他版本可能行号不一样,不过没事搜索函数就行了。
下面是几个结构体,可以对照着去理解代码。
下面是gdb的调试信息,不知道为什么参数的值没有显示出来。有些代码直接阅读比较麻烦,可以gdb调试代码,再调试的同时,打印出它的值。
poc就放下面了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
如果是 7.0.11 那么应该会有不少环境都包含此漏洞,理论上能拿到 php 进程权限,可能是 www,也可能是 root,威胁还是很大的。不过在实际的项目中这个函数 image_create_from_string() 使用的频度不太高。
建议还在使用 PHP 7 低版本的用户尽快升级到最新版本,避免服务器遭到入侵。
kanxue 最新的7.1.2有验证过?
axiuno 如果是 7.0.11 那么应该会有不少环境都包含此漏洞,理论上能拿到 php 进程权限,可 ...
hackyzh 这是我写这个系列,选的案例