Pov
Llança Pov i segueix avançant a HTB!
Introducció
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.
D’acord, tres elements clau de la informació resultant.
- El port
80/tcpestà obert, mirant un Servidor Web - El Servidor Web és IIS
- 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.
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.
S’ha confirmat que dev.pov.htb existeix.
Pots afegir pov.htb i dev.pov.htb a /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.
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.
- L’objectiu és
download - El valor és
cv.pdfper aid=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”.
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).
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.
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ó.
É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.
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.
Recorregut els commutadors.
-pés el connector a utilitzar, estarem utilitzant el connectorViewState--pathés la pàgina web de destí--decryptionalg,--validationalg,--decryptionkey,--validationkeyseran els elements associats delsmachineKeys-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.
Respondrà amb una pàgina d’error, però l’ordre encara s’està executant i he rebut paquets ICMP des de $TARGET.
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.
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.
Modifica el valor __VIEWSTATE i envia la petició POST, observant el teu listener per capturar aquesta shell.
La va capturar. Sembla que dev.pov.htb està sent serveit per sfitz.
Comprovant la bandera d’usuari.
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.
Passant per els resultats.
whoami /all
Cap privilegi o pertinença a grups interessants.
netstat -ano
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
Veiem dos comptes d’usuari no per defecte aquí, alaading i el nostre usuari actual sfitz.
Pots confirmar els usuaris en aquest host amb:
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
D’acord, un fitxer d’interès s’està situant en el nostre directori d’usuari. Visualitzant C:\Users\sfitz\Documents\connection.xml.
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.
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.
Després lancerem un servidor web Python per copiar la nosaltre eina al objetivo.
Finalment, baixa RunasCs per tenir una funcionalitat estesa més allà de runas.
Establirem una shell inversa en cmd per a alaading.
Sembla una shell restringida considerant aquest error.
Pots avançar i obtenir la bandera d’usuari.
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.
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.
Configura un listener on es generarà la nostra shell de Meterpreter, lancia msfconsole.
El nostre listener està preparat, esperant a tun0:6970 perquè el nostre payload s’executi.
Crea el payload utilitzant msfvenom anomenat catshell.exe
Descarrega el fitxer des de http://$CAT_HOST:9000/catshell.exe a $TARGET.
Executa catshell.exe i comprova el teu listener de Meterpreter
Tenc encara el SeDebugPrivilege disponible per a la nostra shell.
Així que acabem això. Troba un procés que normalment tindrà privilegis de SYSTEM.
Perfecte. És hora d’obtenir la flag de root.
Passa a una shell, navega al escritori de Administrator, llegeix el fitxer.
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 Viewstate | Crític per entendre ysoserial.net i com es rompe __VIEWSTATE |
| Understanding IIS Architecture | Ajuda a entendre IIS i objectius importants per a la divulgació de fitxers |
| Eines Utilitzades | Descripció |
|---|---|
| Caido | Eina lleugera de proxy web |
| Metasploit-framework | Marc de proves d’informàtica cibernètica de codi obert |
| NMap | Eina per a la descoberta i auditoria de xarxes |
| RunasCs | Versió millorada de runas integrat en Windows |
| ysoserial.net | Generador de càrregues útil per a la deserialització no segura d’objectes |
| Revshells | Generador de reverse shell |



