渗透方式
- 反射型XSS,一般针对个人,过程一般是用户访问服务器-跨站链接-返回跨站代码,恶意代码不会存储在远程web应用程序中,因此需要一些社交工程(例如通过电子邮件/聊天的链接)。
- 存储型XSS,恶意代码将会存储在数据库中,任何获取对应数据的用户都有可能在本地执行恶意代码。
- DOM型XSS,不需要将恶意代码上传,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。
渗透目的
- 主要就是获取用户的cookie,配合CSRF伪装用户身份进行不正当行为。
常用payload
- 标签
2. <script>alert(1)</script>
3. <a href=javascript:alert(1)>
4. <img src=1 onerror=alert(1)>
5. <body onload=alert(1)>
6. <br size="&{alert(1)}">
- 事件
1. " οnclick="alert(1)
2. " οnmοuseοver="alert(1)
绕过思路
防护机制 | 应对措施 |
---|---|
删除关键字 | 双写或HTML实体编号 |
识别关键字改写或阻拦 | 大小混写绕过;构造不常用的标签进行注入 |
过滤空格 | 利用%0a,%09,%0d等代替空格 |
注:使用html实体编号绕过的时候,实体编号必须要是标签中的属性值(href=”实体编号”)或者事件的值(比如οnclick=”实体编号”)这样浏览器才会翻译解析。过滤了尖括号就想想能否用on事件来触发漏洞。
注入思路
- 主要还是要阅读html,寻找注入点,反射和存储XSS注入点相对好找,当页面存在利用js代码修改修改页面结构的时候,可能存在DOM注入,可以利用#绕过后台防护。
防护
- 客户端:浏览器对从URL中获取的内容进行编码,从而阻止执行任何注入的JavaScript。
- 服务器:使用内置的PHP函数(如“htmlspecialchars()”), 可以转义任何会改变输入行为的值。