如何映射Google Web Toolkit(GWT)的攻击面
字数 1797 2025-08-15 21:33:00
GWTMap工具使用指南:映射Google Web Toolkit(GWT)攻击面
1. 工具概述
GWTMap是一款专门用于安全审计基于Google Web Toolkit(GWT)应用程序的工具,其主要功能包括:
- 提取隐藏在现代GWT应用程序混淆客户端代码中的服务方法节点
- 生成GWT-RPC请求样例Payload
- 与GWT应用程序进行交互测试
- 映射GWT应用程序的攻击面
2. 环境准备
2.1 依赖环境
- Python 3.x
- argparse库
- requests库
2.2 安装依赖
python -m pip install -r requirements.txt
3. 基本使用方法
3.1 帮助菜单
./gwtmap.py -h
3.2 主要参数说明
| 参数 | 描述 |
|---|---|
-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地址 |
-c <COOKIES>, --cookies <COOKIES> |
访问远程资源所需的cookie |
-f <FILTER>, --filter <FILTER> |
输出过滤 |
--basic |
启用HTTP Basic认证 |
--rpc |
针对每一个方法生成序列化RPC请求 |
--probe |
发送HTTP探测请求来测试每一个方法 |
--svc |
显示枚举服务信息和方法 |
--code |
导出给定资源的're-formatted'状态 |
--color |
启用终端输出颜色高亮显示 |
--backup [DIR] |
创建获取代码的本地拷贝 |
-q, --quiet |
启用静默模式(最小化输出) |
4. 使用示例
4.1 基本枚举
通过目标的Bootstrap文件枚举远程应用程序中的方法,并创建目标代码的本地备份:
./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --backup
4.2 特定组合枚举
通过特定的代码组合枚举远程应用程序中的方法:
./gwtmap.py -u http://192.168.22.120/olympian/C39AB19B83398A76A21E0CD04EC9B14C.cache.js
4.3 代理模式枚举
通过HTTP代理枚举目标应用程序的路由流量方法:
./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --backup -p http://127.0.0.1:8080
4.4 本地文件分析
枚举本地文件拷贝中的方法:
./gwtmap.py -F test_data/olympian/C39AB19B83398A76A21E0CD04EC9B14C.cache.js
4.5 过滤输出
对特定服务或方法进行输出过滤:
./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --filter AuthenticationService.login
4.6 生成RPC Payload
为已过滤服务中的所有方法生成RPC Payload,并启用颜色高亮:
./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --filter AuthenticationService --rpc --color
4.7 自动化测试
针对所有已过滤服务方法自动测试生成的RPC请求:
./gwtmap.py -u http://192.168.22.120/olympian/olympian.nocache.js --filter AuthenticationService.login --rpc --probe
5. 完整使用示例
$ ./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_Smith\nAge: 32\nWeight: 76.6\nBio: param_\"Im_a_test\"\n"],0,7]
[+] Summary=
Showing 1/5 Services
Showing 1/25 Methods
6. 输出解析
工具输出包含以下关键信息:
-
模块信息:
- GWT版本
- Content-Type
- X-GWT-Module-Base
- X-GWT-Permutation
- RPC版本和标志
-
发现的方法:
- 服务名称
- 方法签名(包括参数类型)
- 完整的RPC请求示例
-
响应信息:
- HTTP响应状态码
- 响应内容
-
统计信息:
- 发现的服务数量
- 发现的方法数量
7. 技术要点
-
GWT-RPC请求结构:
- 使用特定的Content-Type:
text/x-gwt-rpc; charset=utf-8 - 包含X-GWT-Permutation和X-GWT-Module-Base头
- 请求体采用特定的序列化格式
- 使用特定的Content-Type:
-
方法签名解析:
- 工具能够解析混淆后的方法签名
- 识别参数类型(如java.lang.String/2004016611)
-
攻击面映射:
- 通过枚举所有可用的服务方法
- 生成可测试的RPC请求
- 支持自动化探测
8. 项目资源
- 项目地址:GWTMap GitHub仓库
- 参考资料:F-Secure Labs博客文章
9. 安全审计建议
-
重点关注:
- 认证和授权相关方法
- 数据操作相关方法
- 文件操作相关方法
-
测试方法:
- 参数篡改测试
- 类型混淆测试
- 访问控制测试
-
风险点:
- 敏感信息暴露
- 未授权访问
- 注入漏洞
通过GWTMap工具,安全研究人员可以系统地审计GWT应用程序的攻击面,发现潜在的安全风险。