这个题目就是可以通过 /..;/manager/html
路径穿越进入到manager页面,然后弱口令登录,带着Authorization 和之前的 Cookie 上传一个 LandGrey 的 jsp 木马打包成的 war,最后按照下面的逻辑访问马。
因为war包叫test2.war,里面的内容是2.jsp,所以访问**/..;/test2/2.jsp**即可。
GitHub - LandGrey/webshell-detect-bypass: 绕过专业工具检测的Webshell研究文章和免杀的Webshell
[WUSTCTF2020]WEB做题记录 – 「配枪朱丽叶。」
[WUST-CTF]Web WriteUp - Ye’sBlog - 博客园
WUSTCTF&MRCTF部分web题解 - byc_404’s blog
你需要搞清楚的问题是:
1.Tomcat 是什么?
2.弱口令的洞是哪个 CVE?
3.这个目录穿越的原理是什么(好像是前后端不一致,总之写一下)
相关知识了解
Tomcat 是什么?
Tomcat 是一个 web 容器,是一个 专门运行 Web 程序的一个软件环境,是一个内置 HTTP 服务的服务器程序。它能接收用户访问请求(比如 /index.jsp
);能调用 JVM,运行你写的 Java 后端逻辑,然后把结果返回成网页给浏览器。
一言以蔽之,你写好网站后,把它部署到 Tomcat 中,网站就能运行了。
Servlet 是什么?
Servlet 是 Java 写的后台程序,专门用来处理浏览器发过来的请求。它运行在服务器端,返回 HTML 页面、数据等。那么 servlet 如何创建?这时候 Tomcat 出场了,它就是帮助你创建 servlet 的东西,所以也称 web 容器,没有它,没法运行 web 项目。
其他 web 容器也可以运行 servlet,比如:JBoss(现在叫 WildFly,WebLogic(Oracle 的企业级容器)
JSP 是什么?
JSP(Java Server Pages)是可以写 Java 代码的网页。
它本质上就是一个 特殊的 HTML 页面,你可以在 HTML 里面写 Java 代码。
我们来看一个非常简单的 JSP 页面:
1 | <html> |
注意这段代码里:
<html>...</html>
是正常的网页内容。<%= new java.util.Date() %>
是一段 Java 代码,表示“输出当前时间”。
JSP 最终会被 Tomcat 转换成 Servlet,然后再运行。
也就是说:
- 你写的是
.jsp
文件(像 HTML), - Tomcat 会 自动把 JSP 转成 Java 的 Servlet 类,
- 再由 Tomcat 执行这个 Servlet,最终生成 HTML,返回给浏览器。
War
war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。 当开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布则也会打包成War包进行发布。War包 可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。
WebSocket是什么?
WebSocket 是一种浏览器和服务器之间“长连接”的通信方式,可以实现 双向、实时 的数据传输。
前面讲的 Servlet/JSP 是基于 HTTP 协议 的,它有一个特点:
请求-响应模型:浏览器发一个请求,服务器返回一个响应,完了就断开连接。
但是有些场景需要服务器主动告诉客户端信息,比如聊天室,这个时候 HTTP 就不够用了,需要 WebSocket。
就像打电话一样,只要不挂电话,双方都能主动发消息。
WebSocket 是怎么工作的?
它其实最开始也是 HTTP 请求,但会发起一个特别的请求,要求升级协议:
1 | GET /chat HTTP/1.1 |
服务器接受后,就会把 HTTP 协议升级为 WebSocket 协议,从此连接不再关闭,浏览器和服务器可以互相发送消息!
Tomcat 支持 WebSocket 协议,你写的 Java WebSocket 服务端程序,可以直接部署在 Tomcat 中运行。
题目原理了解
目录穿越
一、这图到底在说什么?
这张图的意思是:
Nginx 收到你访问的路径:
1 | http://example.com/portal/..;/manager/html |
它看到中间有个 ..;/
,觉得这是个合法目录名,比如 /portal/..;/manager/html
看起来像一个普通路径,它不会特别处理 ..;
。
所以它觉得这个路径没问题,于是把整个请求发给了后端 Tomcat。
Tomcat 接收到 /portal/..;/manager/html
后,它有一个习惯:
- 它会忽略掉 ; 后面的内容(把它当作“脏数据”)。
- 所以
..;/
会被解析成../
于是整条路径:
1 | /portal/..;/manager/html |
被 Tomcat 解析成:
1 | /manager/html |
你就跳出了原本的 /portal 目录,进入了上层目录,然后访问了 Tomcat 的后台管理页面。
总结下重点知识点!
重点概念 | 含义说明 |
---|---|
路径穿越 | 利用 ../ 跳出当前目录 |
反向代理绕过 | Nginx 和 Tomcat 对路径的解析不一致 |
**;** 的作用 |
Tomcat 会忽略它,Nginx 不会 |
利用场景 | 想要访问被禁止的上级目录时(比如后台) |