如何打造轻量级POC框架?
TOPIC SOURCE
固定资产下的快速刷洞:简易POC框架的打造
在资产快速扫描的场景里,往往需要一个既能快速迭代又不拖泥带水的POC框架。选择轻量级的实现方式,往往意味着要在语言、依赖和运行时开销上做足功课。Python 因其丰富的网络库和简洁的语法,一直是业界的首选;不过,真正让框架脱颖而出的,并不是语言本身,而是对整体结构的精雕细琢。
核心选型与依赖管理
框架的入口文件只保留命令行解析与全局配置,两行代码便能完成目标读取:argparse 用于单目标或文件列表,json 保存默认超时、线程数等参数。所有第三方库均锁定在 requirements.txt 中,例如 requests(>=2.28)负责 HTTP 交互,concurrent.futures(Python 标准库)提供线程池,避免额外的异步框架带来的学习成本。
模块化设计思路
- target_loader:统一读取单行 URL、IP 或者从 CSV 中抽取;支持
--stdin直接管道输入。 - poc_registry:以装饰器方式注册每个 POC,自动暴露
name、description与run(target)接口。 - executor:基于
ThreadPoolExecutor控制并发度,内部捕获网络异常并统一返回{'url':..., 'status':..., 'detail':...}。 - reporter:提供
HTML、CSV两种持久化方式,默认写入report/report.html并附带可点击的目标链接。
并发与资源控制
实际跑批时,常见的误区是盲目提升线程数,导致目标站点瞬间拒绝服务。经验数据显示,max_workers = min(32, os.cpu_count() * 2) 能在 1000 条目标内保持 80% 的成功率。更进一步,框架在每一次请求前都会检查全局的 semaphore,确保同一时间的并发请求不超过配置阈值。
报告生成示例
def save(url, poc_name, exp):
with open("report/report.html", "a", encoding="utf-8") as f:
line = f'目标: <a href="{url}">{url}</a> POC: {poc_name} Exp: {exp}<br/>'
f.write(line + "n")
f.write("-" * 80 + "<br/>n")
实战案例回顾
某次内部红队演练,仅用 15 分钟就把 5000 条资产中泄漏的 UEditor 接口全部定位出来。框架的目标文件直接指向 targets.txt,POC 通过装饰器注册,执行时只需 python run.py -f targets.txt -p ueditor_poc。报告页面自动列出每个可疑 URL,点进去还能看到 HTTP 响应的关键片段——这正是轻量级框架追求的“快、准、易”。

参与讨论
这个框架思路挺清晰的,感觉上手不会太难
有人试过在实际项目里用这个框架吗?效果咋样
线程数设置很有参考价值,之前就是乱设把服务器搞崩了
为啥不用Go写呢?感觉性能会更好啊
装饰器注册POC的设计很巧妙,省了不少代码
报告生成部分能加个JSON格式输出吗?
之前自己写扫描工具总卡在并发控制,这个方案可以试试
Python做POC确实方便,库多写起来快
HTML报告带链接很实用,查结果不用复制粘贴了
并发数那个公式挺实用的,收藏了
POC用装饰器注册这个设计挺巧的
@ 沉睡的冰川 我也觉得,这样代码看着干净多了