在本节中,将学习什么是命令注入攻击,并描述如何检测和利用这一漏洞,介绍些适用于不同操作系统的命令和技术,并总结如何防止命令注入攻击。
什么是命令注入攻击?
命令注入(也称为shell注入),是一种Web安全漏洞,它允许攻击者在运行应用程序的服务器上执行任意操作系统指令,并且通常会完全破坏应用程序及其所有数据。
很多时候,攻击者可以利用操作系统命令注入漏洞来破坏基础设施的其他部分,利用信任关系将攻击转向组织内的其他系统。
如何执行任意命令?
比如有一个购物应用程序,它允许用户查看某个商品在特定商店中是否有库存,这个信息可以通过下面URL访问:
为了提供库存信息,应用程序必须查询各种已停产的系统。由于历史原因,这个功能是通过调用带有产品和商店ID作为参数的shell命令来实现的:
这个命令输出指定商品的库存状态,返回给用户。
由于应用程序没有针对操作系统命令注入实施任何防御,攻击者可以提交以下输入来执行任意命令:
如果这个输入是在productID参数中提交的,那么应用程序执行的命令是:
echo命令只是使提供的字符串在输出回显,并且是测试某些类型OS的命令注入的有用方法。
&字符是一个shell命令分隔符,因此执行的实际上三个单独的命令一个接一个,最终返回给用户的输出是:
①stockreport.pl命令后面没有参数,因此返回了错误消息。
②执行了注入的echo命令,并且在输出中回显了提供的字符串。
③原始参数29作为命令执行,导致错误。
在注入命令之后放置额外的命令分隔符&通常很有用,因为它将注入的命令与注入点之后的内容分开了,这降低了后面其他内容阻止注入命令执行的可能性。
场景试验-命令注入的简单例子:
https://portswigger.net/web-security/os-command-injection/lab-simple
场景说明:
这个场景在产品库存检查中包含一个操作系统命令注入漏洞,应用程序执行一个包含用户提供的产品和商店ID的shell命令,并在其响应中返回该命令的原始输出。
试验目的:
要完成这个试验,需要执行whoami命令确定当前用户的名称。
攻击过程:
①场景很简单,只是用来演示下常规的命令注入形式。在访问进去后随便选择一个产品并查询库存,随后将查询库存的这个请求发送给Repeater
②在查询库存的参数后面,通过;(分号)来分割后面的注入命令,发送后即可返回当前用户信息,完成试验
试验小结:
这个场景除了用;(分号)来分割,还可以用|(管道)来分割注入命令,另外注入命令还可以用其他的,比如cat /etc/passwd就可以把所有用户信息都回显出来,有兴趣的可以自己去尝试下。
一些有用的命令
当识别出操作系统命令注入漏洞时,掌握一些初始命令通常很有用,可以帮助获取已经入侵系统的信息,下面是一些在Linux和Windows平台上有用的命令摘要:
命令注入盲注
操作系统命令注入的许多实例都是盲漏洞,这意味着应用程序不会在其HTTP响应中返回命令的输出,我们仍然可以利用盲漏洞,但需要不同的技术。
考虑一个允许用户提交有关站点反馈的网站,用户输入他们的电子邮件地址和反馈信息。然后服务器端应用程序会生成一封包含反馈的电子邮件给站点管理员。因此,它使用提交的详细信息调用邮件程序,例如:
mail -s "Thissite is great" -aFrom:[email protected]@vulnerable-website.com
如有有邮件命令的输出,不会在应用程序的响应中返回,因此使用echo这种负载将无效。在这种情况下,我们可以使用各种其他技术来检测和利用漏洞。
使用时间延迟检测盲命令注入
我们可以使用将触发时间延迟的注入命令,可以根据应用程序响应所需的时间确认命令已执行。
ping命令是执行此操作的有效方法,因为它允许指定要发送的ICMP数据包的数量,以及命令运行所需的时间:
这个命令将导致应用程序在10秒内ping其回环地址。
场景试验-利用时间延迟的盲命令注入:
https://portswigger.net/web-security/os-command-injection/lab-blind-time-delays
场景说明:
这个场景在反馈功能中包含盲命令注入漏洞,应用程序执行一个包含用户提供的详细信息的shell命令,命令的输出不会在响应中返回。
试验目的:
要完成这个试验,需要利用盲命令注入漏洞导致10秒延迟。
攻击过程:
①进入页面后,点击右侧的"Submit feedback",并随便提交写内容,随后将这个请求发送给Repeater。
②重新构造Payload,在email参数后面加上注入命令,用分号进行分割,发送攻击后可以看到10秒后响应包才返回,完成试验
试验小结:
这种方式盲命令注入攻击,由于无法看到回显,通常可以获取的信息量就比较有限,盲命令注入最好还是要通过外带的方式,想办法将命令结果进行回显,价值会比较高。
目录遍历攻击(上)
身份验证漏洞-多因素身份验证中的漏洞(上)
身份验证漏洞-基于密码的登录漏洞(上)
SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-HTTP请求隧道(上)
HTTP高级请求走私-CRLF的利用(上)
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞-密码重置投毒
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):命令注入攻击(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论