mardi 21 juillet 2015

Nebulla - level07

Bonjour,

Nous allons voir maintenant ce niveau 7 qui va demander de comprendre les bases en programmation Perl. Rien de bien compliqué un script est fourni ici.Voici déjà ce qu'on nous demande de faire :
The flag07 user was writing their very first perl program that allowed them to ping hosts to see if they were reachable from the web server.
To do this level, log in as the level07 account with the password level07. Files for this level can be found in /home/flag07.

Et donc logiquement voici la source du fameux petit script Perl :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

use CGI qw{param};

print "Content-type: text/html\n\n";

sub ping {
  $host = $_[0];

  print("<html><head><title>Ping results</title></head><body><pre>");

  @output = `ping -c 3 $host 2>&1`;
  foreach $line (@output) { print "$line"; }

  print("</pre></body></html>");
  
}

# check if Host set. if not, display normal page, etc

ping(param("Host"));

Dans un premier temps je vais voir ce qu'il y a sur le serveur et comme indiqué tout est présent avec un fichier supplémentaire qui sera utile pour la suite :


Je vous conseil au passage de tenter de comprendre à quoi celui-ci sert avant que je vous l'explique moi même. Donc dans ce programme on peut voir qu'il va prendre un paramètre Host et que celui-ci sera utilisé pour faire un simple ping on va donc simplement tester celui-ci :

On va tenter maintenant de lancer ce programme en lui donnant un paramètre vide simplement pour voir ce qu'il nous répond :

Pour les plus curieux qui auront été voir le man ou même simplement qui auront test la commande ping sans paramètre ils se seront rendu compte qu'en réalité il s’agissait ici d'un ping call du système en lui même. La suite logique sera de tester un `getflag` avec le fameux ; (qui est l’équivalent du `&&` que l'on a pu voir avant). 
Tiens ça ne fonctionne pas.. On va devoir passer par autre chose. Vous vous souvenez du fichier que l'on a pas tellement regardé en réalité celui-ci est un fichier de configuration d'un simple server. On va donc récupérer ce que l'on va avoir besoin ici c'est à dire le port pour l'utiliser et rien de plus je vous invite quand même à tenter de comprendre un peu plus en détail ce fichier.


 
On nous indique donc qu'un server tourne sur le port 7007. Je vais devoir ici utiliser un nouveau petit programme qui va nous permettre de faire nos requêtes via une ligne de commande. Wget sert à beaucoup de chose et comprendre son utilisation sera important pour la suite. Donc voici une utilisation très basique de ce petit programme :

Un simple ping sur l'ip 127.0.0.1 est fait ce qui nous indique que le serveur fonctionne bien ! Enfin pour terminer il suffit simplement de récupérer notre flag sans oublier le caractère d’échappement puisqu'ici nous utilisons wget et que celui-ci va interpréter notre ' ;'. Voici donc le résultat :
Nous avons réussis à comprendre des petites notions en plus dont surtout l'utilisation (certes basique mais utile pour la suite) de wget. Je vous invite à tenter de refaire ce challenge mais dans le but cette fois-ci de récupérer un shell pour pouvoir taper la commande de notre choix (dont getflag) ce sera une approche différente du problème mais ce ne sera pas vraiment plus compliqué .

Aucun commentaire:

Enregistrer un commentaire