什么是OS命令注入攻击?
注入攻击是黑客攻击系统最常见的方式之一,因为它允许他们轻松运行许多命令和代码。操作系统命令注入是一种您需要了解的注入攻击方式。它利用了系统、数据库和网络应用程序管理员应该非常认真对待的漏洞。
那么什么是操作系统命令注入攻击?
操作系统命令注入是利用存在漏洞的操作系统、程序、应用程序、数据库或插件来运行任意命令的一种恶意攻击方式。当应用程序在调用shell函数(如system()或exec())执行系统命令时,如果没有正确验证和清理参数,就会发生这种情况。
为了更好地理解操作系统命令注入的检测和利用,有必要从以下三个主要类别来进行分析。
- 直接命令注入
从攻击者的角度来看,他们发现某个应用程序正在运行特定的系统命令,然后将恶意命令作为预期参数的一部分输入。应用程序随后执行原始命令,然后执行恶意命令。
攻击者使用各种方法来寻找这种漏洞。应对这种情况最简单的方法是始终及时更新操作系统;您可以与一个有能力的IT团队一起进行。您应该避免所有可能导致系统漏洞的应用程序和程序,因为攻击者可能会直接插入代码,造成无法预测的损害。
- 间接命令注入
在间接命令注入的情况下,攻击者并不直接将代码或命令输入到系统中。相反,他们利用系统中的一个存在漏洞的应用程序或程序。这个漏洞在攻击者与操作系统之间创建了一个桥梁。利用这种通信,攻击者旨在在目标上运行恶意代码和命令。
攻击者执行一系列测试来识别这种漏洞,并发现该软件使用来自外部源(如文件或环境变量)的数据来调用系统命令。然后,攻击者修改外部源的内容,使其包含恶意命令。这样,在执行原始应用程序的指令时,恶意命令也会被执行。
直接命令注入和间接命令注入的主要区别在于攻击者使用一个应用程序与操作系统进行通信。但是,这两种注入方式在造成的损害上并没有真正的区别,因此都需要加以解决。因此,您应该确保网络中的程序可靠且必要。不要在设备上安装您不信任的应用程序。
- 盲注入
另一种操作系统命令注入的类型是盲注入。这意味着应用程序不会在HTTP响应中返回命令的任何输出。攻击者使用不同的技术,如时间延迟和输出路由,来利用这个漏洞。
想象一下,您正在搜索一个网站,URL中的”/?search=id”值会随着每次搜索而改变。这里的id值可以是用户页面、产品照片的地址或者网站上的任何页面。通过更改id值,攻击者可以获得不同的结果。手动操作很困难,但是有像Burp Suite这样的工具可以帮助实现攻击。然后,攻击者在某个页面上发现了一个怪异之处:可能返回一个id值,即使它没有显示任何结果,网站的响应却是200,这表明一切正常。在这种情况下,攻击者可以使用盲注入技术。
时间延迟等技术非常有用。由于打开的页面将是空白的,您将不会收到任何响应,但是您可能仍然可以根据只有在存在某个特定字符时才加载页面的时间延迟来收集有关数据库中存储的内容的信息。手动进行这种攻击过程太费时,但是有很多工具可以自动化这种攻击。
让我们通过一个示例来复习上述内容。想象一下,您有一个购物应用程序,用户可以查看产品是否有库存。我们可以使用如下URL来访问所有这些信息:
example_unsafe_store.com/stockStatus?productID=245&storeID=
假设将产品和商店ID作为参数传递给一个shell命令,比如”stockstat.pl 245 38″,因为该应用程序必须查询旧记录。如果开发人员对命令注入不采取任何措施,攻击者可以发送一个输入来执行所需的命令:
& echo this_a_harmful_command &
如果将此输入放在productID参数中,应用程序执行的命令将是:
stockstat.pl & echo this_a_harmful_command & 38
echo命令是检测命令注入以及确保给定字符串出现在输出中的有用方法。”&”字符是一个shell命令分隔符,因此执行的是三个单独的命令,依次执行。结果,返回给用户的输出将是:
Error -productID not found
this_a_harmful_command
38: command not found
在这里,“stockstat.pl”文件在没有预期参数的情况下执行了该命令,因此返回了一个错误消息。然后,由攻击者注入的echo命令运行,并且攻击者在屏幕上看到了他输入的表达式。原始参数”38″作为造成错误的命令而运行。
如何防止操作系统命令注入?
尽管命令注入是一种强大且有害的攻击向量,但是有一些技巧可以避免它。操作系统命令注入攻击的基本原理是使用应用程序执行特定的操作系统命令。您需要阻止这种情况发生。有一些问题需要考虑:
-
您必须防止任何具有对应用程序访问权限的人能够运行代码。
-
您应该防止任何具有对应用程序访问权限的人使用符号表达式向服务器发出请求。
-
您必须对任何具有访问权限的词组进行加密。
让我们逐个来看每个项。解决第一个问题的一个好方法是使用白名单方法,防止任何未经识别的人运行某些代码或请求。您未进行身份验证的人将无法运行代码。
解决第二个问题的方法是不接受命令中使用的某些文本表达式。用户只能输入数字值。将此与白名单方法一起应用,您将拥有一个更安全的系统。
第三个项涉及对语法参数(如输入字符和空格)进行加密。结果,白名单方法、输入语法检查和输入加密应该能够保护您免受操作系统命令注入。
注入攻击每天都在不断进化
不同的注入方法有不同的攻击技术,如操作系统命令注入、SQL注入、SSI注入和XPath注入。试图防止每一种都不容易。请记住,所有这些攻击每天都在发展,并利用开发人员忽视的小漏洞。这就是为什么您需要始终保持更新,并密切关注网络安全领域的最新发展的原因。