Swagger API 信息泄露利用工具

这是一个 Swagger API 信息泄露的利用小工具。 

它完成几个简单的工作:

  • 遍历所有API接口,自动填充参数
  • 尝试 GET / POST  所有接口,返回 Response Code / Content-Type / Content-Length ,用于检查接口是否可以未授权访问利用
  • 分析接口是否存在敏感参数,例如 [‘url’, ‘path’, ‘uri’],容易引入外网的SSRF漏洞
  • 检测 API认证绕过漏洞
  • 在本地监听一个Web Server,打开Swagger UI界面,供分析接口使用
  • 使用Chrome打开本地Web服务器,并禁用CORS,解决部分API接口无法跨域请求的问题
  • 当工具检测到HTTP认证绕过漏洞时,本地服务器拦截API文档,修改path,以便直接在Swagger UI中进行测试

[2024-06-07] 增加支持 OpenAPI 3.0 格式的文档

工具地址: https://github.com/lijiejie/swagger-exp

BBScan3.0,一个高并发的Web漏洞扫描工具,辅助API安全测试

本文链接: https://mp.weixin.qq.com/s/AvLpKKsqRkzdzatvqqvfuQ

背景

随着时间推移,BBScan作为一款漏洞扫描工具已经过时,在9年前,这样的工具还能够以数量和速度优势,捡到一些中低危漏洞,但如今,确实是扫不到什么有价值的东西了。

常见Web框架引入了更多的默认安全设计、WAF/RASP等防护技术更加成熟,曾经常见的SQL注入/XSS/命令注入等,现在反而见得不多了。取而代之的,各大SRC现在收到的漏洞中,有相当比例是逻辑越权类的。

于是,笔者对这款古董级的BBScan进行了如下改造

  • 支持Web指纹识别,帮助安全工程师快速定位到感兴趣的应用
  • 支持Javascript 解析功能
    • 目前很多站点是单页应用,对扫描器可见的仅仅是静态资源打包后的少数几个.js。扫描器需要解析js,扫描诸如 Token/Secrets/Password/Key 泄露,发现API接口
  • 支持从javascript文件中,正则提取疑似API接口
    • 在当前版本中,考虑到速度,并没有对提取的URL进行自动化测试,但计划增加一个heavy mode ,扫描API接口
  • 减少漏报:  优化减少DNS查询次数,提高稳定性。在家庭网络环境下,观察到DNS设施相对脆弱,容易出现漏报问题
  • 减少误报:优化了误报验证逻辑
  • 界面优化:对输出的HTML报告,进行了简单优化,提升可读性

改造效果

BBScan项目地址:https://github.com/lijiejie/BBScan

笔者首先利用另一个工具 subDomainsBrute暴力枚举了3个域名 

*.baidu.com *.qq.com *.bytedance.com

随后将发现的域名文件丢给BBScan,扫描生成3份报告(请复制后打开)

如上图所示,扫描器利用默认的内置规则,能够识别到这是一个管理后台。同时,扫描器还从js文件中,提取到12个疑似API接口。

针对这样的一份报告,可以进行如下处理

  • 首先检查通过内置规则扫出的漏洞,一般是信息泄露、各类后台、JS中的秘钥泄露
  • 检查web指纹是否识别到你可能感兴趣的通用应用、框架、开源或商业产品
  • 对发现API接口的站点,进行重点分析和测试,点开感兴趣的接口重点分析和扫描
  • 对API网关进行测试和评估
  • 对报告中泄露的内网域名、IP进行简单分析
  • 通过关键词搜索你感兴趣的关键词,如Header Name、特殊的Cookie

使用问题

对大量目标快速指纹识别

  • python BBScan.py –fingerprint -f urls.txt –api

请注意, 这个 –fingerprint 开关,是指定只扫描web指纹,其他规则反而会被禁用。

如下图所示,本工具可以在较短时间内扫描完上万网站

