用python编写poc的流程

时间:2025-04-02 17:22:34

目录

一、POC 编写核心流程

二、常用 Python 库与工具

三、POC 框架推荐

四、高级优化技巧

五、安全规范与注意事项

六、实战案例:命令注入漏洞验证


一、POC 编写核心流程

  1. 漏洞分析

    • 确定漏洞类型:根据目标特征判断漏洞类型(如 SQL 注入、命令注入、文件上传等)。

    • 触发条件验证:通过手动测试(如 Burp Suite 抓包)确认漏洞触发点,例如构造|whoami参数触发命令注入。

  2. 脚本设计

    • 选择验证逻辑:

      • 响应特征检测:通过状态码、页面内容(如DEBUG = True或特定报错信息)判断漏洞存在性。

      • 行为验证:例如通过时间延迟(SLEEP(5))检测 SQL 盲注。

    • 模块化设计:将目标获取、请求发送、结果解析分离,提升代码复用性。

  3. 代码实现

    import requests
    ​
    def check_rce(target):
        payload = "/api?input=|whoami"
        try:
            response = requests.get(target + payload, timeout=5)
            if "root" in response.text:
                return True, "存在命令注入漏洞"
        except Exception as e:
            pass
        return False, "漏洞不存在"
    • 关键库:requests(HTTP 请求)re(正则匹配)lxml(HTML 解析)

    • 多线程优化:使用threading或concurrent.futures加速批量扫描。


二、常用 Python 库与工具

库/工具 用途 代码示例
requests 发送 HTTP 请求,支持代理和超时设置 requests.get(url, headers=headers)
BeautifulSoup 解析 HTML 响应内容 soup.find_all('script')
socket 实现端口扫描或低级协议交互 socket.connect((ip, port))
pocsuite3 集成化漏洞验证框架,支持报告生成 继承 POCBase 类实现 _verify()
Scapy 构造自定义网络数据包(如 ARP 欺骗检测) send(IP(dst=target)/ICMP())

三、POC 框架推荐

  1. Pocsuite3

    • 特点:支持多线程、批量扫描,与 Seebug 漏洞平台集成。

    • 开发模板:

      from pocsuite3.api import POCBase
      ​
      class TestPOC(POCBase):
          def _verify(self):
              if self.check_response('漏洞特征'):
                  return self.parse_output({'存在漏洞': True})
  2. ARL-NPoC

    • 场景:专为资产灯塔(ARL)设计,支持插件化漏洞验证。

    • 代码结构:

      from xing.core.BasePlugin import BasePlugin
      ​
      class Plugin(BasePlugin):
          def verify(self, target):
              if "Django DEBUG" in response.text:
                  self.logger.success("漏洞存在")

四、高级优化技巧

  1. 规避防护机制

    • 请求伪装:随机 User-Agent(fake_useragent库)、IP 轮换(代理池)。

    • Payload 编码:使用 Base64、URL 编码绕过 WAF 检测。

  2. 性能调优

    • 异步 IO:采用aiohttp+asyncio实现高并发请求。

    • 结果持久化:将漏洞结果写入 JSON 或数据库(如 SQLite)。


五、安全规范与注意事项

  1. 合法性

    授权测试:仅对授权目标进行漏洞验证,避免法律风险。

    非破坏性验证:禁止执行rm -rf或数据篡改操作。

  2. 漏洞披露

    负责任的披露:通过 CVE、CNVD 等平台提交漏洞,避免公开细节。


六、实战案例:命令注入漏洞验证

漏洞背景:某 Web 应用未过滤用户输入,导致可通过参数注入系统命令。 POC 实现

import requests
​
def check_command_injection(url):
    payloads = [";id", "|cat /etc/passwd", "$(ls /)"]
    for cmd in payloads:
        try:
            response = requests.get(f"{url}?query={cmd}", timeout=3)
            if "uid=" in response.text:
                return True, f"注入成功:{cmd}"
        except:
            continue
    return False, "未检测到漏洞"

检测逻辑:依次发送恶意命令,根据响应内容判断命令执行结果。