Scalpel 简介
Scalpel是一款自动化Web/API漏洞Fuzz引擎,该工具采用被动扫描的方式,通过流量中解析Web/API参数结构,对参数编码进行自动识别与解码,并基于树结构灵活控制注入位点,让漏洞Fuzz向量能够应对复杂的编码与数据结构,实现深度漏洞挖掘。
-
详细技术原理可参考KCon 2022议题:《自动化API漏洞Fuzz实战》
-
目前我们的Fuzz引擎端已打包为一个小工具,内置100+漏洞POC,供大家试用:
https://github.com/StarCrossPortal/scalpel
深度参数注入原理
随着Web应用复杂度的提升与API接口的广泛使用,在HTTP应用漏洞Fuzz过程中,传统的「Form表单明文传参的模式」已经逐渐变为「复杂、嵌套编码的参数传递」。在此情况下,直接对参数内容进行注入或替换,无法深入底层的漏洞触发点。
漏洞检测部分,采用解析算法,深度解析流量请求中的参数,通过POC中设定的注入点和变异方式生成测试请求,发送请求之后,再通过POC中的验证规则进行成功性判断,最终输出Fuzz结果。
以下面这个JSON请求包为例,解析算法会将其转换为右边所示的树结构,无论其嵌套的层次有多深,解析算法会将其中的所有键值对都解析为一个树结构。然后可以对树中的叶子节点进行变异,也可以对树的整体结构上进行变异。在树上进行变异之后,将树按照原始的数据格式再还原回去,填充到请求报文中,形成变异的请求报文之后再发送出去。
在原始参数结构解析之后,我们可以基于树结构来设定我们的测试向量注入方式:
Scapel 功能介绍
Scalpel扫描器支持以下漏洞检测或者挖掘场景:
4、body部分添加json形式的执行命令
为了检测到CVE-2022-1388漏洞是否存在,我们需要在发送构造的特殊请求后,识别响应中是否进行了命令执行。了解到整个检测的步骤后,开始编写漏洞POC
在Host部分变异,变异方式为替换,变异值为localhost
对Heder部分的变异,变异方式为替换,变异值为Keep-Alive,X-F5-Auth-Token
对body部分的变异,变异方式为替换,变异值为我们需要执行的命令,这里执行id命令。
最后对响应的匹配,使用正则识别id命令之后的结果。
在编辑好漏洞POC之后,运行扫描器进行检查。
在被动扫描的过程,实际获取到的数据包如下:
为发现目标是否存在文件读取漏洞,可以在多个变异位置插入或者替换payload
星阑实验室成员利用如上的类似通用检测规则,挖掘多个0day漏洞,已提交给CNVD国家信息安全共享平台并被收录。
同时发现某Apache开源项目的CVE漏洞,报告被该团队接受并正在修复,尚未披露。
工具地址
GitHub地址下载地址:https://github.com/StarCrossPortal/scalpel
Scalpel支持多个平台,请根据您的平台或者需求下载相应的版本。
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。
原文始发于微信公众号(星阑实验室):Scalpel:解构API复杂参数Fuzz的「手术刀」