Então tive a ideia brilhante de enganar o invasor criando uma resposta absurda para fingir um caminho de fuga.
Ao mesmo tempo, isso costumava fazer algo interessante
GET /../../etc/passwd HTTP/1.0
Então eu escrevi:
app.MapGet("/../../etc/passwd", () => """
root:ZghOT0eRm4U9s:0:0::/:/bin/sh
""");
Mas não funciona de jeito nenhum:
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
O que há com isso?
(Esta é uma entrada troll app.MapGet() para desperdiçar o tempo de um script infantil. Se nunca for corrigido, haverá uma pequena perda. Ele usa APIs mínimas porque todo o aplicativo usará APIs mínimas para tudo, incluindo resolução de arquivo estático.)
Isso é tratado pelo Kestrel , que transforma o
/../../etc/passwd
caminho em apenas/etc/passwd
.Do teste Kestrel, por exemplo
Http2
/Http3
:portanto, as "navegações reversas" são processadas até a "raiz do aplicativo", mas não mais, portanto, seu padrão de rota no nível do aplicativo deve ser apenas
/etc/passwd
: