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就会!--%>