ASP.NET/IIS中使用的非标准HTTP动词"DEBUG"是什么?

Jør*_*ode 21 asp.net security iis debugging http

我正在阅读一家"网络应用程序安全"公司的报告,该公司一直在扫描我正在为之工作的公司的几个网站.从报告中看来 - 似乎是在没有任何人为参与的情况下编写的 - 有几次尝试使用这样的请求打破我们的网站:

DEBUG /some_path/some_unexisting_file.aspx
Accept: */*
More-Headers: ...
Run Code Online (Sandbox Code Playgroud)

我们服务器的结果令我感到惊讶:

HTTP/1.1 200 OK
Headers: ...
Run Code Online (Sandbox Code Playgroud)

正如DEBUGHTTP 1.1规范中似乎没有提到的那样,我希望结果是400 Bad Request405 Method Not Allowed.

早期关于SO的问题,我已经了解到DEBUG动词用于某种类型的ASP.NET应用程序的远程调试,但在该问题或其答案中没有很多细节可用.

DEBUG动词究竟用于什么?200 OK使用此动词时,为什么应用程序会回答无效的URL?这是安全问题吗?围绕DEBUG动词有任何潜在的安全问题,ASP.NET开发人员/系统管理员应该知道吗?

任何见解/建议/参考将不胜感激.

Jør*_*ode 19

正如Mark所暗示,DEBUG动词用于启动/停止远程调试会话.更具体地,DEBUG请求可以包含Command与头值start-debugstop-debug,但实际调试经由RPC协议完成的.

那么,为什么安全扫描程序会执行此类请求?看来,用一个DEBUG请求戳一个ASP.NET网站可以用来揭示它是否web.config<compilation debug="true">.可以使用telnet,WFetch或类似方法执行测试,方法是发送如下请求:

DEBUG /foo.aspx HTTP/1.0
Accept: */*
Host: www.example.com
Command: stop-debug

根据是否启用调试,您将获得200 OK403 Forbidden.

人们普遍 接受的是你不应该<compilation debug="true"/>在生产环境,因为这对网站的性能造成严重影响.我不确定启用调试是否会打开任何新的攻击媒介,除非启用了RPC流量,在这种情况下你还有更严重的问题(参见Mark的回答).任何有关安全性观点的其他见解将不胜感激.

有一种简单的方法可以避免意外进入<compilation debug="true"/>生产网站.简单地说,添加<deployment retail="true"/>到您的machine.config.

显然,具有<deployment retail="true"/>machine.config等于设置<compilation debug="false"/>在该特定情况下.DEBUG针对Web应用程序发出请求的结果只能通过后者进行更改.令人难以置信!

  • 仅供参考,"Command:stop-debug"标题在测试时非常重要.如果你把它留下来,服务器将只返回500. (3认同)

Mar*_*ett 9

http://support.microsoft.com/kb/937523

当客户端尝试在ASP.NET 2.0应用程序中自动附加调试器时,客户端会发送包含DEBUG谓词的HTTP请求.此HTTP请求用于验证应用程序的进程是否正在运行,以及选择要附加的正确进程.

它使用Windows身份验证和DCOM来实际进行调试 - 所以我不知道DEBUG动词本身存在很大的安全风险(显然,如果你允许RPC流量,那么你会遇到更大的问题)或者任何漏洞利用.但是UrlScan默认会阻止它.

我可能会在它上面放一个网络嗅探器来查看泄漏的信息.


Avi*_*viD 5

@Mark,@Jørn,感谢您提供的优秀信息,我也很好奇.
至于你的报告,从安全的角度来看,还有另外一个方面(除了RPC和调试支持) - 攻击面.我是一种低风险的项目,但最佳做法通常是尽量减少您不需要的任何外部接口,以便潜在的攻击者具有较少的机动空间,并且找到一个关键缺陷的可能性较低.
顺便说一句,打开调试编译有其他影响,因为它会留下更多的痕迹,pdb文件等.不一定是高风险,但仍然......(更不用说PCI合规性,如果这是相关的.)


归档时间:

查看次数:

18339 次

最近记录:

5 年,11 月 前