Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863537100

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

基于ESPRIMA解析器的JavaScript的属性图的开源,原型实现以及Estree spidermonkey规范。 JAW可用于分析Web应用程序和基于JavaScript的程序的客户端。

该项目已根据GNU AFFERO通用公共许可证v3.0许可。请参阅此处以获取更多信息。

Jaw在https://soheilkhodayari.github.io/jaw/上提供了一个GitHub页面网站。

发行说明:

2023年10月,JAW-V3(警长): JAW已更新以检测客户端请求劫持漏洞。 2022年7月,JAW-V2(Thetthing): JAW更新到其下一个主要版本,能够检测DOM CLOBBerbering漏洞。请参阅JAW-V2分支。 2020年12月,JAW-V1 :第一个原型版本。请参阅JAW-V1分支。

jaw

的概述

下颌的体系结构如下所示。

JAW_6_architecture_v3.png

测试输入

可以以两种不同的方式使用:

任意JavaScript Analysis:通过指定程序的文件系统路径来建模和分析任何JavaScript程序。

Web应用程序分析3:通过提供单个种子URL来分析Web应用程序。

数据收集

JAW具有几个启用JavaScript的Web爬网机,用于大规模收集Web资源。

HPG构造

使用收集的Web资源创建混合程序图(HPG),该图将导入到NEO4J数据库中。

可选地,为HPG构造模块提供语义类型的映射到自定义JavaScript语言令牌,从而根据其目的促进JavaScript函数的类别(例如,HTTP请求函数)。

分析和输出

查询构建的NEO4J图数据库,以进行各种分析。 JAW为数据流分析,控制流分析,可及性分析和模式匹配提供实用程序遍历。这些遍历可用于开发自定义安全分析。

下巴还包括用于检测客户端CSRF的内置遍历,DOM CLOBBERing和请求劫持漏洞。

输出将存储在与输入的文件夹中。

设置

安装脚本依赖于以下先决条件:-最新版本的NPM软件包管理器(Node JS) - python 3.x的任何稳定版本3.x -Python Pip Package Manager

之后,安装必要的依赖项Via:

$ ./install.sh,有关详细的安装说明,请参阅此处。

快速启动

运行管道

您可以在背景屏幕Via:中运行管道实例

$ python3 -m run_pipeline -conf=config.yaml CLI提供以下选项:

$ python3 -m run_pipeline -h

USAGE: run_pipeline.py [-h] [ - conf file] [ - site site] [ - 列表列表] [ - from from]

该脚本运行工具管道。

可选参数:

-h, - 赫尔普显示此帮助消息和退出

-conf文件,-c文件管道配置文件。 (Default: config.yaml)

- 网站,-s网站网站进行测试;覆盖配置文件(Default:无)

- 列表列表,-l列表网站列表要测试;覆盖配置文件(Default:无)

- 从第一个条目中,从第一个条目中考虑提供站点列表何时;覆盖配置文件(Default: -1)

- to,-t到最后一个条目,请考虑何时提供站点列表;覆盖配置文件(Default: -1)输入config: jaw期望.yaml配置文件作为输入。有关示例,请参见Config.yaml。

暗示。配置文件指定不同的通行证(例如,爬网,静态分析等),可以为每个漏洞类启用或禁用。这允许单独或以不同的顺序运行工具构建块(例如,首先爬网,然后进行安全分析)。

快速示例

用于运行快速示例,演示如何构建属性图并在其上运行Cypher查询,DO:

$ python3 -M andarys.example.example_analysis-输入=$(pwd)/data/test_program/test.js

爬行和数据收集

此模块收集数据(即测试的JavaScript代码和状态值)。如果要测试文件系统上已经有的特定JavaScript文件,则可以跳过此步骤。

Jaw具有基于硒(JAW-V1),Puppeteer(JAW-V2,V3)和剧作家(JAW-V3)的爬虫。对于大多数最新功能,建议使用uppeteer或基于剧作的版本。

剧作家CLI与Foxhound

