讲述一种骚思路
红队执行任务过程中免不了进行信息收集,尤其是对大规模资产的信息收集,会遇到一些联动封禁的情况,子域名扫目录被封了,剩下跟这个根域名相关的站点全部gg,扫一个死一片,那不行啊,得想办法干它。
代理池成本又很高,总不能贷款打红队吧
简单讲下思路,就是模拟用户正常访问的规律,比如说我访问一个子域名,上来就访问/admin也是没有问题的,因为用户以前可能收藏了这个url,双击就访问了,然后工具就不再对该子域名进行扫描,而是对子域名列表的第二个子域名访问/admin,以此类推,当子域名列表走过一遍后,再从子域名列表的第一行访问/user,这样会形成比较长的时间间隔,符合用户访问的规律,而有些蓝队进行日志分析时,日志量比较大会优先去筛选事件时间的范围,间隔较长的扫描能规避一些不必要的麻烦。
类似狙击手,偶尔biu一下,隐匿性比较高
这里使用fuff作为fuzz工具,fuff支持加载多个字典进行混合爆破,所以用它。fuff有个参数-mode可以选择多字典时的爆破规则,跟burp的Intruder模式类似,使用-mode pitchfork能够对字典进行一一爆破,如图所示。
本来也想过采用多次读取循环执行命令的方式,但思来想去总觉不是很优雅,所有用Python脚本生成两个一对一字典,比较快捷、简单、可控,不需要考虑进程的问题,写代码必须优雅。生成的字典,如下所示。
A B
C B
E B
A D
C D
E D
A F
C F
E F
准备两个文件,一个是url.txt存储目标的urls,另一个是dir.txt存储需要扫描的目录字典,两个文件的最后一行都不要留空行或者换行,然后运行脚本会生成url2.txt、dir2.txt,就是需要使用fuff挂载的字典了,观察下两个文件的行数是否对应,不对应肯定是操作有误了。代码如下。
dir_lines = len(open("dir.txt", "r",encoding="utf-8").readlines())
url_lines = len(open("url.txt", "r",encoding="utf-8").readlines())
with open("url.txt", "r",encoding="utf-8") as f:
with open("url2.txt", "w+",encoding="utf-8") as f2:
txt = f.readlines()
for i in range(dir_lines):
f2.writelines(txt)
f2.write("\n")
with open("dir.txt", "r",encoding="utf-8") as f:
with open("dir2.txt", "w+",encoding="utf-8") as f2:
txt = f.readlines()
txt[-1] += '\n'
for line in txt:
f2.write(line*url_lines)
生成字典之后,直接挂载fuff即可享受
ffuf -w dir2.txt:DIR -w url2.txt:URL -u URL/DIR -c -mode pitchfork
如果我没读过书,我可以找别的活做,可我偏偏又读过书——孔乙己