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支持多个平台,请根据您的平台或者需求下载相应的版本

Scalpel:解构API复杂参数Fuzz的「手术刀」的更多相关文章

  1. 【ES6 】ES6 解构赋值--函数参数解构赋值

    函数的参数也可以使用解构赋值. function add([x, y]){ return x + y; } add([1, 2]); 上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻 ...

  2. ES6新特性-------解构、参数、模块和记号(续)

    六.解构 解构提供了一个方便的地从对象或数组中提取数据的方法,请看下面的例子: //ES6 let [x,y]=[1,2];//x=1,y=2 //ES5 var arr=[1,2]; var x=a ...

  3. ES6学习 --函数参数默认值与解构赋值默认值

    1. ES6的解构ES6中引入了解构赋值的操作,其作用是:将值从数组Array或属性从对象Object提取到不同的变量中 即分为两种情况:从数组Array中解构,以及从对象Object中解构 ①.从数 ...

  4. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  5. 第七天python3 函数、参数及参数解构(二)

    函数参数 参数规则: 参数列表参数一般顺序是:普通参数<--缺省参数<--可变位置参数<--keyword-only参数(可带缺省值)<--可变关键字参数 def fn(x,y ...

  6. ES6 - Note2:解构赋值

    ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量. 1.数组的解构赋值 在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示 let [a,b,c] = [1 ...

  7. 变量的解构赋值////////////z

    变量的解构赋值 数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 圆括号问题 用途 数组的解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值, ...

  8. ES6—解构赋值

    1.什么是解构赋值 ES6允许按照预定的模式,从数组.对象中提取值,对变量进行赋值. 我们直接用例子说明.    2. 数组的解构赋值 数组传统的变量赋值:      var arr=[1,2,3]; ...

  9. ES6解构赋值

    前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 ...

  10. [js高手之路]es6系列教程 - 解构详解

    解构通俗点说,就是通过一种特定格式,快捷的读取对象/数组中的数据的方法, es6之前,我们通过对象名称[键] 读取数据 var User = { 'name' : 'ghostwu', 'age' : ...

随机推荐

  1. IO 流分类

    更多内容,前往 IT-BLOG 一.File File 类(磁盘操作)可以用于表示文件和目录的信息,但是它不表示文件的内容.递归地列出一个目录下所有文件: 1 public static void l ...

  2. LinkedBlockingQueue出入队实现原理

    类图概述 由类图可以看出,L是单向链表实现的,有两个ReentrantLock实例用来控制元素入队和出队的原子性,takeLock用来控制只有一个线程可以从队头获取元素,putLock控制只有一个线程 ...

  3. Sping Security前后端分离两种方案

    前言 本篇文章是基于Spring Security实现前后端分离登录认证及权限控制的实战,主要包括以下四方面内容: Spring Seciruty简单介绍: 通过Spring Seciruty实现的基 ...

  4. 全网最详细中英文ChatGPT-GPT-4示例文档-信息智能提取从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  5. -O1 -O2 -O3 优化的原理是什么?

    一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的 p命令查看变量的值,改变变量的值等.并且把获取最快的编译速度作为它的目标. ...

  6. kubernetes核心实战(四)--- Deployments

    6.Deployments(重点) 一个 Deployment 控制器为 Pods和 ReplicaSets提供描述性的更新方式. 描述 Deployment 中的 desired state,并且 ...

  7. 涨姿势了,有意思的气泡 Loading 效果

    今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元 ...

  8. 极简cfs公平调度算法

    1. 说明 1> linux内核关于task调度这块是比较复杂的,流程也比较长,要从源码一一讲清楚很容易看晕 2> 本篇文章主要是讲清楚cfs公平调度算法如何将task在时钟中断驱动下切换 ...

  9. 扎实打牢数据结构算法根基,从此不怕算法面试系列之004 week01 02-04 使用泛型实现线性查找法

    1.算法描述 在数组中逐个查找元素,即遍历. 2.上一篇文的实现结果 在 扎实打牢数据结构算法根基,从此不怕算法面试系列之003 week01 02-03 代码实现线性查找法中,我们实现了如下代码: ...

  10. Win Airtest + 夜神模拟器 实现APP自动化

    前言: Airtest 是一个跨平台的UI自动化测试框架,适用于游戏和App.目前支持Windows.Android平台和 iOS 平台. 一.下载Airtest 下载地址:https://airte ...