在渗透测试与网络安全评估中,信息探测是最基础且关键的一步。通过对目标网站的操作系统、服务器、CMS、端口、目录结构等信息进行自动化探测,可为后续攻击路径识别提供基础数据支撑。传统工具如WhatWeb、FOFA等虽功能强大,但在定制化与扩展性方面受限。
本文设计并实现了一款基于 Python 的轻量级网站信息探测工具,支持URL/IP扫描、开放端口探测、CMS识别、Web指纹识别、WAF识别、敏感目录扫描等功能。工具采用模块化设计,使用requests、socket、re、threading等Python标准库构建,界面简洁、可嵌入自动化安全测试流程。实验表明,该工具可快速准确地获取目标网站的核心信息,具备良好的实用性与拓展性。
网站信息探测(Information Gathering)是渗透测试中的首要步骤,目标是获取系统运行环境、服务版本、目录结构等非认证数据,为后续漏洞扫描和攻击提供“情报”。常见信息探测内容包括:
工具名称 | 优点 | 缺点 |
---|---|---|
WhatWeb | CMS识别准确 | 插件扩展复杂,Python不友好 |
Nmap | 端口识别强大 | 安装复杂,慢速 |
FOFA | 全网搜索 | 需授权Token,采集不可控 |
Python脚本 | 定制灵活 | 功能碎片化 |
本文以“灵活 + 轻量 + 自动化”为设计目标,自主开发一款网站信息探测工具,整合多个功能模块,适配Python生态。
+-----------------------------+
| 主控逻辑模块 |
+-----------------------------+
| | |
+-----+ +---+---+ +--+------+
| URL解析模块 | CMS识别模块 | WAF检测模块
+--------------+----------+-------------+
| | |
端口扫描 目录扫描 指纹识别
模块 | 技术 | 说明 |
---|---|---|
网络请求 | requests | 发起GET/HEAD请求,支持自定义UA |
Socket | socket | 实现TCP连接扫描 |
解析 | re / urllib | URL解析、匹配内容 |
并发 | threading | 多线程扫描加速 |
命令行 | argparse | 支持命令行参数调用 |
from urllib.parse import urlparse
import socket
def parse_target(url):
parsed = urlparse(url if url.startswith("http") else "http://" + url)
hostname = parsed.hostname
ip = socket.gethostbyname(hostname)
return hostname, ip
import threading
import socket
open_ports = []
def scan_port(ip, port):
try:
sock = socket.socket()
sock.settimeout(0.5)
sock.connect((ip, port))
open_ports.append(port)
sock.close()
except:
pass
def port_scan(ip, ports=[80, 443, 22, 21, 3306]):
threads = []
for port in ports:
t = threading.Thread(target=scan_port, args=(ip, port))
threads.append(t)
t.start()
for t in threads:
t.join()
return open_ports
import requests
cms_rules = {
"wordpress": ["/wp-login.php", "wp-content"],
"dedecms": ["/plus/", "DedeCMS"],
"discuz": ["/forum.php", "Discuz!"],
}
def detect_cms(url):
try:
for cms, rule in cms_rules.items():
r = requests.get(url + rule[0], timeout=3)
if rule[1] in r.text:
return cms
except:
pass
return "Unknown"
def get_fingerprint(url):
try:
r = requests.get(url, timeout=3)
server = r.headers.get("Server", "N/A")
title = re.findall(r"(.*?) ", r.text)
return {"server": server, "title": title[0] if title else ""}
except:
return {"server": "N/A", "title": "N/A"}
def dir_scan(url, paths=["admin", "login", "test", ".git", "phpinfo.php"]):
found = []
for path in paths:
test_url = url.rstrip("/") + "/" + path
r = requests.get(test_url)
if r.status_code == 200:
found.append(test_url)
return found
def waf_check(url):
payload = "' OR 1=1--"
try:
r = requests.get(url, params={"id": payload}, timeout=3)
if r.status_code in [403, 406] or "waf" in r.text.lower():
return True
except:
pass
return False
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("target", help="目标网址/IP")
args = parser.parse_args()
print("[*] 开始解析目标...")
hostname, ip = parse_target(args.target)
print(f"[+] 主机名: {hostname}, IP地址: {ip}")
print("[*] 开始端口扫描...")
ports = port_scan(ip)
print(f"[+] 开放端口: {ports}")
print("[*] CMS识别中...")
cms = detect_cms(args.target)
print(f"[+] CMS识别结果: {cms}")
print("[*] 指纹识别中...")
fp = get_fingerprint(args.target)
print(f"[+] Server: {fp['server']}, Title: {fp['title']}")
print("[*] 敏感目录扫描中...")
dirs = dir_scan(args.target)
print(f"[+] 可访问敏感路径: {dirs}")
print("[*] WAF检测...")
has_waf = waf_check(args.target)
print(f"[+] WAF存在: {has_waf}")
功能 | 本工具 | WhatWeb | Nmap |
---|---|---|---|
URL/IP解析 | ✅ | ✅ | ✅ |
端口扫描 | ✅ | ❌ | ✅ |
CMS识别 | ✅ | ✅ | ❌ |
指纹识别 | ✅ | ✅ | ✅ |
敏感目录 | ✅ | ❌ | ❌ |
WAF检测 | ✅ | ❌ | ❌ |
本文设计并实现了一款基于 Python 的网站信息探测工具,集成了多种常用功能,包括CMS识别、指纹信息提取、端口扫描、敏感路径发现及WAF识别。与传统工具相比,该工具具有结构清晰、定制性强、部署简单等优势,适用于信息安全教学、靶场测试、轻量化渗透准备等场景。
未来改进方向: