
以下是第八周周一学习内容的详细展开。今天你将掌握目录遍历漏洞的本质与利用手法它不像 SQL 注入或 XSS 那样直接获取数据或控制客户端但却能为攻击者打开一扇窥探服务器文件系统的窗户是信息收集与进一步攻击的重要跳板。第八周·周一目录遍历原理——…/路径爆破与敏感文件读取 今日学习目标达成效果能准确描述目录遍历漏洞的成因应用程序在读取文件时未对用户输入的路径进行充分过滤使攻击者能够通过../跳出预期目录访问任意文件能区分绝对路径遍历如直接提供/etc/passwd与相对路径遍历../../etc/passwd并理解两者的适用场景能独立构造包含../序列的请求在存在漏洞的靶场中读取/etc/passwd或 Windows 下的win.ini等敏感系统文件能使用 BurpSuite 或浏览器手动对文件参数进行路径爆破逐步递增../层级直至成功访问目标文件能从安全角度解释为何不充分的输入验证和过大的文件系统权限会导致目录遍历并说出防御的核心方法白名单映射、路径规范化、限制文件根目录。 一、目录遍历漏洞的本质1. 什么是目录遍历Web 应用经常需要根据用户请求动态读取文件例如加载模板、显示图片、下载附件等。如果文件路径由用户输入决定且应用未对其进行严格的过滤和边界限制攻击者就可以在参数中插入特殊字符序列../Unix或..\Windows使得最终的文件路径跳出原本限定的目录访问到服务器上的任意文件。举例一个正常的文件查看请求可能是http://example.com/view?filereport.txt服务器实际读取/var/www/html/files/report.txt如果攻击者将参数改为file../../etc/passwd最终服务器尝试读取的文件路径就变成/var/www/html/files/../../etc/passwd → /etc/passwd如果权限允许攻击者就能读取到系统中的用户账户文件。2. 目录遍历的两种基本形式相对路径遍历利用../逐层向父目录回溯可配合多层../直到到达文件系统根目录。绝对路径遍历直接提供目标文件的完整路径如/etc/shadow通常用于应用对路径前缀未做强制约束时。3. 常见敏感目标文件Linux/Unix文件路径内容/危害/etc/passwd系统用户列表无密码哈希但可识别用户/etc/shadow密码哈希文件仅 root 可读通常不可直接访问/etc/hosts内网主机名映射可能泄露内网结构/proc/self/environ当前进程环境变量可能包含密钥/var/log/auth.logSSH 登录日志/home/用户名/.ssh/id_rsaSSH 私钥若权限不当4. Windows 典型敏感文件C:\windows\win.iniC:\windows\system32\drivers\etc\hostsC:\inetpub\wwwroot\web.configIIS 配置文件 二、常见绕过与利用技巧1. 编码与变形如果服务器对../进行了简单过滤可尝试URL 编码%2e%2e%2f表示../%2e%2e%5c表示..\双写....//在过滤删除../后仍能还原为../Unicode/UTF-8 变种某些解析器可能被特殊字符混淆2. 路径前缀与后缀拼接有些应用会自动在用户输入前后拼接路径段如前缀/var/www/data/ 用户输入后缀.html攻击者需要恰好将../插入到合适位置使最终路径指向目标文件。如果后缀被添加了.html可以尝试在文件名后添加空字节%00或?截断在旧版 PHP 中或利用路径参数#来忽略后缀。3. 多层回溯当不确定当前文件所在的深度时通常使用较长的../链如../../../../../../etc/passwd。过多的../不会出错只要最终路径存在且可读即可。✍️ 三、动手实践一在 DVWA 低难度完成目录遍历环境准备DVWA 的 File Inclusion 关卡通常用于文件包含漏洞但 Low 难度下它同样存在目录遍历因为应用直接使用用户输入的page参数包含文件且未作过滤。将 DVWA 安全等级设为 Low进入File Inclusion页面。1. 正常功能观察URL 通常为http://靶机/vulnerabilities/fi/?pagefile1.php页面会包含并显示file1.php的内容。2. 尝试相对路径遍历读取 passwd将参数改为?page../../../../../../etc/passwd或逐层递增测试?page../etc/passwd ?page../../etc/passwd ?page../../../etc/passwd直至页面显示出系统用户信息如root:x:0:0:root:/root:/bin/bash等行即表示成功读取了/etc/passwd文件。3. 尝试绝对路径如果相对路径权限不足?page/etc/passwd4. 使用 BurpSuite 进行系统化爆破将请求发送到 Intruder设置page参数为变量payload 类型选择“数字”生成 1-10 的数字并配合前缀../构造 payload../×N etc/passwd。通过观察响应长度差异快速找到正确的层级数。记录截图显示成功读取/etc/passwd的页面。这就是目录遍历在文件包含场景中的典型效果。✍️ 四、动手实践二在 Linux 服务器上模拟纯目录遍历漏洞可选如果你没有 DVWA 或想单独练习可以快速用 Python 搭建一个存在目录遍历的文件读取服务fromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerimportos BASE_DIR/var/www/html/files/classFileHandler(BaseHTTPRequestHandler):defdo_GET(self):# 从查询参数中获取文件名极不安全直接拼接pathself.path.split(file)[-1]iffileinself.pathelsefull_pathBASE_DIRpathtry:withopen(full_path,r)asf:contentf.read()self.send_response(200)self.end_headers()self.wfile.write(content.encode())exceptExceptionase:self.send_error(404,str(e))serverHTTPServer((0.0.0.0,8080),FileHandler)server.serve_forever()访问http://你的IP:8080/?file../../etc/passwd即可验证漏洞。 五、课后测试题与解析测试题在靶场中读取/etc/passwd或win.ini。请写出你使用的 payload并解释为何多次使用../是必要的。参考答案Payload针对 DVWA File Inclusion Low../../../../../../etc/passwd或等效的绝对路径若支持/etc/passwd解释Web 应用通常将工作目录限制在特定文件夹内如/var/www/html/vulnerabilities/fi/。要访问根目录下的/etc/passwd必须通过../逐层退出当前目录直到到达文件系统根目录。使用多个../是为了确保从任何嵌套深度都能回到根目录多余的../不会影响最终路径解析因此常用../../../../../../etc/passwd这种较长的回溯链。在实际攻击中若不清楚目录深度通常会递增尝试。✅ 今日学习效果自检清单我能用自己的话解释目录遍历与文件包含的区别虽然今天使用文件包含页面演示但原理是目录遍历我成功在靶场中读取了/etc/passwd或 Windows 的win.ini我理解了多层../的作用并能根据需要构造路径我知道常见的敏感文件路径及其危害我意识到不充分的输入校验是目录遍历的根本原因⚠️ 阶段避坑重点不要混淆目录遍历与文件包含目录遍历只是读取文件内容而文件包含漏洞明天学习若配合可执行文件上传可能导致代码执行危害更大。今天聚焦“读”。注意后端自动添加的后缀如果应用自动附加.php等后缀直接读.passwd会失败需配合截断或选择没有后缀的文件如/etc/passwd本身就无后缀。权限问题目录遍历能否成功最终取决于 Web 应用进程的文件系统权限。即使漏洞存在如果进程对/etc/shadow没有读取权限攻击也无法读取该文件。这也是最小权限原则的重要意义。不要在生产系统上试验读取系统文件可能触发审计告警。始终在自己的靶场中练习。今天你掌握了信息收集中最直接的漏洞之一——目录遍历。明天我们将在此基础上学习更危险的文件包含漏洞LFI/RFI你将看到当“读取”变成“执行”攻击者如何通过包含恶意代码完全控制服务器。请保留靶场环境明天继续深入。