在测试 web 系统时,大家可能都会对目标进行目录枚举,而目录枚举能给我们带来什么样的收益呢?我分析了一些目录枚举工具,一起来学习一下,目录枚举的价值。
我们以知名目录枚举工具 gobuster 为学习参考,项目地址:
https://github.com/OJ/gobuster
对于 web 系统而言,目录、文件名所对应的都是具体的功能,发现存在的目录越多,那么你可以测试的功能就越多,而目录枚举技术也是一种 fuzz 技术,能够发现一些未公开的目录或者文件,而这些很大的概率存在安全风险,可能是由于测试而创建的、也可能是因为存在安全风险,但未删除的。
gobuster 的第一个功能就是目录枚举,使用它需要指定一个目录字典,如果你已经知道目标系统使用的是什么脚本语言,目录和文件的格式,可以有针对性的进行字典生成,主要可以大大节约枚举时间和提升枚举收集,网络上有很多公开的目录字典可供使用,但是我们自己如何整理这样的字典?
我的思路是,可以通过爬虫的方式,爬取大量网页链接,然后提取链接的路径, 进行去重统计,然后提取出现频率最高的 top xxx 来作为自己的字典,如果是针对大量目标进行目录枚举,那么可以使用 top xxx 的字典,如果是针对单个目标进行目录枚举,那么可以使用完整字典,这样做的好处就是能够在短时间内,达到最大的效果,当然时间充裕的话,批量也可以使用完整字典,这样是最全面的,但是需要的时间也是最多的。
自己整理的好处是,可以有针对性的去挖掘目标目录、文件名的命名方式,然后对症下药,生成对应的字典,千人千面的玩肯定比打什么目标都用相同的字典,这样一刀切的方式好。
我们以工具 BFAC 为例,项目地址:
https://github.com/mazen160/bfac
这个收益主要来源于运维和开发人员,在线上操作时,为了方便,将网站目录或者文件进行备份,然后通过远程下载会本地进行分析,然而忘了删掉已经下载好的备份文件,从而给了我们机会,通过扫描备份文件的方式,发现可以下载的备份文件,从而导致目标的敏感信息泄露问题,甚至源代码泄露、数据库泄露等。
工具的使用,我们只需要提供一个网页路径,比如 https://www.xazlsec.com/index.php
,那么就可以测试是否存在 index.php
的备份,比如在 index.php.bak
这种在文件名后面加常见的备份后缀。
还可以扫描是否存在网站目录的备份,比如 www.zip
等,这种需要指定常见网站备份的字典。成功率还是取决于字典是否覆盖目标备份文件。
这个与第一个不同的是,第一个主要扫描的是网站的正常功能,而这个是扫描一些特定应用或者操作默认携带的一些隐藏目录,比如 git 的 .git
目录,svn 的 .svn
目录,这些是在拷贝代码时,默认携带,而未能及时删除的,参考工具还是第二部分工具 BFAC。
该工具已经整理了一些默认携带的文件和目录,具体有哪些看代码就行:
https://github.com/mazen160/bfac/blob/master/bfac
以上就是目录枚举功能可以带给我们的收益,除了枚举除正常功能无法直接提交漏洞之外,如果发现隐藏的备份文件和隐藏的目录文件都已经算是安全漏洞,只不过危害不能确定,如果涉及敏感信息,则认为该漏洞比较严重,而如果没有任何敏感信息泄露,可能会被忽略,需要具体情况具体对待。
那么你认为目录枚举还能带给我们什么收益呢?欢迎讨论。