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. 通过使用chatgpt 逐步解决egg项目学习的一些问题【笔记】

    我的需求提问 创建一个html页面,这个页面包括通过学生id查询学生详情的组件,和通过学生姓名,身份证,选择班级的组件,并把代码告诉我 chatgpt回答 好的,以下是一个包含两个组件的HTML页面, ...

  2. 【Visual Leak Detector】QT 中 VLD 输出解析(一)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 无内存泄漏时的输出报告 1. 使用方式 在 QT 中使用 VLD 的方法可以查看另外几篇博客: [Vi ...

  3. vue环境安装与配置

    https://www.jb51.net/article/251371.htmhttps://www.yht7.com/news/193355 一.下载和安装Vue: https://nodejs.o ...

  4. 用BingGPT写一首勉励自己的诗

    觉得写的还挺有意思,所以记录一下,祝自己在今后的生活中努力学习,学有所成 勤学不辍志,博览群书知. 海纳百川理,山高自有路. 勿以时日长,惟以功夫深.

  5. 长达 1.7 万字的 explain 关键字指南!

    当你的数据里只有几千几万,那么 SQL 优化并不会发挥太大价值,但当你的数据里去到了几百上千万,SQL 优化的价值就体现出来了!因此稍微有些经验的同学都知道,怎么让 MySQL 查询语句又快又好是一件 ...

  6. 面对AI的兴起,从人类发展到个人发展,普通人应当如何抉择?

    这一周被各种 AI 卷的不行,从 ChatGPT 4.0 上线到百度文心一言发布会,再到微软的 Microsoft 365 Copilot. 网上有很多人.公众号吐嘈百度,而晓衡接触到的圈子还有一些不 ...

  7. python注册热键方式

    #!/usr/bin/env python3   import win32con import ctypes import ctypes.wintypes from threading import  ...

  8. 5.根据uid获取用户所有收货地址信息和设置默认地址

    1.总结:昨天主要是实现了根据uid获取该用户的所有收货地址以及设置默认地址:再对默认地址的实现里面让我认识到它的具体操作,首先我们根据aid查询收货地址 再根据收货地址查询到地址归属人的信息,判断u ...

  9. Vulnhub Development靶场 Walkthrough

    Recon 首先使用netdiscover进行二层Arp扫描. ┌──(kali㉿kali)-[~] └─$ sudo netdiscover -r 192.168.80.0/24 Currently ...

  10. CSS样式中颜色与颜色值的应用

    使用CSS描绘页面样式时,颜色是其中不可或缺的,无论是对文本.背景还是边框.阴影,我们都写过无数代码用来增添颜色.而为了让网页的色彩表现更出色,我们很有必要完整梳理下CSS中的色彩. 要讲清楚CSS中 ...