该漏洞利用在debug_backtrace()函数中使用了两年的一个 bug。我们可以诱使它返回对已被破坏的变量的引用,从而导致释放后使用漏洞。
利用脚本:https://github.com/mm0r1/exploits/tree/master/php7-backtrace-bypass
利用方法利用方法和GC UAF绕过disable_functions相同。下载利用脚本后先对脚本像上面那样进行修改,然后将修改后的利用脚本上传到目标主机上,如果是web目录则直接传参执行命令,如果是其他有权限的目录,则将脚本包含进来再传参执行命令。
利用 Json Serializer UAF使用条件:
Linux 操作系统
PHP 版本
7.1 - all versions to date
7.2 < 7.2.19 (released: 30 May 2019)
7.3 < 7.3.6 (released: 30 May 2019)
原理简述此漏洞利用json序列化程序中的释放后使用漏洞,利用json序列化程序中的堆溢出触发,以绕过disable_functions和执行系统命令。尽管不能保证成功,但它应该相当可靠的在所有服务器 api上使用。
利用脚本:https://github.com/mm0r1/exploits/tree/master/php-json-bypass
利用方法利用方法和其他的UAF绕过disable_functions相同。下载利用脚本后先对脚本像上面那样进行修改,然后将修改后的利用脚本上传到目标主机上,如果是web目录则直接传参执行命令,如果是其他有权限的目录,则将脚本包含进来再传参执行命令。
我们利用 AntSword-Labs项目来搭建环境:
git clone https://github.com/AntSwordProject/AntSword-Labs.git cd AntSword-Labs/bypass_disable_functions/6 docker-compose up -d搭建完成后访问 :18080:
拿到shell后无法执行命令:
查看phpinfo确定是设置了disable_functions:
首先我们下载利用脚本:https://github.com/mm0r1/exploits/tree/master/php-json-bypass
下载后,像之前那样对脚本稍作修改:
将脚本像之前那样上传到有权限的目录(/var/tmp/exploit.php)后包含执行即可:
/?ant=include("/var/tmp/exploit.php"); POST: whoami=ls /如下图所示,成功执行命令:
在蚁剑中有也该绕过disable_functions的插件:
点击开始按钮后,成功之后会创建一个新的虚拟终端,在这个新的虚拟终端中即可执行命令了。
利用 SplDoublyLinkedList UAC使用条件:
PHP 版本
PHP v7.4.10及其之前版本
PHP v8.0(Alpha)
引用官方的一句话,你细品:“PHP 5.3.0 to PHP 8.0 (alpha) are vulnerable, that is every PHP version since the creation of the class. The given exploit works for PHP7.x only, due to changes in internal PHP structures.”
原理简述2020年9月20号有人在 bugs.php.net 上发布了一个新的 UAF BUG,报告人已经写出了 bypass disabled functions 的利用脚本并且私发了给官方,不过官方似乎还没有修复,原因不明。