这款Web Crawler员工Foxhound是Firefox的乐器版本,在通过网页导航时执行动态污染跟踪。要启动爬行者,DO:

$ CD爬网

$ Node crawler-taint.js -seedurl=https://google.com -maxurls=100 -headless=true-true-foxhoundpath=optional-foxhound-path-foxhound-path foxHoundPath默认设置为以下Directory: Crawler/Firfox,其中包含一个名为Binary Firefox。

Note:您需要使用此版本的Foxhound构建。 JAW-V3版本中包含Ubuntu构建。

木偶cli

启动爬行者,do:

$ CD爬网

$ node crawler.js - seedurl=https://google.com -maxurls=100 -browser=chrome -headless -headless=true,请参阅此处。有关更多信息。

硒cli

启动爬行者,do:

$ CD爬行者/HPG_CRAWLER

$ vim docker-compose.yaml#设置要在此处爬网的网站并保存

$ docker-compose构建

$ docker -compose -D请参阅此处的HPG_CRAWLER的文档以获取更多信息。

图形结构

HPG构造CLI

用于生成给定(一组)JavaScript文件的HPG,DO:

$ node Engine/cli.js -lang=js -graphid=graph1 -input=/in/file1.js -input=/in/file2.js -output=$(pwd)/data/data/out/-mode=csv

可选参数:

-lang:输入程序的语言

-graphid:生成的HPG的标识符

-Input:输入程序的路径

- 输出:输出hpg的路径必须为i

-mode:确定输出格式(CSV或GraphMl)

HPG导入CLI

以在Neo4J Graph数据库(Docker实例)内导入HPG,DO:

$ python3 -m hpg_neo4j.hpg_import -rpath=to to to to to-the-folder-the-csv-files -id=xyz -nodes=nodes.csv-eDges=rels.csv=rels.csv

$ python3 -m hpg_neo4j.hpg_import -h

USAGE: HPG_IMPORT.PY [-H] [ - -RPATH P] [-ID I] [ - NODES N] [ - EDGES E]

该脚本将属性图的CSV导入到Neo4J Docker数据库中。

可选参数:

-h, - 赫尔普显示此帮助消息和退出

- 吊车P的相对路径与包含`data`目录中的图形CSV文件的文件夹相对路径

- ID i图形或Docker容器的标识符

- 节点n节点CSV文件的名称(default: nodes.csv)

- edges e关系CSV文件的名称(Default: Rels.CSV)

HPG构造和导入CLI(V1)

,以创建HPG_Crawler输出的混合属性图并在本地NEO4J实例中导入它,您也可以do: do:

$ 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 Specification of Parameters: path: absolute path to the folder containing the program files for analysis (must be under引擎/输出文件夹)。 -js=program.js:用于分析的JavaScript程序的名称(DEFAULT: JS_PROGRAME.JS)。 -import=boo:是否应将构造的属性图导入到活动的neo4j数据库(Default: True)。 -HYBRID=BOOL:是否启用了混合模式(Default: False)。这意味着测试仪希望通过输入文件来丰富属性图,该文件的任何HTML快照,触发事件,HTTP请求和cookie(如Jaw Crawler收集)。 - reqs=requests.out:仅用于混合模式,包含观察到的网络请求序列的文件的名称,将字符串false传递以排除(default: request_logs_short.out.out)。 -evts=Events.out:仅用于混合模式,包含射击事件序列的文件的名称,将字符串false传递以排除(default: Events.out)。 -html=html_snapshot.html:仅用于混合模式,包含cookie的文件的名称,将字符串false传递以排除(default: cookies.pkl)。 -html=html_snapshot.html:仅用于混合模式,包含DOM树快照的文件的名称,将字符串false传递到dublate(default: html_rendered.html)。有关更多信息,您可以使用Graph Construction API:提供的帮助CLI

$ Python3 -m Engine.API -H

安全分析

可以使用Cypher或NeoModel ORM查询构造的HPG。

运行自定义图形遍历

您应该在分析/Analysis_name中放置并运行查询。

