首页 > 其他分享 >Scalpel:解构API复杂参数Fuzz的「手术刀」

Scalpel:解构API复杂参数Fuzz的「手术刀」

时间:2022-11-08 19:12:31浏览次数:72  
标签:树结构 变异 解构 漏洞 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向量生成与验证、结果输出三个阶段: 漏洞检测部分,采用解析算法,深度解析流量请求中的参数,通过POC中设定的注入点和变异方式生成测试请求,发送请求之后,再通过POC中的验证规则进行成功性判断,最终输出Fuzz结果。   以下面这个JSON请求包为例,解析算法会将其转换为右边所示的树结构,无论其嵌套的层次有多深,解析算法会将其中的所有键值对都解析为一个树结构。然后可以对树中的叶子节点进行变异,也可以对树的整体结构上进行变异。在树上进行变异之后,将树按照原始的数据格式再还原回去,填充到请求报文中,形成变异的请求报文之后再发送出去。   在原始参数结构解析之后,我们可以基于树结构来设定我们的测试向量注入方式:   对节点的变异方式有:
  1. 按数据类型注入payload
  1. 注入通用型payload
  1. 畸形数据替换
  1. 类型转换
  对树结构的变异方式有:
  1. 替换object类型结构
  1. 插入节点
  1. 删除节点
 

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形式的执行命令 为了检测到CVE-2022-1388漏洞是否存在,我们需要在发送构造的特殊请求后,识别响应中是否进行了命令执行。了解到整个检测的步骤后,开始编写漏洞POC 一一对应,在URL部分变异,变异方式为替换,变异值为/mgmt/tm/util/bash 在Host部分变异,变异方式为替换,变异值为localhost 对Heder部分的变异,变异方式为替换,变异值为Keep-Alive,X-F5-Auth-Token 对body部分的变异,变异方式为替换,变异值为我们需要执行的命令,这里执行id命令 最后对响应的匹配,使用正则识别id命令之后的结果 在编辑好漏洞POC之后,运行扫描器进行检查 在被动扫描的过程,实际获取到的数据包如下: 如果存在漏洞,将会以html文件的形式记录存在漏洞的信息,查看此次扫描结果 成功扫描出CVE-2022-1388F5 BIG-IP API Unauthenticated RCE漏洞,漏洞的请求也变异无误,最后的响应中也是执行了id命令。   案例二:利用Scalpel工具挖掘多个0day漏洞 Scalpel工具使用较为灵活,通过对检测目标变异响应的check,可以发现检测目标中未知的安全问题。 例如为发现某些API接口是否存在账号密码的泄露,可以在check部分利用正则表达式匹配具体的泄露数据。 为发现目标是否存在文件读取漏洞,可以在多个变异位置插入或者替换payload 为发现SQL注入漏洞,可以在query、Heder、body中的参数插入' and 1=1类似的payload 星阑实验室成员利用如上的类似通用检测规则,挖掘多个0day漏洞,已提交给CNVD国家信息安全共享平台并被收录。 同时发现某Apache开源项目的CVE漏洞,报告被该团队接受并正在修复,尚未披露。  

工具地址

GitHub地址下载地址:https://github.com/StarCrossPortal/scalpel 目前已支持100+常见漏洞Fuzz向量与POC,持续维护中。 Scalpel支持多个平台,请根据您的平台或者需求下载相应的版本

标签:树结构,变异,解构,漏洞,API,Fuzz,Scalpel
From: https://www.cnblogs.com/starcross/p/16870834.html

相关文章

  • java api
    api是应用程序编程接口,感觉像c的库,不过又有详细的说明中文在线文档:www.matools.comapi里的组织形式:包下有类接口异常,类下面有字段,构造方法,成员方法如何查找对......
  • 基于EDAS OPENAPI构建低成本云原生CICD
    在企业级场景中,EDAS会被集成到客户侧的研发测试的IT流程中形成更加完整的企业IT云化整体解决方案,如对接到客户的CMP多云管理平台,被串联到客户的CICD流水线中,和客户的统一监......
  • APISIX 全流量网关
    APISIX是一个基于云原生、高速可扩展的开源微服务网关节点实现,其自身主要优势是高性能和强大的扩展性。APISIX从 ​​etcd​​​ 中订阅获取所需的配置并以热更新的方式......
  • 完整的Android使用Messenger实现跨app通信,设置api和sdk版本30以上,设置包可见性(Androi
    服务端packagecom.jay.msgapp2;importandroid.app.Service;importandroid.content.Intent;importandroid.os.Bundle;importandroid.os.Handler;importandroi......
  • HDFS Java API
    HDFS(HadoopDistributedFileSystem)是Hadoop项目的核心子项目,在大数据开发中通过分布式计算对海量数据进行存储与管理。它基于流数据模式访问和处理超大文件的需求而开发......
  • 10 个每个开发人员都需要知道的API
    英文|https://javascript.plainenglish.io/10-apis-every-developer-needs-to-know-afd22876fc6e翻译| 杨小二我们很难找出在开发过程中没有使用API(应用程序编程接口)的......
  • spring boot Swagger2(version=2.7.0) 注解@ApiImplicitParam的属性dataType值为”自
    转载自:https://www.bbsmax.com/A/WpdKlbDqzV/注解:@ApiImplicitParams@ApiImplicitParam   name="需注解的API输入参数",value="接收参数的意义描述",paramType="参......
  • @ApiImplicitParam注解的dataType、paramType两个属性的区别?
    dataType="int"代表请求参数类型为int类型,当然也可以是Map、User、String等;paramType="body"代表参数应该放在请求的什么地方:  header-->放在请求头。请求参数的......
  • 基于 React 和 Redux 的 API 集成解决方案
    在前端开发的过程中,我们可能会花不少的时间去集成API、与API联调、或者解决API变动带来的问题。如果你也希望减轻这部分负担,提高团队的开发效率,那么这篇文章一定会对你......
  • 用于现代JavaScript的Observer API
    英文| https://dev.to/codyjasonbennett作者|CodyBennettObserverAPI(观察者API)释放了Web隐藏的超能力,以创建真正的响应式体验,从懒加载关键内容到非侵入式性能监控。在......