LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure
compress.zlib://
et PHP_STREAM_PREFER_STDIO
compress.zlib://
et PHP_STREAM_PREFER_STDIO
Un fichier ouvert en utilisant le protocole compress.zlib://
avec le drapeau PHP_STREAM_PREFER_STDIO
peut continuer à écrire des données qui arrivent à la connexion plus tard dans le même fichier.
Cela signifie qu'un appel tel que:
Le serveur pourrait répondre à la requête avec une réponse HTTP valide, maintenir la connexion ouverte, et envoyer des données supplémentaires ultérieurement qui seront également écrites dans le fichier.
Vous pouvez voir cette information dans cette partie du code php-src dans main/streams/cast.c:
Course à la condition de course vers RCE
Ce CTF a été résolu en utilisant le tour précédent.
L'attaquant fera en sorte que le serveur victime ouvre une connexion en lisant un fichier depuis le serveur de l'attaquant en utilisant le protocole compress.zlib
.
Pendant que cette connexion existe, l'attaquant exfiltrera le chemin vers le fichier temporaire créé (il est divulgué par le serveur).
Pendant que la connexion est toujours ouverte, l'attaquant exploitera une LFI chargeant le fichier temporaire qu'il contrôle.
Cependant, il y a une vérification dans le serveur web qui empêche le chargement des fichiers contenant <?
. Par conséquent, l'attaquant exploitera une Condition de Course. Dans la connexion qui est toujours ouverte, l'attaquant enverra la charge utile PHP APRÈS que le serveur web ait vérifié si le fichier contient les caractères interdits mais AVANT de charger son contenu.
Pour plus d'informations, consultez la description de la Condition de Course et du CTF sur https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer
Last updated