选项1:使用NeoModel Orm(已弃用)

您可以使用NeoModel Orm查询HPG。写一个query:

(1)查看HPG数据模型和语法树。 (2)查看HPGS的ORM模型(3)请参阅提供的示例查询文件; example_query_orm.py在分析/示例文件夹中。 $ python3 -m analyzes.example.example_query_orm有关更多信息,请参阅此处。

选项2:使用Cypher查询

您可以使用Cypher编写自定义查询。对于此:

(1)查看HPG数据模型和语法树。 (2)请参见提供的示例查询文件; example_query_cypher.py在分析/示例文件夹中。 $ python3 -m andarys.example.example_query_cypher有关更多信息,请参阅此处。

漏洞检测

本节介绍了如何配置和使用下颌进行漏洞检测以及如何解释输出。下颌包含用于检测客户端CSRF和DOM CLOBBERING的独立查询

步骤1。在输入config.yaml文件:中启用漏洞类的分析组件

request_hijacking:

启用: True

#[.]

Domclobbering:

启用: false

#[.]

CS_CSRF:

启用: false

#[.]步骤2。使用:运行管道实例

$ 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'

$#[.]要自动生成并行配置文件,您可以使用generate_config.py脚本。

如何解释分析的输出?

输出将存储在一个名为sink.flows.out的文件中,以在与输入的文件夹中。例如,对于客户端的CSRF,对于每个检测到的HTTP请求,下颌输出标记与构造请求(即程序切片)元素相关的语义类型集(又称语义标签或标签)的条目。例如,通过窗口。LocationIndection Point可以原谅具有语义类型['win.loc']的HTTP请求。但是,标记为['非范围']的请求是不可原谅的。

示例输出条目在:下显示

[*] tags: ['win.loc']

[*] nodeid: {'topexpression':'86','callexpression':'87','gright':'94'}

[*]位置: 29

[*]功能: AJAX

[*] template: ajaxloc +'/bearer1234/'

[*] top Expression: $ .ajax({Xhrfields: {withCredentials:'true'},url: ajaxloc +'/bearer1234/'})

1: ['win.loc']变量=ajaxloc

0 (loc:6)- var ajaxloc=window.location.href This entry shows that on line 29, there is a $.ajax call expression, and this call expression triggers an ajax request with the url template value of ajaxloc + '/bearer1234/, where the parameter ajaxloc is a program slice reading its value at line 6 from window.location.href, thus forgetable through ['win.loc']。

测试Web应用程序

为了简化下颌的测试过程并确保您的设置准确,我们提供了一个简单的node.js Web应用程序,您可以使用该应用程序测试JAW。

首先,安装依赖项VIA:

$ CD测试/测试Webapp

然后安装$ npm,然后在新的屏幕:中运行该应用程序

$ screen -dms jawwebapp bash -c'端口=6789 npm run devstart; Exec SH'

详细的文档。

有关更多信息,请访问我们的Wiki页面。以下是用于快速访问的目录。

jaw

的网络爬网

Web Crawlers 010-10属性图节点语法和语法树属性图

混合属性图(HPGS)的数据模型

图形结构

使用jaw with Neo4j docker容器

图形遍历

构建属性图3010-10在属性图3

贡献和行为准则

拉的属性图3

学术出版物

拉动请求。该项目旨在是一个安全,受欢迎的空间,预计贡献者将遵守《贡献者的行为守则》。

确认

如果您使用下巴进行学术研究,我们建议您引用以下论文:

@inproceedings {jaw,

title={JAW:使用混合属性图和声明性遍历研究客户端CSRF,

作者={Soheil Khodayari和Giancarlo Pellegrino},

BookTitle={30th {USENIX}安全研讨会({USENIX} SECURION 21)},

年={2021},

地址={Vancouver,B.C。},

publisher={{usenix}协会},

} 010-1010颌骨已经走了很长一段路,我们想在这里给贡献者一个当之无愧的喊叫!

@tmbrbr, @c01gide,@jndre和sepehr mirzaei。