在代码发布到生产环境之前,我使用Burp工具扫描的应用程序。最近的扫描导致了OS Injection攻击漏洞。
在研究中,我看到的操作系统注入攻击的唯一例子是针对unix,java,php应用程序。
这些攻击是否可以针对ASP.NET(MVC)应用程序?如果是这样,您如何降低这种风险? ASP.NET(和/或MVC)本身是否会阻止操作系统注入攻击?
答案 0 :(得分:1)
该框架本身不易受操作系统注入攻击。您使用此框架编写的代码可能容易受到攻击。例如,如果您有一个控制器操作,该操作执行从外部作为参数传递的命令,您的应用程序将立即变得容易受到攻击。考虑这个例子:
public ActionResult Index(string fileName, string arguments)
{
Process.Start(fileName, arguments).WaitForExit();
return View();
}
因此,无论您使用何种框架或编程语言开发应用程序,您都不应该信任用户输入并在接受之前执行适当的卫生设施。
答案 1 :(得分:0)
操作系统注入为defined by the OWASP Foundation如下:
操作系统命令从应用程序调用外部应用程序。
[...]
我们应该寻找的是应用程序和操作系统之间的关系。应用程序利用底层操作系统的功能。
在使用Runtime对象的java中,java.lang.Runtime执行此操作。在.NET中,System.Diagnostics.Process.Start等调用用于调用底层OS函数。在PHP中,我们可能会查找诸如exec()或passthru()之类的调用。
但是你的研究当然已经证明了这一点。
这些攻击是否可能针对ASP.NET / MVC应用程序?
所以,是的,您使用的任何地方或您使用的任何库使用System.Diagnostics.Process.Start()
,无论是直接还是间接地提供用户输入,您都有风险。
如果是这样,你如何降低这种风险呢?
像往常一样,通过在必要时适当地转义和消毒用户输入。这不仅包括查询字符串或路由参数,还包括cookie,HTTP标头和诸如此类的内容。