完整扫描模式

  • python BBScan.py -f baidu.com_full.txt –full –api

–network MASK  任何时候都可以使用该参数,把子网中的其他相邻IP,一并添加到扫描任务中。虽然不建议这么做,但下面的命令是真的可以工作,你或许会得到1个超大HTML

  • –host 10.1.1.1 –network 8 –fingerprint

上面的命令指定扫描 10.1.1.1/8 整个内网,打开文件时,可能出现Chrome浏览器Out Of Memeory,所以,建议指定为更小的指,建议不小于16。

–skip, –skip-intranet  排除内网IP的扫描,这对白帽子比较实用,避免浪费扫描资源。

未来优化

BBScan未来可能进一步优化API接口的扫描

  • 增加对API接口的重扫描、分析支持
  • 正则优化,解决API接口提取不够精准的问题
  • 优化对隐蔽API接口的暴力枚举发现、source map泄露发现等
  • 子域名/Email的收集整理、证书的收集整理

因时间有限,部分功能还未开发完成,同时,开发过程测试不充分,请大家反馈功能建议和Bug问题。  🙂

古董扫描器BBScan的复活,希望它对你有一定用。虽然,显然还不够有用。  🙂

项目地址:https://github.com/lijiejie/BBScan

MisConfig HTTP Proxy Scanner:发现配置不当的HTTP网关(正反向代理),突破边界访问企业内网应用

MisConfig HTTP Proxy Scanner是一个web漏洞扫描器,用于扫描发现配置不当的HTTP正反代理:

  • 错误配置的外网反向代理,内网系统被意外暴露到外网
  • 错误配置的外网正向代理,攻击者可以暴力枚举内网域名,访问内网的生产运维系统、办公系统

本项目地址:https://github.com/lijiejie/MisConfig_HTTP_Proxy_Scanner

本工具介绍: https://mp.weixin.qq.com/s/hnv4HUntZtApjNCbhv34ow

安全工具 EasyPen alpha 1.0 发布

最初计划写EasyPen这个工具,是因为笔者认为

  • 单机性能已经非常强大,哪怕是在家庭网络下,发包速率也非常可观
  • 一般漏洞的应急,在已具备资产发现能力的情况下,写十几行代码扫全网,应该可以非常快,几分钟或者几十分钟就可以完成上万服务的扫描
  • 提供一个简单的图形化工具,给白帽子或者安全团队内部同事使用。平时本机验证一下漏洞比较方便,不用各个脚本切来切去

EasyPen是使用Python + wxPython编写、提供简洁图形界面、支持跨平台的安全扫描工具,可用于企业内外网巡检、应急响应。项目地址:https://github.com/lijiejie/EasyPen

在线文档:https://easypen.lijiejie.com

它的主要功能包括:

  • 资产发现:域名、IP、端口、服务等
  • 漏洞扫描:基于AsyncIO实现的扫描框架,内置超过100个漏洞检测插件,支持调度Hydra/Medusa/Ncrack等工具扫描常见弱口令
  • 应急响应:高危漏洞爆发后,依托框架和现成资产库,通常只需要编写十余行检测逻辑代码,就可以在几分钟内完成对数千目标的扫描
  • 集成了多个漏洞利用工具
扫描界面
漏洞工具界面

功能特性

  • 本工具使用AsyncIO实现了高并发扫描,扫描核心是单线程的,并发扫描任务可超过1000个
  • 本工具优化了DNS Log 检测方法,扫描器维护域名映射关系表,因此,无论扫描过程中投递过多少个子域名,最终都只需要最多2个HTTP请求验证。另外,由于DNS Log在传递链路上的触发需要一定时间,因此,把查询验证放到最后,也消除了不必要的等待,降低漏报的可能性
  • 本工具提供易用的图形界面,通过关键词筛选目标(例如服务、端口号、IP等),即可立即发起大范围扫描
  • 本工具支持多种输入格式,支持输入 10.1.1.1/16  10.1.1.2/10:80 www.lijiejie.com/31 等目标发起检测

