[工具推荐]前端加解密之Burp插件Galaxy

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。

免责声明

本号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

前言

渗透测试中,经常遇到HTTP报文加密/加签传输的情况,这导致想要查看和修改明文报文很不方便,使用Burp插件Galaxy可以有效解决部分场景下的这个问题,实现自动加解密,在HTTP报文加密/加签传输的情况下也能够进行重放以及暴力破解。

这里用encrypt-decrypt-vuls加解密靶场来进行学习演示。

靶场情况

抓取登录包发现,请求体与响应体都进行了加密,并且还有requestId进行重放校验,timestamp进行时间戳校验,sign进行签名校验。

定位加密函数

利用v_jstools工具,开启挂钩,然后发起登录请求,在控制台中发现了加密前的参数。

定位到该js代码位置,下断点进行调试。

可以看到其利用了AES算法,模式为cbc,填充为pkcs7,key和iv都为1234567891234567。

实现自动解密

知道了加解密算法后,我们就可以利用Galaxy插件来写模板进行"Http Hook"了,Galaxy插件自带了AesCbc的模板。

我们新建一个demo文件,先复制AesCbc的内容过来,然后进行修改,首先修改模式为AES/CBC/PKCS7Padding,将key和iv都修改为1234567891234567。

然后还要修改获取数据和生成数据的方法,即getData和toData方法,因为这里的请求和回显都直接是aes加密的结果。

修改好后,点击start,开启"Http Hook",再次抓取登录包发现自动解密了。

这里的原理就是HTTP请求从客户端到达Burp时,对发送的加密数据进行解密,HTTP请求从Burp将要发送到Server时将,将数据加密回去。

HTTP请求从Server到达Burp时,对返回的加密数据进行解密,HTTP请求从Burp将要发送到客户端时,将数据加密回去。

实现重放

现在实现自动加解密了,但是还无法重发数据包,原因是对requestId做了校验。

改了requestId又会影响签名。

js调试,可以看到sign值是由data + requestId + timestamp的值进行md5后得到的,data就是我们发送的数据,requestId是随机获取的32位的字符,timestamp是当前时间戳。

可以利用Galaxy生成一个32位随机的requestId,生成当前时间戳timestamp,然后再用MD5加密算法加密data + requestId + timestamp生成sign,在HTTP请求从burp发送到server的时候修改这3个请求头即可。

生成32位的随机requestId:

String requestId = FactorUtil.randomString(32);

生成当前时间戳:

String timestamp = String.valueOf(System.currentTimeMillis());

生成签名:

String sign = HashUtil.calcToHex((d+requestId+timestamp).getBytes(),"MD5");

实现在HTTP请求从burp发送到server的时候修改这3个请求头,在hookRequestToServer方法中添加如下这段代码。

修改好后,点击start,开启"Http Hook",再次抓取登录包发现可以重放了。

虽然burp上显示请求头没变化,但实际请求头是在变化的,这里是因为只在hookRequestToServer方法中修改了请求头。

将线程设置的低一点,就可以实现暴力破解了。

参考链接

https://xz.aliyun.com/t/14629

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

https://github.com/0ctDay/encrypt-decrypt-vuls

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值