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
本次使用土司域名进行访问测试,没有任何攻击性行为。如有侵权请后台联系。
如果您发现其他问题和思路,可以联系我一起解决和探讨。
本文任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!!