安装使用

笔者同时使用了 Windows  / CentOS / Ubuntu 作为开发环境进行测试。目前测试覆盖不全,应该还有一些坑。请大家在Github上创建Issue反馈。
对于熟悉python的高级用户而言,建议抓取代码后pip install

如果是Windows用户,并且希望绕过繁琐的安装步骤。则可以下载笔者已经生成的exe文件。下载直接运行其中的 EasyPen.exe 即可

https://github.com/lijiejie/EasyPen/releases

为了能够完整使用扫描器,还需要配置好DNS Log地址,域名列表等。请参考用户文档。

开发计划

目前Alpha 1.0 只完成了基础的框架,待开发完善的功能

  • 适配支持各种类型的DNSLog平台
  • 集成web指纹识别功能,标签功能(Server / Shiro / PHP / Java 等),可视化预览
  • 维护预置扫描模板(插件集合名称)
  • 添加第三方插件的执行支持,如:python / YAML 插件,支持复用其他开源项目插件
  • 简易插件编辑和调试功能
  • 漏洞查看界面一键复核验证功能(漏洞依然存在则高亮显示)
  • 优化暴力破解相关,包括字典维护
  • BBScan插件的集成
  • 扫描性能持续提升
  • 重构代码便于其他贡献者增加工具、插件

开源DNSLog工具eyes.sh

背景

eyes.sh 是一个用来辅助安全测试和漏扫工具的DNS Log / HTTP Log检测工具,基于 BugScan DNSLog 优化。 感谢四叶草安全、感谢坤哥 🙂 。

  • 公司内部扫描器每天产生数百万次DNS Log接口调用
  • 因为某些原因,DNSLog服务部署在低配置的海外VPS,成为了扫描系统的一个瓶颈

在这个背景之下,我们对DNSLog服务做了一些简单的优化。

增强的功能

  • 更加友好的分页、删除、查看指定IP,增加搜索功能,增加显示IP定位、显示Request Headers、捕获Request Body
  • 支持监控新记录自动刷新(可以关键词过滤,关注特定目标或特定漏洞)
  • 支持DNS重绑定
  • 接口优化,增加支持Group DNS查询,减少扫描器的接口调用次数
    • 例如,扫描器先以 (主机名+任务ID)做DNS前缀,投递完所有payloads,任务结束时,通过单个查询,检查是否有漏洞被触发
  • API接口域名TTL为0,导致过多无意义查询,修正为1200
    • 原来每次API请求都将产生额外的DNS查询
  • 增加了注册、一键生成随机域名、简单管理开关、简单登录锁定等
  • 数据库优化,后端使用MySQL ,增加索引,数百万记录下查询性能较好

有兴趣的同学可以部署试试:   

https://github.com/lijiejie/eyes.sh

http://eyes.sh    

  • 演示账号 demo / demo@pass,请注意,该账号删除功能无效
  • 也可以在登录页面中选择 创建随机ID并登录
DNSLog
Web Log

关注我的微信公众号,获取更多扫描器代码

Django bulk_update可能卡死问题

在一个多年前的历史项目中,我们发现,django cron job出现了卡死现象。 应用逻辑没有被完整执行直到结束,程序已经僵死了。

调试分析卡死的Python进程,请参考: https://wiki.python.org/moin/DebuggingWithGdb

通过调试进程,我们发现应用卡死在了

Domain.objects.bulk_update(update_domain_list, [‘ips_from_fuxi’])

如下图所示:

回到源代码中,在上下文找到了原因,原来,需要bulk update的列表,没有在循环体内部正确被初始为空。 需要update的列表出现了持续增长,最终导致bulk update 超大的列表,卡死应用程序。

正确初始化列表,即可解决bulk update hung死的问题。