本文目录导读:

“综合实用脚本”配合“防守漏洞识别定位”,通常指安全防守方(蓝队)通过脚本自动化发现自身系统、网络、应用中的安全弱点,下面按场景拆解,从思路到可落地的脚本逻辑都说清楚。
先明确:防守漏洞分几类
| 类别 | 例子 | 识别手段 |
|---|---|---|
| 主机层 | 弱口令、多余端口、补丁缺失、提权配置 | 基线核查脚本 |
| 网络层 | 开放高危端口、ACL 失效、横移路径 | 端口扫描+拓扑分析 |
| 应用层 | SQLi、XSS、越权、上传 | 爬虫+payload 探测 |
| 配置层 | 中间件默认配置、泄露文件 | 指纹识别+敏感路径扫描 |
| 日志/行为 | 异常登录、WebShell、C2 通信 | 日志关联分析脚本 |
核心思路:资产梳理 → 基线比对 → 主动探测 → 日志验证 → 定位到具体资产/IP/端口/URL。
通用识别流程(脚本编排)
资产发现 → nmap / masscan / fscan
2. 服务指纹 → whatweb / nmap -sV
3. 基线核查 → 自定义脚本比对配置
4. 漏洞探测 → nuclei / xray / 自写POC
5. 结果聚合 → 统一格式,去重
6. 定位输出 → IP:Port/URL + 漏洞类型 + 证据
可直接用的脚本示例
主机基线核查(Bash)
#!/bin/bash
# 检查常见防守漏洞
echo "=== 弱口令账户 ==="
awk -F: '($2==""){print $1" 空密码"}' /etc/shadow
echo "=== 高危SUID ==="
find / -perm -4000 -type f 2>/dev/null
echo "=== 监听端口 ==="
ss -tulnp | grep -vE '127.0.0.1|::1'
echo "=== SSH配置 ==="
grep -E 'PermitRootLogin|PasswordAuthentication' /etc/ssh/sshd_config
echo "=== 计划任务 ==="
crontab -l 2>/dev/null; ls -la /etc/cron*
内网端口+漏洞扫描(Python 调 nmap)
import nmap, json
nm = nmap.PortScanner()
nm.scan('192.168.1.0/24', arguments='-sV -T4 --open')
result = []
for host in nm.all_hosts():
for proto in nm[host].all_protocols():
for port in nm[host][proto]:
svc = nm[host][proto][port]
# 高危端口标记
risk = "HIGH" if port in [445,3389,6379,27017,9200] else "LOW"
result.append({
"ip": host, "port": port,
"service": svc['name'], "version": svc['version'],
"risk": risk
})
print(json.dumps(result, indent=2, ensure_ascii=False))
Web 敏感路径+泄露检测
import requests
from concurrent.futures import ThreadPoolExecutor
TARGET = "http://target.com"
PATHS = ["/.git/config", "/.env", "/backup.zip", "/phpinfo.php",
"/admin/", "/swagger-ui.html", "/actuator/env", "/WEB-INF/web.xml"]
def check(p):
try:
r = requests.get(TARGET+p, timeout=5, allow_redirects=False)
if r.status_code in (200,403) and len(r.content) > 0:
return f"[+] {p} -> {r.status_code} ({len(r.content)}B)"
except: pass
with ThreadPoolExecutor(20) as ex:
for res in ex.map(check, PATHS):
if res: print(res)
日志侧 WebShell/异常登录定位(蓝队防守关键)
# 找异常POST+可疑参数
grep -E "POST .*(eval|cmd|shell|upload)" access.log | awk '{print $1,$7}' | sort | uniq -c | sort -rn
# 短时间大量404,可能是扫描
awk '{print $1}' access.log | sort | uniq -c | awk '$1>500'
# 异常登录成功(非办公IP)
grep "Accepted password" /var/log/auth.log | awk '{print $1,$9,$11}'
定位到“具体漏洞点”的关键
光扫出来不够,要能精确定位 + 可复现:
- 唯一标识:
资产ID + IP:Port + URL/参数 + 漏洞类型 - 证据留存:请求包/响应包、截图、hash
- 误报过滤:二次验证(如弱口令要真登录一次)
- 关联分析:把 Web 漏洞和服务器的进程/账户关联(WebShell 落地在哪)
示例定位输出:
{
"asset": "web-01",
"ip": "10.0.0.5",
"port": 8080,
"url": "/api/user?id=1",
"vuln": "SQL注入",
"payload": "1' AND SLEEP(5)--",
"evidence": "响应延迟5.2s",
"severity": "high"
}
实战建议
- 不要只依赖单一工具:nmap+nuclei+自写脚本组合,覆盖更全
- 授权先行:内网扫描/漏洞探测必须书面授权,否则违法
- 防守视角优先看:暴露面(外网资产)、弱口令、未授权访问、已知CVE
- 持续化:做成定时任务,每日 diff 新增风险
- 闭环:发现 → 定位 → 复现 → 修复 → 复测
如果你能说明具体场景(内网主机防守 / Web 应用防守 / 应急响应中找入口),我可以给一套更贴合的完整脚本。