如何防止XML注入



我收到了一份漏洞报告。

XML被注入到URL"中;XInclude";。我正试图找到一个验证来阻止XML被执行。我的web应用程序是使用带有web窗体的Visual Studio C#构建的。

我想从web.config或IIS中验证这一点。我不确定是否必须添加代码来验证或解析XML。


问题详细信息:

URL路径文件名似乎容易受到XML注入的攻击。有效载荷:

<mhx xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="http://o6vsilg7waiopz0impyw3z2cn3twho5ptgl3br0.burpcollaborator.net/foo"/></mhx>

已发送到服务器。此负载包含一些引用外部域上URL的XML。应用程序与该域交互,表明解析器处理了注入的XML。


请求

GET /Edit/Employee/%3cmhx%20xmlns%3axi%3d%22http%3a//www.w3.org/2001/XInclude%22%3e%3cxi%3ainclude%20href%3d%22http%3a//o6vsilg7waiopz0impyw3z2cn3twho5ptgl3br0.burpcollaborator.net/foo%22/%3e%3c/mhx%3e?RequestId=428 HTTP/1.1
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Connection: close

您没有在问题中包含代码的相关部分,也没有添加太多上下文,因此无法比下面更准确地回答。

  1. 在将参数写入XML文件(然后进行处理(之前,需要对其进行正确编码(使用XML编码(。编码是你的第一道防线。不幸的是,这在C#中一点也不简单,而且取决于用户输入在XML中的确切位置。

  2. 除此之外,您还应该验证您的输入。在上面的URL中,我猜您所期望的是一个Employee id,可能是一个数字。如果它是一个数字,你应该在使用它之前验证它。如果它不是数字,你可能仍然可以验证它(例如长度、字符集、格式(,这样就不会处理格式错误的输入。

这两个(很可能甚至其中一个(可以防止该漏洞。

在IIS中使用URL重写是可能的,Microsoft网站上有一篇文章解释了如何做到这一点。你可以看看下面的文章:https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/request-blocking-rule-template.这取决于你的网站的配置和架构,你可以添加一些代码来验证它,但为此,你必须在代码中分享你是如何处理这些请求的。一种方法是使用正则表达式并将可注入字符转换为其他字符。例如,您也可以使用URL编码。

最新更新