记录和总结XSS攻击学习过程。
1 知识点
1 | htmlspecialchars() #把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体 |
浏览器会先解析html
,再解析js
,因此对于<img src=x onerror="console.error('');alert('1')">
这种格式的代码,waf
实际无用。
2 靶场练习
解题参考:http://www.lmxspace.com/2018/08/09/xss-%E6%8C%91%E6%88%98%E8%B5%9B/
0x00
1 | // 第一题比较简单 直接输出注入的代码 |
0x01
1 | // 因为textarea中间的字符串只会被当场文本显示而不会执行,所以需要先闭合textarea标签 |
0x02
1 | // 我们输入的值会作为标签的属性,所以我们先用"闭合value属性。 |
0x03
1 | // 题目中用正则表达式过滤了(),但是可以采用反引号`绕过 |
0x04
1 | // 题目中用正则表达式过滤了()和反引号,使用svg标签,<svg>标签中可以直接执行实体字符。 |
0x05
1 | // 题目中用正则表达式过滤了-->。 |
0x06
1 | // 题目中用正则表达式过滤了auto/on/> |
0x07
1 | // 题目中用正则表达式过滤了一个以<>包裹的字符串 |
0x08
1 | // 我们的输入出现在style标签里 题目中用正则表达式过滤了</style> 防止我们闭合标签 |
0x09
1 | // 题目中要求payload需要包含https://www.segmentfault.com前缀。 |
0x0A
1 | // 题目中做了非常全面的限制,需要引用外部js |
0x0B
1 | // 题目中将我们的输入全部转为了大写 |
0x0C
1 | // 与上一题相同 多过滤了script字段 但是对于我们的payload没有影响 |
0x0D
1 | // 用回车跳出注释 再用-->把后面的)注释掉 |
0x0E
1 | // 用回车跳出注释 再用-->把后面的)注释掉 |
0x0F
1 | // 看上去和0A一样,这种单字符的替换已经无法绕过。 |
0x10
1 | // 没有保护措施,且注入点在script标签内,直接注入 |
0x11
1 | // 虽然看似过滤的非常严格,但是"引入两个\\刚好可以把引号闭合,所以依旧可以成功 |
0x12
1 | // 用回车跳出注释 再用-->把后面的)注释掉 |