因此我想到了一个绝妙的主意,通过设置一个无意义的响应来伪造逃跑路径,从而欺骗攻击者。
有一次这曾经做过一些有趣的事情
GET /../../etc/passwd HTTP/1.0
所以我写道:
app.MapGet("/../../etc/passwd", () => """
root:ZghOT0eRm4U9s:0:0::/:/bin/sh
""");
但它根本不起作用:
GET /../../etc/passwd HTTP/1.0
HTTP/1.1 404 Not Found
Content-Length: 0
Connection: close
Date: Tue, 27 Aug 2024 01:51:19 GMT
Server: Kestrel
怎么回事?
(这是一个 troll app.MapGet() 条目,浪费了脚本小子的时间。如果它永远得不到修复,损失就不大了。它使用最少的 API,因为整个应用程序将使用最少的 API 来完成包括静态文件解析在内的所有事情。)
这是由Kestrel处理的,它将
/../../etc/passwd
路径变成/etc/passwd
。来自 Kestrel 测试,例如
Http2
/Http3
:因此“后退导航”将被处理到“应用程序根”,但不会再进一步,所以应用程序级别的路线模式应该只是
/etc/passwd
: