PHP Utility Belt是一款为PHP程序开发人员使用的一套工具集,可以用来测试正则表达式并且观察与preg_match和preg_match_all函数的匹配,观察preg_replate函数的结果;获得包含两个单词两个数字一个大写字母和一个符号的随机密码;序列化与反序列化;测试mktime和strtotime时间戳的日期格式或者一个数字型时间戳;在主页外运行任意PHP代码。
由于它能够执行任意的PHP代码,因此只能在测试环境下使用,绝不能产品环境下运行。
此漏洞的漏洞编号为EDB-ID:39554
源代码下载地址为: https://github.com/mboynes/php-utility-belt
搭建实验环境,其中靶机的IP地址为192.168.248.129,攻击机的IP地址为192.168.248.128
下图为PHP Utility Belt搭建完之后的运行情况。
针对此漏洞metasploit已经给出了一个漏洞利用代码,路径为
exploit/multi/http/php_utility_belt_rce
在攻击机上运行此攻击脚本
随后设置payload
接下来设置相应的选项
最后执行exploit命令,开始攻击
可见得到了meterpreter的shell,说明攻击是成功的。
对整个过程抓数据包,如下
其中POST传递的参数为名为code,所有的攻击代码都在这个变量中,接下来看一下漏洞所在的文件ajax.php,问题出在第10行至第15行这部分代码段
可见程序先判断code参数是否设置,如果已经被设置的话,直接放到了eval函数中执行,eval函数的作用是把输入参数的内容作为php代码执行,而在上述代码中并没有对用户所传入的内容进行过滤,也就是说攻击者在code中给出的值只要符合php代码的语法规范就会被无条件执行,这是一个典型的eval注入。
上述代码如果在测试环境下,可以方便程序员的工作,但是放在产品环境下就很危险。
* navyofficer 投递,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)