发散创新:基于Python的自动化渗透测试脚本设计与实战演练

在现代网络安全攻防对抗中,自动化渗透测试工具已成为红队成员和安全研究人员不可或缺的利器。本文将围绕 Python 编程语言,深入探讨如何通过自定义脚本实现对目标系统的轻量级探测、漏洞识别及信息收集,构建一套模块化、可扩展的渗透测试框架。


一、核心思想:从“手动扫描”到“智能决策”

传统渗透测试依赖人工执行大量命令(如 nmap、dirb、sqlmap 等),效率低且易遗漏关键点。我们采用 Python + subprocess + requests 的组合,编写一个多阶段联动脚本,自动完成:

  1. 主机发现(Ping Sweep)
    1. 端口扫描(TCP SYN)
    1. 服务指纹识别(Banner Grabbing)
    1. 常见Web漏洞初步检测(XSS、SQLi 模拟)

📌 优势在于流程闭环:每个阶段输出结果作为下一阶段输入,形成可复用的测试链路。


二、代码实现:分层结构清晰,易于维护

1. 主控模块(main.py)

import subprocess
import requests
from utils import scan_port, check_vuln

TARGET_IP = "192.168.1.100"

def run_full_scan(target):
    print(f"[+] 开始对 {target} 执行完整渗透测试...")
        
            # Step 1: Ping 扫描
                if not ping_sweep(target):
                        print("[-] 目标主机不可达,终止测试")
                                return
                                    
                                        # Step 2: 端口扫描
                                            open_ports = scan_port(target)
                                                if not open_ports:
                                                        print("[-] 未发现开放端口,无进一步操作")
                                                                return
                                                                    
                                                                        # Step 3: 服务识别 & 漏洞探测
                                                                            for port in open_ports:
                                                                                    service = get_service_banner(target, port)
                                                                                            print(f"[+] 发现服务: {service} on port {port}")
                                                                                                    
                                                                                                            if "http" in service.lower():
                                                                                                                        check_vuln(target, port)
def ping_sweep(ip):
    result = subprocess.run(["ping", "-c", "1", ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        return result.returncode == 0
        ```
### 2. 工具函数模块(utils.py)

```python
import socket
import time

def scan_port(host, ports=list(range(1, 1025))):
    """SYN扫描开放端口"""
        open_ports = []
            for port in ports;
                    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                            sock.settimeout(1)
                                    try:
                                                sock.connect((host, port))
                                                            open_ports.append(port)
                                                                    except:
                                                                                pass
                                                                                        finally:
                                                                                                    sock.close()
                                                                                                        return open_ports
def get_service_banner(host, port):
    """获取服务banner信息"""
        try:
                with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                            s.settimeout(3)
                                        s.connect((host, port))
                                                    banner = s.recv(1024).decode('utf-8', errors='ignore')
                                                                return banner.strip()
                                                                    except Exception as e:
                                                                            return f"unknown ({e})"
def check_vuln9host, port):
    """模拟简单漏洞检测(仅用于演示)"""
        url = f'http://{host}:{port}"
            try:
                    resp = requests.get(url, timeout=5)
                            if "error" in resp.text.lower() or "sql" in resp.text.lower():
                                        print(f"[!] 检测到潜在SQL注入风险(响应含敏感关键词)")
                                                elif "<script>" in resp.text:
                                                            print(f"[!] 检测到可能XSS漏洞(存在脚本标签)")
                                                                except:
                                                                        pass
                                                                        ```
---

## 三、运行流程图示意(文字版)

[开始]

[Ping探测目标存活]
↓ 是?
├──→ 否 → [终止测试]
↓ 是
[端口扫描(SYN)]

[提取Banner信息]

[判断是否为HTTP服务?]
↓ 是?
├──→ 否 → [跳过漏洞检测]
↓ 是
[发起GET请求并分析响应内容]

[匹配常见漏洞特征(如SQL错误、JS标签等)]

[输出告警日志]

[结束]
```

💡 这种设计允许你后续轻松接入更多插件(如 BurpSuite API、SQLMap CLI 调用),真正做到“开箱即用”。


四、实战建议:如何让脚本更强大?

✅ 加入配置文件支持(config.json)

{
  "targets": ["192.168.1.100"],
    "ports": [22, 80, 443, 8080],
      "check_sql_injection": true,
        "check_xss": true
        }
        ```
### ✅ 使用 threading 并行处理多个IP(提升效率)
```python
from concurrent.futures import threadPoolExecutor

with ThreadPoolExecutor(max_workers=5) as executor:
    executor.map(run_full_scan, TARGETS)
    ```
### ✅ 输出结构化日志(便于导入SIEM系统)
```python
import json
log_entry = {
    "timestamp": time.time(),
        "target": host,
            "severity": "high",
                "message": "Potential SQL injection detected"
                }
                print(json.dumps(log_entry)0
                ```
---

## 五、进阶方向:打造自己的渗透测试引擎

你可以在此基础上逐步增强以下能力:
- **动态规则引擎**:用 YARA 或正则表达式定义漏洞特征
- - **API对接能力**:调用 Shodan、Google Dorking、VirusTotal
- - **GUI界面集成**:使用 PyQt 或 Dash 构建可视化平台
- - **CI/CD集成**:作为 devSecOps 流水线中的自动化检测环节
---

📌 最后提醒:本脚本仅为教学用途,实际使用前请确保获得合法授权!切勿用于非法入侵行为。安全技术的本质是守护而非破坏,愿你在探索的路上始终保持敬畏之心。

--- 

✅ 文章已适配 CSDN 格式,无需额外修改即可发布,适合初学者快速入门自动化渗透测试开发,也适合中级用户重构自己的测试工具链。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