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比赛里边。
贴个链接吧
自己还没分析明白