XXS及Jsp

本文介绍了JSP(JavaServerPages)的概念,其作为Java在服务器端处理HTTP请求的工具,以及基本语法和使用。文章通过实例展示了如何在JSP中嵌入Java代码,以及在实际安全场景中处理XSS攻击的过程,包括字符编码、HTML实体化和事件处理的策略。
摘要由CSDN通过智能技术生成

Jsp

1.什么是Jsp

jsp的全称是java servlet page 它就是java的服务器页面

因为它相对于servlet传回数据的方法比较简单

Servlet的本质是一个基于Java的Web组件,旨在处理HTTP请求并生成HTTP响应

2.jsp语法

脚本程序可包含任意的java语句但是在jsp中不能包含任何文本,html标签和jsp元素

以下是一个示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>
​
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

上述部分可以用来解决中文编码问题 注:在以上编码中的@符号是用来标识指令的类型例如引入页面指令或属性

注意:在jsp语句中不能使用;来结束表达式

<%@ page ...%>:定义页面的依赖属性,比如:脚本语言,error页面还有缓存需求

<%@ include ...%>:包含文件

<%@ taglib ...%>:引入标签库的定义也可以自定义标签

<%--code--%>:jsp注释

<%! code %>:用于声明变量,方法及初始化

<%= 表达式 %>:字面意思就是用来写表达式的

<% code %>:就是代码片段脚本程序

注:jsp脚本程序,jsp声明以及表达式也可以如下表示:

<jsp:scriptlet>
   代码片段
</jsp:scriptlet>

<\% 代表静态 <%常量

\%> 代表静态 %> 常量

\ ' 在属性中使用的单引号 (两符号之间不存空格)

\ " 在属性中使用的双引号(两符号之间不存空格)

JSP行为

jsp行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等

行为标签只有一种语法格式,它严格遵守XML标准:

<jsp:action_name attribute="value" />
语法描述
jsp:include用于在当前页面中包含静态或动态资源
jsp:useBean寻找和初始化一个JavaBean组件
jsp:setProperty设置 JavaBean组件的值
jsp:getProperty将 JavaBean组件的值插入到 output中
jsp:forward从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element动态创建一个XML元素
jsp:attribute定义动态创建的XML元素的属性
jsp:body定义动态创建的XML元素的主体
jsp:text用于封装模板数据

xxs-lab 前四关

Level 1

屏幕截图 2024-03-07 164845

如图但我们刚进入页面时发现存在一个get传参name=test而且与此同时在页面上也出现了test

下一步我们可以去看看源代码

如图:

屏幕截图 2024-03-07 165258

发现参数竟然直接出现在页面源代码中因此我们可以尝试去插入一段script代码来让其在html中直接被执行

如图:

屏幕截图 2024-03-07 165017

payload:<script>alert(1)</script>

回车即可

Level 2

当我们进入这关时发现这关和上一关看起来加上了搜索框但从url栏中可以看出还是get传参因此我们可以先使用上一关的payload试一下发现不行 然后查看以页面源代码

如图:

image-20240307171829990

发现特殊字符被编码成html实体

可以通过查看后端源码去寻找原因 如图:

屏幕截图 2024-03-07 172045

htmlspecialchars($str) 函数用于将字符串中的特殊字符转换为HTML实体

但是我们发现我们传入的值在input标签里面并没有发生变化因此我们可以利用闭合从而使我们的script标签发挥作用

payload:"><script>alert(1)</script>

回车如图:

image-20240307172849930

Level 3

在进行这关之前需要先知道什么是html事件

参考:HTML 事件参考手册

比较详细看完发现此关有很多payload可以解决但是思路都差不都

看完后开始解题我们可以先试一下Level 1的payload

顺便看一下源代码什么情况

如图:

屏幕截图 2024-03-07 200640

发现被实体化了

然后我们尝试输入:' onmoseover="alert(1)" '来闭合但是发现不行

查看源代码发现双引号全都变了

如图:

image-20240307211601073

然后我们去瞅瞅F12 发现我们的单引号变成了双引号这样我们便可以开始构造

payload:'onmoseover='alert(1)

回车如图:

image-20240307214621791

其余事件同理

Level 4

在这一关在刚刚开始时可以尝试去输< > " ' 这些符号

目的是去看看是否存在实体化输入后查看原代码

如图:

image-20240308191556043

由图我们可以发现在标签中除了单引号他们都被实体化

但是在input标签里只有<>这两个符号消失了在这里我们猜测可能使用到了字符串替换来过滤了<>这两个符号 因为只消失了<>而""却显示正常所以在这里猜测它没有实例体化html字符

如果不确定可以去瞅瞅后端代码

如图:

image-20240308192904563

然后我们可以利用input标签

使用"进行闭合

所以 payload:"οnmοuseοver="alert(1)

如图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值