背景
我正在尝试对 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 中的这个易受攻击的应用程序执行路径遍历攻击?