Stage #1(没有过滤的XSS)
随便在文本框输入一点内容,发现它会直接将输入的文本输出到网页上显示,查看网页元素,发现是b标签
两种思路:
1.闭合b标签,如图
2.它会直接将输入的字符串输出在网页上显示,可以考虑直接输入JS代码,如图
Stage #2(属性标签中的XSS)
还是随便输点东西上去,查看网页元素,发现文本在属性标签value里面
两种思路
1.闭合input标签
2.闭合value标签,利用on事件触发XSS
javascript on事件大全参考链接https://www.w3school.com.cn/jsref/jsref_events.asp
这里采用onmouseover事件,意思就是当鼠标指针移动到那上面的时候执行事件
Stage #3(选择列表中的XSS)
发现是一个b标签闭合的情况,采用Stage #1的两种方法都不行,所以可以输入的文本框不存在XSS,考虑旁边那个选择国家的列表,因为选择菜单里面无法自己更改,所以试试burp抓包
因为查看元素国家是b标签闭合,所以可以考虑直接将Japan改成一段JS代码
Fowward成功
Stage #4(参数中的XSS)
补充知识:
HTML表单隐藏参数:隐藏域是用来收集或发送信息的不可见元素,对于网页上的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上
和Stage #3一样先直接burp抓包,发现多了个参数叫hackme…
验证前面两个参数发现不存在XSS,考虑这个隐藏的参数,查看网页元素,发现hackme参数是value标签闭合
两种方法:
1.采用闭合input标签方法,成功
2.这种隐藏的可以使用svg来执行XSS,svg后面加事件(直接使用事件不行)
这里最合适的on事件是onload事件,即当加载的时候执行JS代码,这样能成功
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标签,发现<和>被转义
再试试用on事件,成功
Stage #7(空格分隔属性中的XSS)
这道题发现是value闭合的情况,文本框里面输入的全部存放在value标签里面,先采用闭合input标签的方法
发现>是多余的,于是删除改为空格,发现<>都被转义
试一试on事件,使用代码1111" onm ouseover="document.domain"
简单修改,删掉1111后面的"
,alert(document.domain)
被两对双引号包围,于是删掉一对,成功触发XSS
Stage #8(javascript伪协议触发XSS)
这道题利用javascript伪协议在a标签中的利用
Stage #9(利用utf-7编码)
这道题没啥用,现在都几乎删除了utf-7编码
直接给答案
Stage #10(绕过过滤domain为空的XSS)
查看元素发现是value闭合内容,试试闭合input标签,查看元素
!
发现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代码无法执行
再试试on事件,发现所有on
事件都被替换成了onxxx
考虑使用javascript伪协议,发现javascript
被替换成了javaxscript
绕过方法:
1.在javascript中的script中插入不可见字符 (因为是替换script为xscript)
2.将javascript中的script中的任一字符进行unicode编码
Stage #12(利用IE浏览器绕过XSS过滤)
IE浏览器特性:两个`(反引号)能够闭合一个”(双引号)
这道题是value闭合输入的内容,先考虑使用闭合input标签,发现<>被过滤,前面的双引号也被过滤无法闭合
试一下用IE浏览器使用on事件
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代码中的<>都被转义
尝试用了unicode编码绕过发现还是不是,尝试使用16进制绕过,这里存在一个知识点,怎样使用JS代码能够识别的16进制
其实比较简单,网上有在线字符串转16进制,比如<
的16进制是3c
,前面加上\x
就是,也就是\x3c
是JS能够识别的,我们来试一试,在文本框里面输入\x3c
发现小黑框出现x3c
,\
不见了,再试试\\x3c
,发现小黑框出现<
按照这种方法就可以使用16进制替换<>
,还是使用闭合input标签
附上用cmd中python转换字符串为JS可识别的16进制方法
Stage #16(unicode绕过)
和15差不多,用到16进制绕过发现不行,尝试使用unicode绕过
附上用cmd中python转换字符串为JS可识别的unicode方法
还是和16一样的操作