RandomHeadrPlus-实现请求头动态替换

0x00 Preface前言/简介

目录扫描经常遇到一个小场景:

部分网页直接访问或进行目录爆破操作时,如果refer不存在,就会报403禁止访问。如果手动增加refer的话又比较麻烦,burpsuite替换增加refer报头需要手动去确定域名。dirsearch等脚本自动替换refer又需要进行代码修改。

有没有能够自动根据URL等特征来动态取值来来添加refer报头的burpsuite插件或者代理脚本。

再扩展问题,如果支持动态的refer,是不是也能扩展成为添加动态XFF,动态useragent,动态host,请求头等功能呢?

由此就有了这篇文章来介绍这个新改造的插件。

PS:该40X得绕过还有其他得研究,这只是流水线的一个小小实现。

0x01 random-ip-address-header插件

从0到1的开发是最漫长的,对Java和burpAPI并不熟悉的我一般选择基于现有的插件来进行改造。

在Github和bapp商店搜索需求,逐个试用后最终bapp找到了一个最适合用于改造的插件。

random-ip-address-header

https://github.com/PortSwigger/random-ip-address-header

该插件支持修改任意报头,并且这些报头的值能够从IPv4段、IPv6段、文件列表等选项中随机获取,或者说设置为一个固定值,并且拥有UI界面用于配置。

对我的需求而言,只需要再实现间接的字符串替换,就能够获实现自动添加动态的refer,以及动态增加其他报头。

PS:还有一个小BUG,输入HeaderName的地方UI重合了。

PS:插件命名格局小了,应该叫random-all-header

0x02 插件 改造思路

1、获取当前请求中的一些动态信息,保存为变量。

2、使用固定的字符串表示这个变量,并将这个字符串用于替换中

3、在在最后传递请求头时,将这些特殊含义的字符串使用变量进行替换。

0x03 实际修改记**录**

1、修改UI重合问题

2、添加动态变量支持

%RURL%        代表当前请求URL

%RHOST% 代表当前请求请求HOST

%RPORT% 代表当前请求请求PORT

%RPROTOCOL%   代表当前请求请求协议

%RURLPATH%    代表当前请求请求URL的路径

%RURLQUERY% 代表当前请求请求URL的参数

%RMETHOD% 代表当前请求请求方法

3、具体代码修改实现

/////////////////////////////////////////////////////////////////////////////////////////////////////////this.RURL = String.valueOf(rqInfo.getUrl()) == "null" ? "": String.valueOf(rqInfo.getUrl());//editorthis.RHOST = String.valueOf(messageInfo.getHttpService().getHost()) == "null" ? "": String.valueOf(messageInfo.getHttpService().getHost());//editorthis.RPORT = String.valueOf(messageInfo.getHttpService().getPort()) == "null" ? "": String.valueOf(messageInfo.getHttpService().getPort());//editorthis.RPROTOCOL = String.valueOf(messageInfo.getHttpService().getProtocol()) == "null" ? "" : String.valueOf(messageInfo.getHttpService().getProtocol());//editorthis.RURLPATH = String.valueOf(rqInfo.getUrl().getPath()) == "null" ? "" : String.valueOf(rqInfo.getUrl().getPath()) ;//editorthis.RURLQUERY = String.valueOf(rqInfo.getUrl().getQuery()) == "null" ? "" : String.valueOf(rqInfo.getUrl().getQuery()) ;//editorthis.RMETHOD = String.valueOf(rqInfo.getMethod()) == "null" ? "" : String.valueOf(rqInfo.getMethod());//editor/////////////////////////////////////////////////////////////////////////////////////////////////////////value = value.replace("%RURL%",this.RURL);value = value.replace("%RHOST%",this.RHOST);value = value.replace("%RPORT%",this.RPORT);value = value.replace("%RPROTOCOL%",this.RPROTOCOL);value = value.replace("%RURLPATH%",this.RURLPATH);value = value.replace("%RURLQUERY%",this.RURLQUERY);value = value.replace("%RMETHOD%",this.RMETHOD);/////////////////////////////////////////////////////////////////////////////////////////////////////////

0x04 动态替换插件的使用

1、加载修改版插件

2、新增一个header,headname是请求头的名字。

如新增refer

3、IPv4和IPv6是动态的随机IP,使用动态变量应选择固定值或列表文件,如输入固定值为%RURL%

4、选择应用范围。

勾选Enable Random Header表示启用插件,会对Burpsuite所有模块都启用插件。

勾选Apply to in-scope requests only,默认勾选,表示仅对加入scope的URL进行替换操作

5、在logger日志模块查看报文是否被成功修改,没有logger模块可以安装logger++插件。

0x05 动态变量在固定字段fixed-Value中的测试

固定字符串会被进行动态的变量替换,然后追加到请求头。

0x06 动态变量在动态列表fixed-List中的测试

列表中的行会被随机选择,然后进行变量替换。

0x07 总结与下载

random-header插件项目地址

winezer0/burp-random-header: https://github.com/winezer0/burp-random-header-plus

本次使用土司域名进行访问测试,没有任何攻击性行为。如有侵权请后台联系。

如果您发现其他问题和思路,可以联系我一起解决和探讨。

本文任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!!

查看原文