GWTMap
GWTMap是一款针对GWT的安全审计工具,在它的帮助下,广大研究人员不仅可以对基于Google Web Toolkit(GWT)的应用程序进行安全审计,而且还可以使用GWTMap来映射这类应用程序的攻击面。该工具的主要功能是帮助广大研究人员提取出隐藏在现代GWT应用程序混淆客户端代码中的任何服务方法节点,并尝试生成GWT-RPC请求样例Payload来与这些应用程序进行交互。
依赖环境
脚本的正常运行需要Python3环境以及argparse和requests库。在安装并配置好Python3环境之后,我们可以使用下列命令来安装相应的依赖组件:
代码语言:javascript复制python -m pip install -r requirements.txt
帮助菜单
代码语言:javascript复制$ ./gwtmap.py -h
usage: gwtmap.py [-h] [--version] [-u <TARGET_URL>] -F <FILE> [-b <BASE_URL>] [-p <PROXY>] [-c <COOKIES>] [-f <FILTER>] [--basic] [--rpc] [--probe] [--svc] [--code] [--color] [--backup [DIR]] [-q]
Enumerates GWT-RPC methods from {hex}.cache.js permutation files
Arguments:
-h, --help 显示帮助信息并退出
--version 显示程序版本号并退出
-u <TARGET_URL>, --url <TARGET_URL>
目标GWT地址
-F <FILE>, --file <FILE>
本地拷贝文件路径
-b <BASE_URL>, --base <BASE_URL>
给定组合文件的URL基地址
-p <PROXY>, --proxy <PROXY>
HTTP代理URL地址URL,比如说:-p http://127.0.0.1:8080
-c <COOKIES>, --cookies <COOKIES>
访问远程资源所需的cookie,比如说:'JSESSIONID=ABCDEF; OTHER=XYZABC'
-f <FILTER>, --filter <FILTER>
输出过滤,比如说:-f AuthSvc.checkSession
--basic 启用HTTP Basic认证
--rpc 针对每一个方法生成序列化RPC请求
--probe 发送HTTP探测请求来测试每一个方法
--svc 显示枚举服务信息和方法
--code 导出给定资源的're-formatted'状态
--color 启用终端输出颜色高亮显示
--backup [DIR] 创建获取代码的本地拷贝
-q, --quiet 启用静默模式(最小化输出)
执行样例: ./gwtmap.py -u "http://127.0.0.1/example/example.nocache.js" -p "http://127.0.0.1:8080" --rpc
工具使用
通过目标的Bootstrap文件来枚举一个远程应用程序中的方法,并创建目标代码的本地备份(随机选择排列):
代码语言:javascript复制./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --backup
通过特定的代码组合枚举远程应用程序中的方法:
代码语言:javascript复制./gwtmap.py -u http://192.168.22.120/olympian/C39AB19B83398A76A21E0CD04EC9B14C.cache.js
通过一个HTTP代理枚举目标应用程序的路由流量方法:
代码语言:javascript复制./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --backup -p http://127.0.0.1:8080
枚举任意给定组合的本地文件拷贝中的方法:
代码语言:javascript复制./gwtmap.py -F test_data/olympian/C39AB19B83398A76A21E0CD04EC9B14C.cache.js
对特定服务或方法进行输出过滤:
代码语言:javascript复制./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --filter AuthenticationService.login
针对已过滤的服务中所有的方法生成RPC Payload,输出数据带有颜色高亮显示:
代码语言:javascript复制./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --filter AuthenticationService --rpc --color
针对所有已过滤服务方法自动测试(探测)生成的RPC请求:
代码语言:javascript复制./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --filter AuthenticationService.login --rpc --probe
完整使用样例
在这个样例中,我们针对“testDetails”方法来生成了一个RPC请求,然后实现针对服务的自动化探测:
代码语言:javascript复制$ ./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --filter TestService.testDetails --rpc --probe
___| / __ __| | _
| / | |/ | _ | |
| | / | | | ___ ___/
____| _/_/ _| _| _| _/ _ _|
version 0.1
[ ] Analysing
====================
http://192.168.22.120/olympian/olympian.nocache.js
Permutation: http://192.168.22.120/olympian/4DE825BB25A8D7B3950D45A81EA7CD84.cache.js
fragment : http://192.168.22.120/olympian/deferredjs/4DE825BB25A8D7B3950D45A81EA7CD84/1.cache.js
fragment : http://192.168.22.120/olympian/deferredjs/4DE825BB25A8D7B3950D45A81EA7CD84/2.cache.js
[ ] Module Info
====================
GWT Version: 2.9.0
Content-Type: text/x-gwt-rpc; charset=utf-8
X-GWT-Module-Base: http://192.168.22.120/olympian/
X-GWT-Permutation: 4DE825BB25A8D7B3950D45A81EA7CD84
RPC Version: 7
RPC Flags: 0
[ ] Methods Found
====================
----- TestService -----
TestService.testDetails( java.lang.String/2004016611, java.lang.String/2004016611, I, D, java.lang.String/2004016611 )
POST /olympian/testService HTTP/1.1
Host: 192.168.22.120
Content-Type: text/x-gwt-rpc; charset=utf-8
X-GWT-Permutation: 4DE825BB25A8D7B3950D45A81EA7CD84
X-GWT-Module-Base: http://192.168.22.120/olympian/
Content-Length: 262
7|0|10|http://192.168.22.120/olympian/|67E3923F861223EE4967653A96E43846|com.ecorp.olympian.client.asyncService.TestService|testDetails|java.lang.String/2004016611|D|I|§param_Bob§|§param_Smith§|§param_"Im_a_test"§|1|2|3|4|5|5|5|7|6|5|8|9|§32§|§76.6§|10|
HTTP/1.1 200
//OK[1,["Name: param_Bob param_SmithnAge: 32nWeight: 76.6nBio: param_"Im_a_test"n"],0,7]
[ ] Summary
====================
Showing 1/5 Services
Showing 1/25 Methods
项目地址
GWTMap:【GitHub传送门】
参考资料
- https://labs.f-secure.com/blog/gwtmap-reverse-engineering-google-web-toolkit-applications