4-7〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸文件上传漏洞-B
郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉Whoami!-CSDN博客🚀
𖤐 现在,我们渐入佳境了,保持耐心,继续前行 !
𖤐 𝓝𝓸𝔀 𝔀𝓮'𝓻𝓮 𝓱𝓲𝓽𝓽𝓲𝓷𝓰 𝓸𝓾𝓻 𝓼𝓽𝓻𝓲𝓭𝓮, 𝓴𝓮𝓮𝓹 𝓹𝓪𝓽𝓲𝓮𝓷𝓽 𝓪𝓷𝓭 𝓴𝓮𝓮𝓹 𝓶𝓸𝓿𝓲𝓷𝓰 𝓯𝓸𝓻𝔀𝓪𝓻𝓭!
→ 信息收集
→ 漏洞检测
→ 初始立足点▸常见WEB应用攻击▸-----我们在这儿~ 🔥🔥🔥
→ 权限提升
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
1 常见WEB应用攻击
1.3 文件上传漏洞
1.3.2 上传不可执行文件攻击
1.3.2.1研究站点上传机制
1.访问目标站点并研究特征
2.上传机制测试策略
①是否可以上传文本文件
②猜测多次上传同一文件是否输出敏感内容
③猜测是否允许使用相对路径
3.(注意!)风险注意与攻击目标
4.(科普!)Web服务器的帐户和权限与安全问题
1.3.2.2 SSH密钥覆盖攻击:获取Root权限完整指南
1.创建SSH密钥对,把公钥放入authorized_keys文件
2.恶意文件上传
3.SSH连接验证
4.攻击成功条件与防范措施
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
1 常见WEB应用攻击
Web开发是当前IT领域需求最高的技能之一,然而多种安全漏洞在各类Web应用程序中反复出现。无论使用何种技术栈,这些常见漏洞都可能存在于已部署的应用程序中。主要攻击类型包括:
-
📁 目录遍历 - 通过操纵文件路径访问未授权资源
-
📄 文件包含漏洞 - 包含恶意文件执行代码
-
⬆️ 文件上传攻击漏洞 - 上传恶意文件获取系统访问权---(本文)
-
⚡ 命令注入 - 在输入中注入系统命令执行
1.3 文件上传漏洞
文件上传漏洞:攻击者通过利用应用程序的文件上传功能,上传恶意文件到服务器,从而获取系统权限或执行其他攻击。
🎯 漏洞分类
漏洞类型 | 描述 | 可能的攻击方式 |
---|---|---|
第一类漏洞 | 上传的文件可被Web应用程序直接执行 | 上传PHP脚本并通过浏览器执行; 适用于各种服务器端脚本语言 |
第二类漏洞 | 文件上传机制与其他漏洞结合利用 | (本文)结合目录遍历:在文件上传请求中使用相对路径,并尝试覆盖类似authorized_keys的文件。 结合XML外部实体 (XXE)或跨站脚本 (XSS)攻击:当允许上传一个带有SVG文件类型的头像到个人资料时,可嵌入XXE攻击来显示文件内容甚至执行代码。 |
第三类漏洞 | 依赖用户交互的攻击 | 上传含恶意宏的文档文件,诱导用户执行 例如:当发现一个求职申请的上传表单时,尝试上传一个带有恶意.docx格式的简历,并集成恶意宏,然后通过宏来执行。 |
1.3.2 上传不可执行文件攻击
在本节中,探讨即使上传的文件不可执行也可能产生严重后果。即:可以上传任何文件,但无法利用它来获取系统访问权限。在这种情况下,需要结合着利用另一个漏洞如:目录遍历,来利用文件上传机制。
1.3.2.1研究站点上传机制
核心问题:发现不受限制的文件上传功能,但无法直接执行上传的文件。
1.访问目标站点并研究特征
访问:http://mountaindesserts.com:8000
观察点 | 发现内容 | 安全影响 |
---|---|---|
系统平台 | 运行Linux系统 | 攻击载荷需适配Linux |
技术栈变化 | 无index.php/admin.php | 可能不再使用PHP |
上传功能 | 仍保留文件上传机制 | 存在潜在攻击面 |
再次:使用curl来确认admin.php和 index.php文件是否仍然存在。以下反应说明php文件不存在,合理推断网页服务器不再使用PHP。
2.上传机制测试策略
①是否可以上传文本文件
我们在网页的上传入口尝试上传一个文本文件,并启动Burp来捕获请求。上传来自上一节的test.txt文件。上传成功!
②猜测多次上传同一文件是否输出敏感内容
第一次上传:test.txt → 成功
第二次上传:test.txt → 观察应用反应
若:文件已存在提示
响应:"文件已存在,请勿重复上传"
利用方式:
-
🎯 暴力枚举:猜测服务器上已存在的文件
-
📁 目录结构探测:通过文件名推测目录内容
-
🔍 信息收集:了解服务器文件命名规则
若:错误信息提示
响应:"Internal Server Error - PHP Exception..."
价值信息:
-
💻 技术栈识别:PHP、Java、.NET等
-
🛠️ 框架信息:Spring、Django、Laravel等
-
📍 路径泄露:服务器绝对路径信息
-
🔧 配置细节:数据库连接、环境变量等
让我们在 Burp 中查看test.txt上传请求。在HTTP历史记录中选择POST请求,将其发送到Repeater,并点击发送,这是第二次上传同一个文件。
我们收到了与浏览器中相同的输出,没有任何新的或有价值的信息。
③猜测是否允许使用相对路径
🎯攻击尝试:是否允许相对路径,如果可以的话,则说明可以利用目录遍历攻击。
如下图:通过修改请求中的“filename”参数,使用../../../../../../../test.txt相对路径,然后点击发送。
原始:filename="test.txt"
修改:filename="../../../../../../../test.txt"
输出结果分析:
-
✅ 应用接受了包含相对路径的文件名
-
❓ 响应模糊:仅回显文件名,无法确认实际写入位置(假设写入的是相对路径下,而非../../..仅仅只是文件名)
-
⚠️ 盲攻击风险:需要基于假设进行后续操作
❓大胆假设:
由于目前没有找到别的更好的攻击向量,暂时假设相对路径被用于放置文件。
如果我们的假设是正确的,则说明可以尝试盲目地覆盖文件,甚至可以去尝试覆盖敏感目录下的敏感文件,因为这些文件很具有吸引力,这可能会导致系统访问权限。
3.(注意!)风险注意与攻击目标
🔴 高风险注意:在渗透测试中盲目地覆盖文件可能会导致数据丢失或生产系统的停机,会造成巨大的损失!!!
风险类型 | 具体影响 | 防护建议 |
---|---|---|
数据丢失 | 覆盖关键系统文件 | 备份重要数据 |
系统宕机 | 生产环境服务中断 | 在测试环境验证 |
法律责任 | 未经授权修改系统 | 严格遵循授权范围 |
🎯 攻击价值评估
有吸引力的目标文件(可被覆盖):
-
~/.ssh/authorized_keys
→ SSH密钥注入 -
/etc/passwd
→ 用户账户篡改 -
/etc/shadow
→ 密码哈希获取 -
应用配置文件 → 敏感信息泄露
4.(科普!)Web服务器的帐户和权限与安全问题
Web服务器运行账户对比:
平台 | 默认运行账户 | 权限级别 | 安全风险 |
---|---|---|---|
Linux | www-data | 低权限用户 | 相对安全 |
Windows传统 | Network Service | 内置低权限账户 | 中等风险 |
Windows现代 | IIS应用程序池标识 | 按应用隔离 | 可控风险 |
错误配置! | root/Administrator | 最高权限 | 极度危险 |
🔴 危险配置模式
# 错误做法:以root身份运行Web服务
sudo apache2 -k start # Linux
# 或IIS以Administrator权限运行
🔗 漏洞链关系
文件上传漏洞 + 高权限运行 = 系统完全沦陷
🎯 风险升级路径
① 初始漏洞
-
文件上传无验证 → 可上传任意恶意文件
-
文件存储位置不当 → Web目录可直接访问执行
② 权限利用
-
Web服务高权限运行 → 恶意文件以root/Administrator执行
-
命令执行能力 → 获得与Web服务相同的系统权限
③ 最终后果
-
完全系统控制 → 等同于获得管理员权限
-
数据泄露风险 → 可访问所有系统资源
-
持久化威胁 → 植入后门长期控制
场景 | 风险等级 | 潜在影响 |
---|---|---|
低权限运行 + 文件上传漏洞 | 中等 | 有限的文件系统访问 |
高权限运行 + 文件上传漏洞 | 严重 | 完全系统控制 |
🛡️ 防护措施总结
✅ 权限最小化原则
-
Web服务账户:使用专用低权限用户
-
文件系统权限:严格限制Web目录写入权限
-
执行隔离:不同应用使用不同运行账户
✅ 文件上传安全
-
类型验证:白名单验证文件类型和内容
-
存储安全:上传文件存放到非Web可执行目录
-
随机命名:避免直接访问和预测文件路径
✅ 纵深防御
-
沙箱环境:容器化部署隔离风险
-
监控告警:实时检测异常文件操作
-
定期审计:检查权限配置和运行账户
💡 关键要点
"为了方便而使用高权限"是安全的大敌!
🔒 权限分离:Web服务永远不应该需要root权限
🔍 安全开发:文件上传功能必须有多层验证
⚠️ 配置审查:定期检查生产环境权限设置
1.3.2.2 SSH密钥覆盖攻击:获取Root权限完整指南
通过文件上传漏洞结合目录遍历,覆盖root用户的SSH认证密钥,实现系统完全控制。
【思路】既然猜测相对路径可以生效且决定尝试盲目地覆盖文件。让我们尝试覆盖root用户的主目录中的authorized_keys文件(这里头放置的是公钥文件)。如果该文件包含我们的公钥,就可以以root用户的身份通过SSH访问系统。
1.创建SSH密钥对,把公钥放入authorized_keys文件
现在,authorized_keys文件包含我们的公钥。
2.恶意文件上传
关键操作:使用相对路径上传它../../../../../../../root/.ssh/authorized_keys。
当Burp显示拦截的请求时,我们可以相应地修改文件名并点击转发。
技术要点:
-
🎯 利用目录遍历突破上传目录限制
-
📁 目标路径:root用户的SSH密钥目录(注意:前提是web服务器以root权限运行)
-
⚠️ 盲攻击:无法确认是否覆盖成功
如果成功覆盖root用户的authorized_keys文件,就能够使用我们的私钥通过SSH连接到目标系统。
此外:通常root用户没有SSH访问权限,无法实现ssh远程访问。然而,由于无法通过显示/etc/passwd文件的内容来检查其他用户还有哪些,因此目前root是唯一的选择。
3.SSH连接验证
由于authorized_keys文件被我们成功利用相对路径而覆盖,成功以root身份连接。
# 在攻击主机kali上清理旧主机记录
rm ~/.ssh/known_hosts# 在攻击主机kali上,使用-i参数指定我们的私钥文件
ssh -p 2222 -i fileup root@mountaindesserts.com
4.攻击成功条件与防范措施
必要条件 | 说明 | 现实可行性 |
---|---|---|
目录遍历有效 | 可向任意路径写入文件 | 🟡 中等 |
文件覆盖权限 | root目录可被Web用户修改(web服务器可能以root运行) | 🔴 较低 |
SSH服务配置 | root允许SSH密钥登录 | 🔴 很少见 |
网络连通性 | SSH端口可达 | 🟢 常见 |
🔴 不现实的假设
-
root用户SSH登录:生产环境通常禁用
-
root目录可写:正常系统权限严格控制
-
盲覆盖成功率:无法确认操作结果
🟡 更可行的攻击目标
-
覆盖普通用户的SSH密钥
-
修改应用程序配置文件
-
写入crontab任务实现持久化
🛡️ 防御对策总结
✅ 系统层防护
# 禁用root SSH登录
PermitRootLogin no
# 严格目录权限
chmod 700 /root/.ssh
chown root:root /root/.ssh
✅ 应用层防护
-
路径过滤:禁止
../
等特殊字符 -
文件类型验证:检查文件内容与扩展名匹配
-
写入限制:限定上传到安全目录
✅ 监控检测
-
文件完整性监控:检测系统关键文件变更
-
SSH日志审计:监控异常认证尝试
-
Web应用防火墙:检测路径遍历攻击
🔄 攻击流程可视化
文件上传漏洞 → 目录遍历 → 覆盖authorized_keys → SSH密钥认证 → Root权限↓ ↓ ↓ ↓ ↓上传接口 ../../路径 写入成功 私钥连接 系统控制
即使无法执行上传文件,通过创造性利用系统功能,文件上传漏洞仍可能导致严重后果!渗透测试启示:安全测试需要超越常规思维,探索各种可能的攻击向量组合。
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
您的支持是我创作最大的动力!