自动化针对Shodan搜索结果的漏洞利用和PoC执行。查询Shodan,过滤目标,并对每个匹配项运行你的脚本——并发执行,具有结构化输出和导出功能。
你有一个PoC脚本,它接受一个IP和端口。你想针对匹配Shodan查询的每个主机运行它。ShodScript填补了这一空白:搜索、过滤、分发、收集结果。
pip install git+https://github.com/momenbasel/shodscript.git
或者克隆并本地安装:
git clone https://github.com/momenbasel/shodscript.git
cd shodscript
pip install -e .
设置你的Shodan API密钥:
export SHODAN_API_KEY="your-api-key-here"
或者在每个命令中使用--api-key / -k传递。
# 表格输出
shodscript search "apache 2.4.49"
# 按端口和国家过滤
shodscript search "nginx" --port 443 --country US --limit 50
# JSON输出
shodscript search "apache" --json
# 对每个匹配"apache 2.4.49"的主机运行check_http.py
shodscript run "apache 2.4.49" ./exploit.py
# 20个并发工作线程,每个目标60秒超时
shodscript run "apache 2.4.49" ./exploit.py -w 20 -t 60
# 过滤为德国端口80,保存结果
shodscript run "apache" ./exploit.py --port 80 --country DE -o results.json
# CSV导出
shodscript run "nginx" ./check.py -o results.csv --format csv
# 仅显示成功命中
shodscript run "apache" ./exploit.py --quiet
通过--pass-via有三种模式:
| 模式 |
|---|
# 通过环境变量传递
shodscript run "nginx" ./script.py --pass-via env
# 通过stdin传递
shodscript run "nginx" ./script.py --pass-via stdin
# 向脚本传递额外参数
shodscript run "nginx" ./script.py -e "--verbose" -e "--ssl"
# 每行一个IP - 管道到其他工具
shodscript ips "apache 2.4.49" | xargs -I{} curl -s http://{}
# 包含端口
shodscript ips "apache 2.4.49" --with-port
# 管道到nuclei、httpx等
shodscript ips "apache 2.4.49" -n 500 | httpx -silent
shodscript host 1.2.3.4
shodscript host 1.2.3.4 --json
shodscript info
你的脚本只需要接受一个IP和端口。最小示例:
#!/usr/bin/env python3
import sys
ip = sys.argv[1]
port = int(sys.argv[2])
# 在此处编写你的漏洞利用/检查逻辑
print(f"[+] {ip}:{port} - vulnerable")
# 退出码0 = 成功(标记为绿色),非零 = 失败(标记为红色)
有关更多模式,包括基于环境变量的和横幅抓取脚本,请参阅examples/目录。
结果可以保存为JSON、JSONL或CSV:
shodscript run "query" ./script.py -o results.json # JSON(默认)
shodscript run "query" ./script.py -o results.jsonl --format jsonl # 每行一个JSON对象
shodscript run "query" ./script.py -o results.csv --format csv # CSV
每个记录包含:ip、port、host、org、country、returncode、success、stdout、stderr、elapsed、error。
MIT
仅用于授权的安全测试和研究。
| 你的脚本如何接收目标 |
|---|
arg (默认) | python3 script.py <ip> <port> |
env | TARGET_IP、TARGET_PORT、TARGET_HOST环境变量 |
stdin | 写入stdin的ip:port\n |