Stage #1(没有过滤的XSS)

随便在文本框输入一点内容,发现它会直接将输入的文本输出到网页上显示,查看网页元素,发现是b标签
1.png

两种思路:
1.闭合b标签,如图
2.png

2.它会直接将输入的字符串输出在网页上显示,可以考虑直接输入JS代码,如图
3.png

Stage #2(属性标签中的XSS)

还是随便输点东西上去,查看网页元素,发现文本在属性标签value里面
两种思路
1.闭合input标签
4.png
2.闭合value标签,利用on事件触发XSS
javascript on事件大全参考链接https://www.w3school.com.cn/jsref/jsref_events.asp
这里采用onmouseover事件,意思就是当鼠标指针移动到那上面的时候执行事件
5.png

Stage #3(选择列表中的XSS)

发现是一个b标签闭合的情况,采用Stage #1的两种方法都不行,所以可以输入的文本框不存在XSS,考虑旁边那个选择国家的列表,因为选择菜单里面无法自己更改,所以试试burp抓包
6.png
因为查看元素国家是b标签闭合,所以可以考虑直接将Japan改成一段JS代码
7.png
Fowward成功

Stage #4(参数中的XSS)

补充知识:
HTML表单隐藏参数:隐藏域是用来收集或发送信息的不可见元素,对于网页上的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上
和Stage #3一样先直接burp抓包,发现多了个参数叫hackme........
8.png
验证前面两个参数发现不存在XSS,考虑这个隐藏的参数,查看网页元素,发现hackme参数是value标签闭合
x.png

两种方法:
1.采用闭合input标签方法,成功
9.png
2.这种隐藏的可以使用svg来执行XSS,svg后面加事件(直接使用事件不行)
这里最合适的on事件是onload事件,即当加载的时候执行JS代码,这样能成功
10.png

Stage #5(限制长度的XSS)

一样先随便输入点东西,发现是value标签闭合,采用闭合input标签的方法,但是发现输入长度被限制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l0uZQ20d-1606812784419)(http://www.ghtwf01.cn/usr/uploads/2019/10/1650194901.png)]
将maxlength改大点就行

Stage #6(html事件中的XSS)

查看元素发现是value标签闭合,先采用闭合input标签,发现<和>被转义
12.png
再试试用on事件,成功

Stage #7(空格分隔属性中的XSS)

这道题发现是value闭合的情况,文本框里面输入的全部存放在value标签里面,先采用闭合input标签的方法
13.png
发现>是多余的,于是删除改为空格,发现<>都被转义
14.png
试一试on事件,使用代码1111" onmouseover="document.domain"
15.png
简单修改,删掉1111后面的"alert(document.domain)被两对双引号包围,于是删掉一对,成功触发XSS
c.png

Stage #8(javascript伪协议触发XSS)

这道题利用javascript伪协议在a标签中的利用

16.png

Stage #9(利用utf-7编码)

这道题没啥用,现在都几乎删除了utf-7编码
直接给答案
17.png

Stage #10(绕过过滤domain为空的XSS)

查看元素发现是value闭合内容,试试闭合input标签,查看元素
!18.png
发现domain被吃掉了,这里有两种方法绕过
1.双写domain绕过
即domain写成dodomainmain
2.base64编码绕过
alert(document.domain)进行base64编码为YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==
然后用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YdJmABZ9-1606812784433)(http://www.ghtwf01.cn/usr/uploads/2019/10/1016104977.png)]

Stage #11(绕过替换script和on事件的XSS)

发现是value闭合内容,先试试闭合input标签,script全被替换成了xscript导致JS代码无法执行
20.png
再试试on事件,发现所有on事件都被替换成了onxxx
21.png
考虑使用javascript伪协议,发现javascript被替换成了javaxscript
22.png
绕过方法:
1.在javascript中的script中插入不可见字符 (因为是替换script为xscript)
2.将javascript中的script中的任一字符进行unicode编码

Stage #12(利用IE浏览器绕过XSS过滤)

IE浏览器特性:两个`(反引号)能够闭合一个”(双引号)
这道题是value闭合输入的内容,先考虑使用闭合input标签,发现<>被过滤,前面的双引号也被过滤无法闭合
试一下用IE浏览器使用on事件
23.png

Stage #13(利用CSS特性绕过)

需在ie浏览器下,构造payload:background-color:#f00;background:url(“javascript:alert(document.domain);”);
但是我ie浏览器版本高了,所以不行,换用低版本ie浏览器就行

Stage #14(CSS绕过)

绕过对expression的过滤:使用注释绕过ex/**/pression
我IE版本高了,构造payload:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})

Stage #15(16进制绕过)
先随便输入字符串,发现上面是value标签闭合,尝试闭合input标签,文本框里面都被双引号包含,下面黑框里面JS代码中的<>都被转义
24.png
尝试用了unicode编码绕过发现还是不是,尝试使用16进制绕过,这里存在一个知识点,怎样使用JS代码能够识别的16进制
其实比较简单,网上有在线字符串转16进制,比如<的16进制是3c,前面加上\x就是,也就是\x3c是JS能够识别的,我们来试一试,在文本框里面输入\x3c发现小黑框出现x3c\不见了,再试试\\x3c,发现小黑框出现<
按照这种方法就可以使用16进制替换<>,还是使用闭合input标签
25.png
附上用cmd中python转换字符串为JS可识别的16进制方法

26.png

Stage #16(unicode绕过)

和15差不多,用到16进制绕过发现不行,尝试使用unicode绕过
附上用cmd中python转换字符串为JS可识别的unicode方法
27.png
还是和16一样的操作
28.png