1.JSP基础

1. 什么是JSP

JSP 全称 Java Server Page,基于 Java 语言,是一种动态网页技术。
它使用 JSP 标签在 HTML 网页中插入 Java 代码。标签通常以<% code %>显示。
JSP 本质是简化版的 Servlet,JSP 在编译后就变成了 Servlet。JVM 只能识别Java 的类,是无法识别 JSP 代码的。所以 WEB 服务器会将 JSP 编译成 JVM 能识别的 Java类。JSP 跟 Servlet 区别在于,JSP 常用于动态页面显示,Servlet 常用于逻辑控制。在代码中常使用 JSP 做前
端动态页面,在接收到用户输入后交给对应的 Servlet 进行处理。当然 JSP 也可以当做后端代码进行逻辑控制。

2. JSP基础知识

2.1. 后缀

后缀为*.jsp

2.2. JSP 代码需要写在指定的标签之中

常用:
<% 
out.println("hellpo JSP!"); 
%>
<jsp:scriptlet>
   代码片段
</jsp:scriptlet>

2.3. jsp生命周期

编译阶段 -> 初始化阶段 -> 执行阶段 -> 销毁阶段 ,此处多了一个编译阶段,是将JSP 编译成 Servlet 的阶段。

2.4. jsp指令

JSP 指令:是用来设置 JSP 整个页面属性的。格式为: <%@ directive attribute="value" %>

指令 描述
<%@ page ... %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库的定义

2.5. JSP的九大内置对象(隐式对象)

这九个对象,可以不用声明直接使用

名称 类型 描述
out javax.servlet.jsp.JspWriter 页面输出
request javax.servlet.http.HttpServletRequest 获得用户请求
response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数
session javax.servlet.http.HttpSession 保存用户的信息
application javax.servlet.ServletContext 所有用户的共享信息
page java.lang.Object 指当前页面转换后的Servlet类的实例
pageContext javax.servlet.jsp.PageContext JSP的页面容器
exception java.lang.Throwable 表示JSP页面所发生的异常,在错误页中才起作用

3. 运行JSP程序(案例)

新建一个项目
Pasted image 20250325172513.png

3.1. jsp模拟登录

login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>  
<!DOCTYPE html>  
<html lang="zh">  
<head>  
  <meta charset="utf-8">  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  <title>User Login Page</title>  
</head>  
<body>  
<hr>  
<h2>登录页面</h2>  
<form action="do_login.jsp" method="get">  
  <h3>Please input your message:</h3>  
  <label for="username">Name:</label>  
  <input type="text" id="username" name="username"><br><br>  
  
  <label for="password">Pswd:</label>  
  <input type="password" id="password" name="password"><br><br>  
  
  <input type="submit" value="提交">  
  <input type="reset" value="重置">  
</form>  
</body>  
</html>

do_login.jsp

<%--  
  Created by IntelliJ IDEA.  User: Administrator  Date: 2025/3/25  Time: 17:42  To change this template use File | Settings | File Templates.--%>  
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>  
<%@ page import="java.sql.*" %>  
<!DOCTYPE html>  
<html lang="zh">  
<head>  
    <meta charset="utf-8">  
    <title>服务器处理注册页面</title>  
</head>  
<body>  
<%  
    String username = request.getParameter("username");  
    String password = request.getParameter("password");  
  
    // 模拟登录成功与否  
    if ("admin".equals(username) && "password".equals(password)) {  
        response.getWriter().write("Success!");  
    } else {  
        response.getWriter().write("Error!");  
    }%>  
</body>  
</html>

4. JSP木马

前几年是 JSP 木马的鼎盛时期,由于技术的迭代。现在大型企业使用 SprinBoot 框架来开发的系统了,该框架默认是不引入 JSP 解析的,需要引入特定依赖才可以。而且现在前端大多使用vue,thymeleaf,freemarker等等。因此JSP木马也算逐渐没落了。

但我们还是得学习了解,毕竟网站数量基数很大,难免会在授权的测试中遇见。

JSP木马也可以称作JSP Webshell,如果对方在上传文件或其他功能没有做防护的话,攻击者可以利用任意文件上传漏洞将恶意代码传到后端,继而攻击者可以达到操作目标网站的目的。

推荐一些较为老派的 JSP 木马的 github 仓库:Page not found · GitHub · GitHub
近两年主流 webshell 管理工具:冰蝎,哥斯拉,蚁剑......
冰蝎: https://github.com/rebeyond/Behinder
蚁剑: https://github.com/AntSwordProject
哥斯拉: https://github.com/BeichenDream/Godzilla

4.1. JSP 大马

JSP 大马,在代码中写入了更多功能,可以实现在网页中进行一些危险操作。
以下演示案例中的JSP大马用的是 https://github.com/theralfbrown/WebShell-2/tree/master/jsp 这个仓库中 无密码的jsp大马.jsp 。

4.2. Godzilla(哥斯拉)JSP木马操作