当前位置: 首页 > news >正文

JAW:一款针对客户端JavaScript的图形化安全分析框架

关于JAW

JAW是一款针对客户端JavaScript的图形化安全分析框架,该工具基于esprima解析器和EsTree SpiderMonkey Spec实现其功能,广大研究人员可以使用该工具分析Web应用程序和基于JavaScript的客户端程序的安全性。

工具特性

1、动态可扩展的框架,支持分析JavaScript程序以检测客户端漏洞;

2、使用基于Chromium的爬虫程序,利用DevTools协议和浏览器扩展API增强其功能;

3、支持收集网页、脚本、事件、DOM 快照、网络消息、Web存储和Cookie数据;

4、实现了JavaScript 混合代码属性图 (HPG) ;

5、支持交互式检测或自动检测不安全的程序行为;

6、独立的内置查询用于检测客户端 CSRF、请求劫持和DOM Clobbering漏洞;

7、设计并执行定制的安全相关程序分析,包括预定义 JavaScript 源和接收器之间的数据流分析、控制流和可达性分析、利用 DOM 快照解析 DOM 查询选择器、通过抽象语法树 (AST) 进行模式匹配等;

工具架构

工具要求

1、最新版本的NPM包管理器(Node.JS);

2、最新稳定版Python 3.x;

3、pip包管理器;

工具安装

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/SoheilKhodayari/JAW.git

然后切换到项目目录中,执行工具安装脚本完成依赖组件的安装:

cd JAW$ ./install.sh

运行管道

我们可以通过以下方式在命令行终端中运行管道实例:

$ python3 -m run_pipeline --conf=config.yaml

命令行参数

$ python3 -m run_pipeline -husage: run_pipeline.py [-h] [--conf FILE] [--site SITE] [--list LIST] [--from FROM] [--to TO]This script runs the tool pipeline.optional arguments:-h, --help                 显示工具帮助信息和退出--conf FILE, -C FILE       管道配置文件 (默认: config.yaml)--site SITE, -S SITE        目标待测站点 (默认: None)--list LIST, -L LIST         目标待测站点列表 (默认: None)--from FROM, -F FROM    设置待测站点列表的第一个入口点 (默认: -1)--to TO, -T TO            设置待测站点列表的最后一个入口点 (默认: -1)

工具使用

下列命令可以构建一个JavaScript客户端属性图并执行Cypher查询:

$ python3 -m analyses.example.example_analysis --input=$(pwd)/data/test_program/test.js

下列命令可以执行Web爬虫:

$ cd crawler$ node crawler.js --seedurl=https://google.com --maxurls=100 --browser=chrome --headless=true

下列命令可以启动Web爬虫并执行动态污点分析:

$ cd crawler$ node crawler-taint.js --seedurl=https://google.com --maxurls=100 --headless=true --foxhoundpath=<optional-foxhound-executable-path>

下列命令可以将一个HPG导入到一个Neo4j图形化数据库中:

$ python3 -m hpg_neo4j.hpg_import --rpath=<path-to-the-folder-of-the-csv-files> --id=<xyz> --nodes=<nodes.csv> --edges=<rels.csv>

下列命令可以针对输出数据(hpg_crawler)创建一个混合属性图,并导入至本地Neo4j实例:

$ python3 -m engine.api <path> --js=<program.js> --import=<bool> --hybrid=<bool> --reqs=<requests.out> --evts=<events.out> --cookies=<cookies.pkl> --html=<html_snapshot.html>

使用Cypher查询执行安全分析:

$ python3 -m analyses.example.example_query_cypher

漏洞检测

首先,我们需要在config.yaml文件中针对漏洞类型启用分析组件:

request_hijacking:enabled: true# [...]#domclobbering:enabled: false# [...]cs_csrf:enabled: false# [...]

然后使用配置文件运行管道:

$ python3 -m run_pipeline --conf=config.yaml

我们还可以在管道中运行多个实例:

$ screen -dmS s1 bash -c 'python3 -m run_pipeline --conf=conf1.yaml; exec sh'$ screen -dmS s2 bash -c 'python3 -m run_pipeline --conf=conf2.yaml; exec sh'$ # [...]

分析输出结果如下:

[*] Tags: ['WIN.LOC'][*] NodeId: {'TopExpression': '86', 'CallExpression': '87', 'Argument': '94'}[*] Location: 29[*] Function: ajax[*] Template: ajaxloc + "/bearer1234/"[*] Top Expression: $.ajax({ xhrFields: { withCredentials: "true" }, url: ajaxloc + "/bearer1234/" })1:['WIN.LOC'] variable=ajaxloc0 (loc:6)- var ajaxloc = window.location.href

许可证协议

本项目的开发与发布遵循AGPL-3.0开源许可协议。

项目地址

JAW:【GitHub传送门】

参考资料

Chrome DevTools Protocol

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions

Introduction - Cypher Manual

https://www.facebook.com/notes/facebook-bug-bounty/client-side-csrf/2056804174333798/

DOM Clobbering

相关文章:

  • Java 序列流:Java 对象的序列化和反序列化详解
  • 基于 HTML+ECharts 实现智慧运维数据可视化大屏(含源码)
  • SpringCloud 负载均衡
  • linux、windows、macos,命令终端清屏
  • 从0到1:理发店预约剪发小程序开发笔记(上)
  • SpringBoot接入mongodb例子,并有增删改查功能
  • 四、GD32 MCU 常见外设介绍 (5) TIMER 模块介绍
  • Vue中的diff算法
  • 华为嵌入式面试题及参考答案(持续更新)
  • PyTorch 中的一个函数:torch.pow
  • 完美捕捉趋势!立足市场必备“指数通行红绿灯”!股票量化分析工具QTYX-V2.8.7...
  • 数据库(MySQL)-视图、存储过程、触发器
  • WPF MVVM框架:CommunityToolkit.Mvvm包使用介绍
  • 【Python】sqlite加密库pysqlcipher3编译安装步骤
  • C#/WinFrom TCP通信+ 网线插拔检测+客服端异常掉线检测
  • Android交互
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • C语言笔记(第一章:C语言编程)
  • Java到底能干嘛?
  • Java反射-动态类加载和重新加载
  • java概述
  • Java应用性能调优
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vue.js 移动端适配之 vw 解决方案
  • web标准化(下)
  • 简单实现一个textarea自适应高度
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #define、const、typedef的差别
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (备忘)Java Map 遍历
  • (笔记)M1使用hombrew安装qemu
  • (不用互三)AI绘画工具应该如何选择
  • (初研) Sentence-embedding fine-tune notebook
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (转)memcache、redis缓存
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .equals()到底是什么意思?
  • .NET C# 使用 iText 生成PDF
  • .net core 6 redis操作类
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net插件开发开源框架
  • .Net各种迷惑命名解释
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ 数据结构 - C++] AVL树原理及实现
  • [.NET]桃源网络硬盘 v7.4
  • [AR]Vumark(下一代条形码)