Skip to content

FastjsonScan4Burp 一款基于burp被动扫描的fastjson漏洞探测插件,可针对数据包中存在json的参数或请求体进行payload测试。旨在帮助安全人员更加便捷的发现、探测、深入利用fastjson漏洞,目前已实现fastjson探测、版本、依赖探测、出网及不出网利用和简易的bypass waf功能

Notifications You must be signed in to change notification settings

Niiiiko/FastjsonScan4Burp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

项目介绍

FastjsonScan4Burp 一款基于burp被动扫描的fastjson漏洞探测插件,可针对数据包中的存在json的参数或请求体进行payload测试。旨在帮助安全人员更加便捷的发现、探测、深入利用fastjson漏洞,目前以实现fastjson探测、版本探测、依赖探测以及出网及不出网利用和简易的bypass waf功能。

参考代码及检测思路:

https://github.com/pmiaowu/BurpFastJsonScan
https://github.com/lemono0/FastJsonParty
https://github.com/safe6Sec/Fastjson

更新记录

0228:1.修复加载插件后导致列表插件后的其他插件不可用情况 2.修复了yml文件生成时可能出现报错的情况,添加utf-8标准读取文件

工具模块

目前插件具有的功能模块:

  • 低感知探测扫描
  • 出网扫描
  • 不出网扫描
  • fastjson版本探测
  • fastjson依赖探测
  • bypass waf模块
  • dns平台实时切换

扫描原理

插件会自动发现数据包GET/POST请求中包含有json的value或请求体是否为Content-Type:application/json。判断依据为是否包含有{}或[] GET中value存在json image image POST中value存在json image image Content-Type为json(以下案例均是,不多赘述) 检测出json后,默认会调用fastjson探测、远程命令执行探测及不出网探测,各模块扫描原理详见下文。

使用手册

安装

初次加载会在当前目录下创建resources/config.yml文件。 image

基本设置如下,默认情况下不开启bypass waf模块,可根据实际勾选 image

基于被动扫描

插件会被动式地对数据包进行扫描,只需要启动插件后正常浏览数据包即可。插件扫描队列界面会对扫描结果进行展示。

  • extensionMethod:调用的扫描模块名称
  • issue:扫描结果
image

右键主动扫描

部分情况下想对单一某个数据包进行漏洞验证或其他原因,可以在repeater右键选择对应插件选择扫描或探测 image

或者使用doPassive再次进行被动扫描

image

dnslog切换

当出现dnslog error时,不需要更改config.yml,可直接在设置中切换dnslog平台,并进行下一轮扫描。其中ceye平台和eyes.sh平台需要在config.yml中配置对应token和Identify

image

结果输出

除了在burp中的issue中以及插件界面外,还会在插件部署目录下的resources文件夹中生成result.txt文件

image

扫描模块原理

被动扫描默认会调用低感知扫描、出网及不出网扫描,探测模块则存在于repeater右键中。

敏感环境下可开启bypass waf选项,并关闭命令回显拓展和远程命令拓展,仅保留低感知fastjson扫描。

低感知扫描

主要作用类似于xiasql插件,去探测是否使用了fastjson。尽量以相对较少、较低敏的payload对目标进行扫描。

判断方式如下:

  1. 破坏json原有数据格式:去除 } 号,匹配响应包中是否还有syntax error这种fastjson特征 image

  2. 使用出网探测payload,查看dns url是否有解析记录 注:使用如下payload且dnslog有数据不代表有漏洞,仅能证明使用了fastjson

{"@type":"java.net.Inet4Address","val":"dnslog-url"}
{{"@type":"java.net.URL","val":"http://dnslog-url"}:"x"}
{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog-url"}}

对应config.yml扫描模块如下:dnslogPayloads可自定义

image

远程命令拓展扫描

对应config.yml扫描模块如下:payloads可自定义

image

命令回显拓展扫描

对应config.yml扫描模块如下:payloadscommandInputPointField可自定义。commandInputPointField为插入的header头,通过java回显来判断是否存在漏洞

image

添加了c3p0和Bcel下的java回现利用payload。其中c3p0二次反序列化调用的是fastjson1.x原生利用链

image

版本探测

对应config.yml扫描模块如下:regexPayloadsdnsLogPayloads可自定义。

image

探测模块使用仅在右键repeater中

image image

探测原理:

  1. 优先使用{"@type":"java.lang.AutoCloseable",通过左侧的正则去匹配响应包报错版本号(版本1.2.76之后,其报错显示也是1.2.76,不会发生改变)
  2. 通过对应dnslog去匹配版本

在自定义dnsLogPayloads时,可编辑 ;左侧内容为任意版本。例如当发现了fastjon2.2版本对应的出网poc为{"anything":"xaga.dnslog.cn"}。则添加payload为

- "version=2.2; payload={\"anything\":\"dnslog-url\"}"

依赖探测

对应config.yml扫描模块如下:libraries依赖可自定义。

image image image

原理则是通过Character转换报错,通过接口回显结果来进行判断

{
  "x": {
    "@type": "java.lang.Character"{
  "@type": "java.lang.Class",
  "val": ""
}}

判断条件一:页面有对应类报错回显,则代表存在依赖

image

判断条件二:无报错回显则基于响应包进行布尔判断 先发送一个不存在的依赖,记录下响应包结果

image

再对依赖进行fuzz,通过响应包文本相似度(Levenshtein 距离算法)进行比较判断,来得出是否包含该依赖

image image

bypass waf

通过gson解析json格式,对key、value添加下划线后进行unicode、hex混合编码,在原有json基础上添加注释换行符。针对无法解析的json payload则对@type进行同上编码,在原有json基础上添加注释换行符。

ps:因为一些bypass姿势可能会影响payload的正确率,因此只使用了部分bypass方式。

https://github.com/lemono0/FastJsonParty/blob/main/1247-jndi-waf/write-up.md环境为例

image image

About

FastjsonScan4Burp 一款基于burp被动扫描的fastjson漏洞探测插件,可针对数据包中存在json的参数或请求体进行payload测试。旨在帮助安全人员更加便捷的发现、探测、深入利用fastjson漏洞,目前已实现fastjson探测、版本、依赖探测、出网及不出网利用和简易的bypass waf功能

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages