前言
最近学习了XSS注入。为了避免遗忘,总结一下。
注入技巧
1. 常见注入点
- URL
- 输入框
2. 常用payload
2.1 构造标签
1. <script>alert(1)</script>
2. <a href=javascript:alert(1)>
3. <img src=1 onerror=alert(1)>
4. <body onload=alert(1)>
5. <br size="&{alert(1)}">
2.2 构造事件
1. " οnclick="alert(1)
2. " οnmοuseοver="alert(1)
先写这么点,以后学了新的再补上去
3. 绕过思路
防护机制 | 可能的绕过措施 |
---|---|
删除关键字 | 双写绕过 |
识别关键字改写或阻拦 | 大小混写绕过;构造不常用的标签进行注入 |
过滤空格 | 利用%0a,%09,%0d等代替空格 |
过滤script | 利用img等不需要使用script的标签 |
过滤标签 | 尝试构造事件触发js |
注意:使用html实体编号绕过的时候,实体编号必须要是标签中的属性值(href=”实体编号”)或者事件的值(比如οnclick=”实体编号”)这样浏览器才会翻译解析。过滤了尖括号就想想能否用on事件来触发漏洞。
4. 注入思路
首先要仔细观察可能存在注入点处的网页源码:
- 构造参数将原本的标签闭合,然后构造新的标签(script;a;img等)
- 为原本的标签增添事件(onclick,onmouseover)
- 请求头注入
- form表单中隐藏的
input
标签可能存在注入点 - EXIF注入,当浏览器解析.jpg图片的时候,某些安装插件的用户会解析图片属性,可以在图片属性中构造注入语句。
- ng-include注入。可将其他存在注入漏洞的页面导入目标页面,进而实现在目标页面的注入。
- 当页面存在利用js代码修改修改页面结构的时候,可能存在DOM注入,可以利用
#
绕过后台防护。