Think PHP全系列漏洞学习


0x01 ThinkPHP基本介绍

1.1 初步认识

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP 5.0以上版本,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展。

总结一下:国人开发,上手难度低,容易搭建的框架,常见于违法网站上

1.2 版本介绍

ThinkPHP发展至今,核心版本主要有以下几个系列,ThinkPHP 2系列、ThinkPHP 3系列、ThinkPHP 5系列、ThinkPHP 6系列,各个系列之间在代码实现及功能方面,有较大区别。其中ThinkPHP 2以及ThinkPHP 3系列已经停止维护,ThinkPHP 5系列现使用最多,而ThinkPHP 3系列也积累了较多的历史用户。图片是以前的图,现在最新版本到了Think PHP 8.x了。

0x02 常见高危漏洞

0x03 漏洞分析

3.1 ThinkPHP 2.x/3.0远程代码执行漏洞

3.1.1 漏洞描述

在该版本中,Dispatcher.class.php中res参数中使用了preg_replace的/e危险参数,使得preg_replace第二个参数就会被当做php代码执行,导致存在一个代码执行漏洞,攻击者可以利用构造的恶意URL执行任意PHP代码。

3.1.2 漏洞具体分析

漏洞在102行代码中出现

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

代码块首先检测路由规则,如果没有制定规则则按照默认规则进行URL调度,在preg_replace()函数中,正则表达式中使用了/e模式,将“替换字符串”作为PHP代码求值,并用其结果来替换所搜索的字符串。

正则表达式可以简化为“\w+/([^/])”,即搜索获取“/”前后的两个参数,$var[‘\1’]=”\2”;是对数组的操作,将之前搜索到的第一个值作为新数组的键,将第二个值作为新数组的值,我们发现可以构造搜索到的第二个值,即可执行任意PHP代码,在PHP中,我们可以使用${}里面可以执行函数,然后我们在thinkphp的url中的偶数位置使用${}格式的php代码,即可最终执行thinkphp任意代码执行漏洞。

例如:

index.php?s=a/b/c/${code}
index.php?s=a/b/c/d/e/${code}

在这里复习一下preg_replace函数用法,这个函数是个替换函数,而且支持正则,使用方式如下:

preg_replace('正则规则','替换字符','目标字符')

这个函数的3个参数,结合起来的意思是:如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。

下面是搜索到的关于/e的解释:

e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;  
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。

举例:

<?php preg_replace('/test/e','print_r("AAA");','just test');

只要在“just test”中匹配到了“test”字符,就执行中间的print_r这条函数的命令。

3.1.3 漏洞复现

cd vulhub/thinkphp/2-rce/

docker-compose up -d

直接访问本地端口8080就可以了

验证漏洞存在

还可以这样写shell

工具也是同样可以getshell和命令执行

3.2 ThinkPHP 5.x 远程代码执行漏洞

3.2.1 漏洞描述

2018年12月10日,ThinkPHPv5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞。此次漏洞由ThinkPHP v5框架代码问题引起,其覆盖面广,且可直接远程执行任何代码和命令。电子商务行业、金融服务行业、互联网游戏行业等网站使用该ThinkPHP框架比较多,需要格外关注。由于ThinkPHP v5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接进行远程的代码执行,进而获得服务器权限。

3.2.2 漏洞具体分析

这个自己暂时就具体分析不了了,后期学学再补上吧。

在这里贴个分析链接https://www.freebuf.com/articles/web/289860.html

3.2.3 漏洞复现

cd vulhub/thinkphp/5-rce
docker-compose up -d

高版本的就跑工具了,毕竟自己分析不来,payload也没必要去手敲了

剩下的步骤就不多说了,还是一样的getshell,命令执行

3.3ThinkPHP v6.0.x反序列化漏洞漏洞

3.3.1 漏洞描述

说实话,这个漏洞实战中难找,除非白盒审计,黑盒是基本上没可能的,常见的话也就可能出在CTF比赛里边。

贴个链接吧

自己还没分析明白

https://blog.csdn.net/u011377996/article/details/87362329


文章作者: Rmy4x
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Rmy4x !
  目录