早在2016年8月13日,作者就已经讨论过备份文件漏洞(Backup-File Artifacts),这是一种比较罕见的攻击方式,可以获取到web服务器。在上篇文章末尾,作者有公开该漏洞的检测工具BFAC。这篇文章中,我们将详细讨论下备份文件(BFAs),以及这个漏洞是怎么触发的,怎么利用的。
备份文件是用户在备份过程中产生的一个文件。在这里,离线备份的情况就不讨论了,因为他并不影响web站点的安全。
很多开发人员在编辑文件前,都会先进行一次备份,同时会把备份文件和源文件放在服务器上的同一个地方。这样的话,如果存在绕过身份验证,就可以直接下载到这个备份文件,从而得到网站源代码。
1. 代码编辑器产生的备份文件
文本编辑器和代码编辑器通常对正在编辑的文件会事先产生一个备份文件,这样做的目的是让出问题后可以恢复文件。这类备份文件通常和原文件在同一个目录下,而且文件的命名也和原文件类似。
例如:对一个名为index.php的文件进行编辑,自动创建的备份文件将会被命名成“index.php.save”。其他的代码编辑器也是一样的,都有一套自己的备份规则。
如果这些备份文件在网站目录下,攻击者就能通过暴力猜解找到备份文件。虽然index.php.sava并不能像index.php那样解析成页面,但是index.php.save的源代码将会通过响应包返回。
2. 没有删除版本控制系统(VCS)产生的备份文件
现如今,版本控制系统(VCS)非常流行。几乎所有的VCS都会在工程目录下建一个meta目录,这个文件记录了整个项目工程每次修改的记录。
而开发者修改项目仓库的时候就直接下载/克隆代码仓库,改为后直接上传到web服务器上。但是很多时候,VCS产生的目录并没有删除掉,这样的话,如果被攻击者找到,将会使整个工程泄露。
3. 没有删除开发人员手动备份的文件
那些没有用版本控制系统的开发人员在修改项目文件的时候,通常会手动备份这个文件。通常,这些开发者也是用相似的模式命名这些备份文件。这样的话,文件名就很容易被猜到。
例如,一个开发者要编辑index.php文件,为了避免修改后出现问题,那么他首先会复制该文件。复制品的命名也差不多是能让了关联到这个原文件。
index.php→ index.php.bak index.php→ index.old index.php→ index.php.temp
由于手动备份的文件名很容易被猜到,前面说的威胁当然也存在于这里,导致项目代码泄露。
如果一个安全研究员和渗透测试员只是依赖于web漏洞扫描器的脚本小子,那他在现实中可能很少遇到这种情况。因为大多数web漏洞扫描器并不会测试网站上的备份文件。同样,目前测试备份文件的攻击也比较少。
几款主流扫描器中是否存在备份文件测试:
OWASP ZAP 2.4 Vega W3AF --- 有些扩展插件可以测试到备份文件,但是默认是没有的 Nikto 2.4.6 Burp Suit Professional 1.7.X
注意:以上几款我都测试过,最新版本的都没有提供备份文件
基本上可以做备份文件扫描的web漏洞扫描器很少,不过这些扫描器对基础的备份文件测试还是有一些的。但是这些都太过于简单,很容易漏报和错报。因此,我写了个扫描器BFAC。
BFAC(备份文件检测工具)是一款自动化工具,可以检测wen站点中可能有威胁的备份文件。BFAC是集多种检测手法于一身的备份文件黑盒测试。
产品特性:
1. 测试所有类型备份文件的类型,包括手工备份,以及编辑器备份 2. 对主流VCS备份文件进行测试,例如git,svn,mercurial以及bazaar 3. 智能检测技术:检测页面中的“Not Found”,以及使用不同方法检测存在页面 4. 隐秘的与web服务器交互 5. 通过编辑很容易定制化添加命名模式 6. 通用性
如何保护网站?
系统管理员需定期检测系统中的备份文件,发现问题要及时通知开发人员,并且修复。如果不需要的话,与开发人员协商删除这些文件。
开发人员修改文件后,要记得检查备份文件,把web站点中的备份文件及时删除
渗透测试人员把备份文件测试加入你的测试列表,当然,你可以用BFAC来测试。
还没有评论,来说两句吧...