背景
我正在尝试对 IIS 中托管的易受攻击的服务执行路径遍历攻击。
服务是这样的:
GET /api/download/{file-name}
底层代码是这样的:
return File.Read("some/directory/" + fileName);
如前所述,这项服务显然是易受攻击的。
红隼攻击
我可以在本地运行时执行路径遍历攻击dotnet run,我收集到使用 Kestrel Web 服务器。我的攻击载荷是..\..\secret.txt,它在日志中被编码并且可见:
Request starting HTTP/1.1 GET http://localhost/api/download/..%5C..%5Csecret.txt
IIS 攻击
当托管在 IIS 中时,我无法在同一个应用程序上重现这种攻击。似乎 IIS 通过解释 URI 以某种方式规范化了 URI ..\,这意味着它永远不会访问我的 API。换句话说,它试图达到以下端点:
GET http://localhost/secret.txt
我已经为字符序列尝试了各种不同的编码..\,但没有运气。
问题
如何解决此 IIS 行为以对托管在 IIS 中的这个易受攻击的应用程序执行路径遍历攻击?