Skip to content

功能详解

outlaws edited this page Nov 29, 2024 · 20 revisions

HttpHook

靶场:https://github.com/outlaws-bai/GalaxyDemo

原理

正常情况下,我们通过Burp代理进行渗透测试时,流量的流转情况如图所示。

正常情况下流量流转

而本插件通过 Burp 的 Montoya API 在该流程中添加了 4 个 hook,使得流量流转的情况变成下图这样。

修改后的流量流转

①:HTTP请求从客户端到达Burp时被触发。你需要在此处完成请求解密的代码,这样就可以在Burp中看到明文的请求报文。

②:HTTP请求从Burp将要发送到Server时被触发。你需要在此处完成请求加密的代码,这样就可以将加密后的请求报文发送到Server。

③:HTTP响应从Server到达Burp时被触发。你需要在此处完成响应解密的代码,这样就可以在Burp中看到明文的响应报文。

④:HTTP响应从Burp将要返回到Client时被触发。你需要在此处完成响应加密的代码,这样就可以将加密后的响应报文返回给Client。

其实读到这里你就会发现,该工具不仅仅可以用于自动化加解密,对于防重放绕过,自动重新计算签名也有很好的效果(在 ② 完成相应的代码逻辑即可)

我将这四个 hook 分别命名为 hookRequestToBurphookRequestToServerhookResponseToBurphookResponseToClient

这四个 hook 需要你来实现,项目提供了两种方式供你来实现:http(首选)、 jython(没有看到该选项

http: 你可以在本地用任何语言实现 http 服务端,并在其中实现四个 Hook 接口,下面是一个 python 的实现

显然,你可以在其中使用 frida、jsrpc、cdp,也可以 cp 客户端代码使用 node 执行。

https://github.com/outlaws-bai/GalaxyHttpHooker

jython:你需要用 jython 实现 hook 脚本,并在其中实现四个 Hook 函数,下面是靶场中所有加密方案对应的 hook 脚本(已内置在插件中)

https://github.com/outlaws-bai/Galaxy/tree/main/src/main/resources/examples/jython

界面简介

Hooker: hook 的方式

Auto Scan Decrypted Request: 开关,是否自动将 Proxy 模块解密后的请求转发到被动代理扫描器

联动被动代理扫描器时必须配置被动扫描器的上游代理为Burp

Expression: mvel bool 表达式,用请求判断流量是否需要Hook

默认的表达式:!request.isStaticExtension() && request.host=='192.168.1.3' 是指请求不能是静态后缀,且host必须是192.168.1.3,注意这里的 request.host 是没有端口的

关于 hook 方式的选择

项目首推的 hook 方式是 http,其相较于 jython 要求没那么高,更加好理解,如果你对自己的编码能力有一定的自信可以尝试 jython 的方式,它绝对会给你带来意向不到的惊喜,但同时你也会踩很多坑,请谨慎选择。我想要用 jython

写好了 hook 怎样测试

启动Http Hook服务后,在任意的HTTP请求/响应编辑器中右键可找到对应的按钮,点击即可测试

报错了怎么办

你需要查看日志(在使用 http 方式时可以 debug),判断为什么出现了报错

运行中的日志会发送到两个地方:

  1. ${WorkDir} / run.log
  2. Burp -> Extensions -> Galaxy -> Output/Errors (仅显示部分,并且 burp 偶有 bug 没有显示)

WorkDir:Linux/Mac 在 ~/.galaxy,Windows在 %USERPROFILE%/.galaxy

联动扫描器

  • 联动sqlmap:在已解密请求右键找到 Send Decrypted Request To Sqlmap,点击即可
  • 联动xray:配置xray的上游代理为 burp,开启 Auto Scan Decrypted Request 或在已解密请求右键找到 Send Decrypted Request To Scanner 点击

当在联动sqlmap、xray时,由于流量会再次经过Burp,Burp的Proxy中势必会多出扫描流量,可以添加下方代码片段到bambda不显示这些流量

!requestResponse.annotations().notes().contains("HookedByGalaxy")

其他功能

Parse Swagger Api Doc

该功能会自动解析并生成所有接口的请求报文,将其发送到Organizer,可以对参数进行修改测试。

如果想要自动将生成的请求发送到服务端,可以在Galaxy -> Settings窗口中勾选。

使用方法

在任意响应报文Editor右键,选择"Parse Swagger Doc"即可。

Bypass Host Check

绕过服务端在ssrf/重定向的测试点对host做了验证

如果想要自定义绕过Template,可以修改 ${Work Dir}/templates/bypassHostCheckTemplate.txt文件

使用方法

在测试点输入要攻击的URL,选中它右键Send To Intruder, 然后在Intruder 中选择Payload type -> Extension-generated, Selected generator -> Bypass Host Check,之后点击Start attack即可。

Bypass Auth Of Path

通过修改Path的方式绕过某些认证/鉴权/拦截

使用方法

/为开始选中需要绕过的path(可以是整体或部分), 然后右键Send To Intruder。然后在Intruder 中选择Payload type -> Extension-generated, Selected generator -> Bypass Auth Of Path,之后点击Start attack即可。