标签:树结构 变异 解构 漏洞 API Fuzz Scalpel
Scalpel简介
Scalpel是一款自动化Web/API漏洞Fuzz引擎,该工具采用被动扫描的方式,通过流量中解析Web/API参数结构,对参数编码进行自动识别与解码,并基于树结构灵活控制注入位点,让漏洞Fuzz向量能够应对复杂的编码与数据结构,实现深度漏洞挖掘。
- 目前我们的Fuzz引擎端已打包为一个小工具,内置100+漏洞POC,供大家试用:
https://github.com/StarCrossPortal/scalpel
深度参数注入原理
随着Web应用复杂度的提升与API接口的广泛使用,在HTTP应用漏洞Fuzz过程中,
传统的「Form表单明文传参的模式」已经逐渐变为「复杂、嵌套编码的参数传递」。在此情况下,直接对参数内容进行注入或替换,无法深入底层的漏洞触发点。
漏洞Fuzz过程中需要对这些「结构体、编码」进行抽离,找到真正的注入点位,方可进行自动化漏洞测试。
Scalpel拥有一个强大的数据解析和变异算法,它可以将常见的数据格式(json, xml, form等)解析为树结构,然后根据poc中的规则,对树进行变异,包括对叶子节点和树结构的变异。变异完成之后,将树结构还原为原始的数据格式。
Scalpel主体结构分为被动代理、Fuzz向量生成与验证、结果输出三个阶段:
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=NzBiOTIyMWQ2OGI2ZjQ0MzA5Y2EzY2ZlZTYwZDg1YTRfcXJ2eWcwaGZLVnRkd3NCcnV4OFZxVUdqTzNwUzY0YTRfVG9rZW46Ym94Y25ubVhkUUNXOFZ0TzU4QmZUUEo2VGhlXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
漏洞检测部分,采用解析算法,深度解析流量请求中的参数,通过POC中设定的注入点和变异方式生成测试请求,发送请求之后,再通过POC中的验证规则进行成功性判断,最终输出Fuzz结果。
以下面这个JSON请求包为例,解析算法会将其转换为右边所示的树结构,无论其嵌套的层次有多深,解析算法会将其中的所有键值对都解析为一个树结构。然后可以对树中的叶子节点进行变异,也可以对树的整体结构上进行变异。在树上进行变异之后,将树按照原始的数据格式再还原回去,填充到请求报文中,形成变异的请求报文之后再发送出去。
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=OWQ4MmVkY2M1OTA3MzU2Y2I5MTZjMDE4OWQwNGQyMGFfY09sZ0JhUGc1MVh4WXRoRHBRejRqMmlPWVk1NUhpUEhfVG9rZW46Ym94Y240Z1hFc2s3R1RxV3BLWjh0NW9SWE1jXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
在原始参数结构解析之后,我们可以基于树结构来设定我们的测试向量注入方式:
对节点的变异方式有:
- 按数据类型注入payload
- 注入通用型payload
- 畸形数据替换
- 类型转换
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=ZWVlMzg0MTQxZjY5MDQ5NmRlZGJlZTg2NTk3MTYwZTRfRk91VEJNYktpSHhpS0loQjJLZXZiWlZvQTY2bDNiUmRfVG9rZW46Ym94Y25DOXlRNXpTY252N1VmRHdBb1BVbkxlXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
对树结构的变异方式有:
- 替换object类型结构
- 插入节点
- 删除节点
Scapel功能介绍
Scalpel扫描器支持以下漏洞检测或者挖掘场景:
1、检测目标已知安全的漏洞,包括CVE漏洞,热门框架、组件、中间件安全漏洞。
2、通用安全漏洞,包括但不限于SQL注入、XSS漏洞、文件上传、命令执行、文件读取等。
3、未知0day漏洞或者安全问题
同时支持多个参数位置的变异,包括:path、query、header、body等部分,具体可以参考Scalpel
漏洞POC
编写指南
案例1:CVE-2022-1388F5 BIG-IP API Unauthenticated RCE漏洞的检测
简单了解下漏洞,具体可以参考之前
分析文章,我们要实现RCE,需要构造如下特殊的请求:
1、访问路径为/mgmt/tm/util/bash
2、Host为localhost或者127.0.0.1时,绕过验证赋予用户身份
3、Connection头加上X-F5-Auth-Token
4、body部分添加json形式的执行命令
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=NTE2NjIwM2EyNWU0YmJlM2Q1ZWZiYmFlYTQyNTdmOWNfT0podkhDTU5VckJQOHdVVEZ3bVFiMVdlWEg4WjZCc2ZfVG9rZW46Ym94Y24wT2tGODdzekRqc0hMZkJuRTNmb3VnXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
为了检测到CVE-2022-1388漏洞是否存在,我们需要在发送构造的特殊请求后,识别响应中是否进行了命令执行。了解到整个检测的步骤后,开始编写漏洞POC
一一对应,在URL部分变异,变异方式为替换,变异值为/mgmt/tm/util/bash
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=ODI3MDE2NmQ4MWMxNDEyNzcxZDUzNjg4ZDE1ZGM2M2FfTzU2UGhHSXdOa2ozNmx2UGM5YUNsSllreGhHZ3FmSnlfVG9rZW46Ym94Y25DczA2MDRDcDJiSUQ5WXVWQWN4UFRlXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
在Host部分变异,变异方式为替换,变异值为localhost
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=NzYwZTQ3NzhmMTk5MTg2YWIwYWMwYjNlNWVmMGRlOWZfTzFVZXFLR1g4MVNOQ21tcUpKWEgzTlJMMldaeUhxbDJfVG9rZW46Ym94Y25peDRRRVgyZ1VRdHliSVg2SmRrYWVmXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
对Heder部分的变异,变异方式为替换,变异值为Keep-Alive,X-F5-Auth-Token
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=NTBjZjg4NmI3NzE4N2RjMTA5NzAwZTJmZTNhNDc5MzdfWThnSHZBdnI2Y3hvNXJwRjFoS1pkNWszbXJDYmE3N0pfVG9rZW46Ym94Y24xanM3WWNqcUVwdUc2OTcxM3hJbGpiXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
对body部分的变异,变异方式为替换,变异值为我们需要执行的命令,这里执行id命令
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=YTFjNDBjMjMwNmJiZDk3NDVhZjk1OTBkYzUyOWMzNTlfNUxwVDVvTXVZdGhLeEtyZG1odTBDQTltZERYSHd6ZVVfVG9rZW46Ym94Y25UZEpqMjM0cmNPa2pDQ2F5aWcycDFnXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
最后对响应的匹配,使用正则识别id命令之后的结果
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=MmNhODA1YTIwNzcwYjYzOWMxMzgxMjVhNDM4MDNjMWZfZnhkM2Z2bzE4aGoyUHNySUtETHJrbEZTYkJlVHlhODlfVG9rZW46Ym94Y25tb0JpclRRdUpnUlZhQXN0MlEyMjRiXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
在编辑好漏洞POC之后,运行扫描器进行检查
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=OGE1NzkxN2RmNjk0MzVjNjM4YjM2OTcyMTNhMzAyOWRfWFJrY1BPTTZST2VuY25OMm9VS1hGWUJya2VJNHR3SE1fVG9rZW46Ym94Y25RaWVzdkFYbnJJMVFaaElldlFNeG9oXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
在被动扫描的过程,实际获取到的数据包如下:
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=M2EyYmM3YmZiMTY3YWZmZDUyNjY1ZDA3ZDYzZjhlYTBfM0dzY2laYjhQSGdnUEFtQ1BKM2RDanhEVWlxenh5QjJfVG9rZW46Ym94Y25lZkxPTnhyOVBsdE1pQzhnT1NNNDVmXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
如果存在漏洞,将会以html文件的形式记录存在漏洞的信息,查看此次扫描结果
成功扫描出CVE-2022-1388F5 BIG-IP API Unauthenticated RCE漏洞,漏洞的请求也变异无误,最后的响应中也是执行了id命令。
案例二:利用Scalpel工具挖掘多个0day漏洞
Scalpel工具使用较为灵活,通过对检测目标变异响应的check,可以发现检测目标中未知的安全问题。
例如为发现某些API接口是否存在账号密码的泄露,可以在check部分利用正则表达式匹配具体的泄露数据。
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=NzE5MTY5MjgzNTE4ZjMwMTY2NzgzMTU0OGRhM2E2ZjFfcDAxTmhrREtyRE5ZU1RMYUU3VnZMdlVvYmdXdjI4MUJfVG9rZW46Ym94Y25IcU1ISUZscFVWbXdiRmVHU3hmMnloXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
为发现目标是否存在文件读取漏洞,可以在多个变异位置插入或者替换payload
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=NGYwYzUzYmMyODE0ZjdjOTIzNDc4YWE5ZmQxM2E3OThfOXlTenV5eHJ0V0lWc1hiQTlyaDhicHR4d0piNkg0WXBfVG9rZW46Ym94Y25mQWd6T3pwY2VxZzFHbTdhODY4WU1kXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
为发现SQL注入漏洞,可以在query、Heder、body中的参数插入' and 1=1类似的payload
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=ZmE4NTQ3NzViMDU4ZDI5MDlhMmQ5M2VkMDViYzg4N2JfbHhkdHJ4aVFUaXk0VEtXR0M0UWlrREc4bXBDNVhOY2NfVG9rZW46Ym94Y255ajJPd0V1a0dZR3d6UEE0THEzMkVlXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
星阑实验室成员利用如上的类似通用检测规则,挖掘多个0day漏洞,已提交给CNVD国家信息安全共享平台并被收录。
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=NDRhMDI5N2Q4MDExZjRlYjI3MTg2NDE2OTk0ZGZmZTNfWjYya01pSnFKbGoxTW9kUVJSVmkwdjNwU0RQYTdvT0VfVG9rZW46Ym94Y252SHViWU1pZ1VZd293bW9tVVBmbm9oXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
同时发现某Apache开源项目的CVE漏洞,报告被该团队接受并正在修复,尚未披露。
工具地址
GitHub地址下载地址:https://github.com/StarCrossPortal/scalpel
目前已支持100+常见漏洞Fuzz向量与POC,持续维护中。
![](https://starcross.feishu.cn/space/api/box/stream/download/asynccode/?code=Mjc4ZTdlY2Y5MDNkYWUxOTA3OTcxZDE0NDk4YjNhZDlfRTR4c2ZFNDNiaWhBS2FwMG9oZk9FOUtDbnNBb3c1eWRfVG9rZW46Ym94Y25QVzRKUDJHMXljMDlGZ2dQTXh3N0VkXzE2Njc5MDUzMDE6MTY2NzkwODkwMV9WNA)
Scalpel支持多个平台,请根据您的平台或者需求下载相应的版本
标签:树结构,
变异,
解构,
漏洞,
API,
Fuzz,
Scalpel
From: https://www.cnblogs.com/starcross/p/16870834.html