[RT] PHP - Injection de commande (10 pts)
Partie 1 Énumération:
Notre point de départ est cette page web
Cette page, nommé "Ping Service" nous offre une entrée user avec comme valeur par défaut 127.0.0.1 Je vais donc tester avec cette adresse ip.
Partie 2 Exploitation :
Nous avons donc ici une page en php qui va retourner le resultat de la commande bash "ping $[ip]" avec ip qui est donné dans le champ d'entrée. Pour mieux expliquer ceci je vais donc injecter la chaine suivante 127.0.0.1;ls
Remarque : ici le résultat peut sembler être le même mais si on regarde a la fin du résultat, "index.php" a été rajouter. Ça veux donc dire qu'il y a bien un shell qui fait la commande coté serveur.
Partie 2 Énumération du dossier
Je vais ici en decouvrir plus sur le server qui heberge le site. J'éffectue la commande suivante : ;pwd;whoami;ls -al
Petit récapitulatif : nous somme dans le dossier "/challenge/web-serveur/ch54", nous somme l'utilisateur "web-serveur-ch54"
Si on regarde plus attentivement le résultat de la commande ls -al, on se rend compte qu'il y a un fichier nommé ".passwd" allons regarder dedans.
Et tada on trouve notre flag : S3rv1ceP1n9Sup3rS3cure
Petit plus
Si on regarde dans le dossier, il y a le fichier index.html. Imaginons que je veuille le recupérer. Si je fait comme commande cat index.html voici ce qu'il se passe
le code que l'on veux afficher est interpreté. Il est donc impossible d'avoir le contenu du fichier de cette manière.
Solution
Si nous voulons extraire le code php sans qu'il soit interprété, il faut l’offusqué. Je vais donc l'extraire en base 64. Commande : ;cat index.php | base64
maintenant que j'ai le code en base64 il me suffi juste de le decoder
voici donc le code de la page
<html>
<head>
<title>Ping Service</title>
</head>
<body>
<form method="POST" action="index.php">
<input type="text" name="ip" placeholder="127.0.0.1">
<input type="submit">
</form>
<pre>
<?php
$flag = "".file_get_contents(".passwd")."";
if(isset($_POST["ip"]) && !empty($_POST["ip"])){
$response = shell_exec("timeout 5 bash -c 'ping -c 3 ".$_POST["ip"]."'");
echo $response;
}
?>
</pre>
</body>
</html>
Subscribe to my newsletter
Read articles from Akasaru0 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Akasaru0
Akasaru0
I'm a French cybersecurity student. I post things that interest me.