目录索引漏洞
漏洞名称 | 目录索引漏洞 |
漏洞地址 | |
漏洞等级 | 中危 |
漏洞描述 | 目录索引漏洞(Directory Indexing Vulnerability)又称目录遍历漏洞(Directory Traversal Vulnerability),是Web应用程序中的一种安全漏洞。目录索引漏洞发生在网站或应用程序未能合理地限制对其目录结构的访问时,当Web服务器具有目录列表功能时,攻击者可通过构造特定的URL路径访问应用程序的某些敏感目录并获取其中的文件。攻击者可以利用此漏洞来获取用户数据、系统配置信息和应用程序源代码等敏感信息,进而远程执行恶意代码、篡改数据、破坏网站和网络系统等。 |
漏洞成因 | 1.配置不当:Web服务器(如Apache, IIS)默认可能启用目录浏览功能。 2.权限设置不足:未设置足够的访问控制或权限,导致未授权用户可以访问文件列表。 3.缺乏监控:网站或应用程序未能监控和记录对敏感目录的访问尝试。 |
漏洞危害 | 1.数据泄露:攻击者可能访问和下载敏感文件。 2.信息收集:通过目录信息,攻击者可以了解网站结构,为更复杂的攻击做准备。 3.增加其他攻击的风险:例如,攻击者可能发现可利用的脚本或配置文件。 |
修复建议 | 1.禁用目录浏览:在服务器配置中禁用目录索引功能。 2.实施访问控制:确保只有授权用户才能访问敏感目录和文件。 3.定期审计:定期检查和审计服务器配置和权限设置。 4.使用自定义错误页面:为目录或文件未找到错误设置自定义错误页面,避免泄露目录结构信息。 Apache 修改站点目录对应的配置文件 httpd.conf
使用 htaccess文件 in foldername 目录下
大家都见过很多框架的每个目录都有一个 index.html 文件,这个文件的存在是非常有意义的,很多线上的Web服务器都没有合格配置列出目录索引,导致网站内部许多文件都能被攻击者查看,从而泄漏大量信息。 为了防止列出目录索引,我们可以在站点的每个文件夹中创建一个 index.html,这个文件内容是什么都无所谓。当攻击者想通过列目录的手法访问你站点文件夹的时候,Web服务器将会判断当前目录下有没有DirectoryIndex默认首页,如果存在就显示DirectoryIndex对应的文件名的内容,这样攻击者就无法查看该目录下有什么文件。 Tomcat 修改 conf/web.xml 配置文件
Nginx 修改 conf/nginx.conf 配置文件
IIS 设置“目录浏览”权限。 |
初测过程 | 攻击者通常利用访问Web应用程序的URL构造来操纵目录索引漏洞。例如: 访问http://example.com/docs/file.txt, 攻击者可以将URL更改为http://example.com/docs/../../../../etc/passwd,这将显示/etc/passwd目录中的文件,从而帮助攻击者获取敏感信息。 |
复测过程 | |
复测结果 | 未修复 |
初测人员 | |
复测人员 |
以下是一个基于 Spring Boot 的示例配置
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;
import java.io.IOException;
@Configuration
public class WebConfig implements WebMvcConfigurer {
private static final int CACHE_PERIOD = 3600;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("classpath:/resources/")
.setCachePeriod(CACHE_PERIOD)
.resourceChain(true)
.addResolver(new CustomPathResourceResolver());
}
private static class CustomPathResourceResolver extends PathResourceResolver {
@Override
protected Resource getResource(String resourcePath, Resource location) throws IOException {
Resource requestedResource = location.createRelative(resourcePath);
return requestedResource.exists() && requestedResource.isReadable() && !resourcePath.endsWith("/")
? requestedResource
: null;
}
}
}
这段代码配置了一个资源处理器,它确保在 /resources/ 路径下不会直接暴露目录内容,从而帮助防止目录索引漏洞。