xss靶场和jsp语句学习

本文详细介绍了XSS注入攻击的原理,包括反射型、存储型和DOM-XSS的区别,以及在JSP开发中如何防范XSS,如使用指令、表达式和理解HTML与JSP注释的作用。
摘要由CSDN通过智能技术生成

XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)",为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所以将跨站脚本攻击缩写为XSS。XSS注入攻击的原理其实和SQL注入攻击的原理很相似,攻击者将恶意的Script代码插入到网页中,当正常用户浏览该页面时,被嵌入的恶意Script代码就会被执行,从而达到恶意攻击正常用户的目的。

(1)反射型XSS:攻击者输入可控数据到HTML页面中(通常是url),所以输入的数据没有被存储,只能在单次请求中生效。

(2)存储型XSS:攻击者输入可控数据到HTML页面(通常是POST表单:评论、留言板、登录框等),所以输入的数据会被存储到数据库中,由于数据经过存储,可以持续被读取出来,攻击的次数比反射型XSS多。

(3)DOM-XSS:攻击者可控数据通过JavaScript和DOM技术输出到HTML中,其实是一种特殊类型的反射型XSS,基于DOM文档对象模型的一种漏洞。

level 1

先找注入点,但是页面没有注入的地方,发现网址后的name可以修改,可以将url中name的参数修改为<script>alert()</script>

level 2

先尝试反射型<script>alert()</script>

查看源码发现,过滤了过滤了<>符号,修改payload提前将input标签闭合,让<script>独立出来
"><script>alert()</script>

level 3

先测试反射

查看源码

" <>都被过滤了,使用前端事件(事件绑定函数),修改paload,使前面闭合

 事件绑定函数:
            方式一:绑定普通函数
                语法:<标签 事件属性名="函数名(实际参数列表)"></标签>
            方式二:绑定匿名函数
                语法:
                    1.<标签></标签>
                    2.标签对象.事件属性名=匿名函数

 鼠标相关:
                    onclick:鼠标单击事件
                    onmouseover:鼠标移入事件
                    onmouseout:鼠标移出事件
                键盘相关:
                    onkeydown:键盘键按下事件
                    onkeyup: 键盘键松开事件
                表单相关:
                    onfocus:输入框获取焦点事件
                    onblur:输入框失去焦点事件
                    onchange:下拉列表 内容改变事件
                    onsubmit:表单提交事件
                其他:
                    onload:页面加载事件

' οnfοcus='alert(123)'

level 4

发现<>被过滤掉,尝试前端事件来测试" οnclick="alert(123),使前面闭合

jsp学习

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

jsp由这些页面元素组成:
1. 静态内容
就是html,css,javascript等内容
2. 指令
以<%@开始 %> 结尾,比如<%@page import="java.util.*"%>
3. 表达式 <%=%>
用于输出一段html
4. Scriptlet
在<%%> 之间,可以写任何java 代码
5. 声明
在<%!%> 之间可以声明字段或者方法。但是不建议这么做。变量作用范围是整个JSP页面,同时它只在一个JSP页面有效
6. 动作
<jsp:include page="Filename" > 在jsp页面中包含另一个页面。在包含的章节有详细的讲解
7. 注释 <%-- -- %>
不同于 html的注释 <!-- --> 通过jsp的注释,浏览器也看不到相应的代码 

<!--显示注释 当前时间为:<%=(new java.util.Date().toInstant())%>-->

<%--隐藏注释 当前时间为:<%=(new java.util.Date().toInstant())%>--%>

基础语法

1.指令

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

<%--page--%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"  contentType="text/html; charset=UTF-8" isErrorPage="true"%>
 
<%--include--%>
<%@ include file="foot.html" %>
<%@ include file="foot.jsp" %>
<%--taglib prefix:指定标签前缀,这个东西可以随意起名 uri:指定第三方标签库的uri(唯一标识)--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

2.声明

会被编译到jsp生成的java的类中

<%--jsp声明:会被编译到jsp生成的java的类中!上面其他的,就会被生成到_jspService方法中--%>
<%!
  static {
    System.out.println("loading Servlet!");
  }
  private int globalVar = 0;
  public void add(){
    System.out.println("进入了方法add!");
  }
%>

3.表达式

<%--JSP表达式
作用:用来将程序的输出,输出到客户端
<%=变量或者表达式%>
--%>
<%=new java.util.Date()%>

4.小脚本

<%--java脚本片段--%>
<%
  int sum = 0;
  for (int i = 0; i <= 100; i++) {
    sum = sum+i;
  }
  out.print("<h1>sum="+sum+"</h1>");
%>

5.声明

<!--这是html的注释--> <%--这是jsp的注释。两种注释的区别:JSP的注释,不会在客户端显示,HTML就会!--%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值