XSS
0x00 XSS概念
Cross Site Scripting – 跨站脚本攻击,为了和CSS层叠样式表区分,故称跨站脚本攻击为XSS。跨站脚本攻击是指攻击者往Web页面里插入恶意Script代码,当用户浏览该页面之时,嵌入Web页面中的Script代码就会被执行,从而达到恶意攻击用户的目的
0x01 XSS原理
利用 Web 应用程序对用户输入数据的不充分验证和过滤,在页面中嵌入一些恶意代码(如 JavaScript、HTML 或 Flash),当其他用户访问该页面时,这些恶意代码就会被执行,从而导致攻击者能够在用户浏览器中进行一些非法操作
例如窃取用户敏感信息、劫持用户会话、发起 CSRF 攻击等。
0x02 XSS分类
- 反射型:一次性
反射型XSS只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功
- 存储型:也称持久型XSS
用户提交的数据会被存储在后端,最典型的应用是留言板
- DOM型
通过修改页面的DOM节点形成的XSS
0x03 XSS利用
- 在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
- 在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
- 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
- 在标签的 href、src 等属性中,包含
javascript:
等可执行代码。 - 在 onload、onerror、onclick 等事件中,注入不受控制代码。
0x04 常用标签
- script
1 | <scirpt>alert("xss");</script> |
- img
1 | <img src=1 onerror=alert("xss");> |
- iframe
1 | <iframe onload=alert("xss");></iframe> |
- a
1 | <a href="javascript:alert('xss')">aa</a> |
0x05 XSS绕过
关键字被过滤
- 双写绕过
- 大小写绕过
- 字符拼接
1 | <img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)"> |
- 编码绕过
空格过滤
- 利用
\
代替
过滤单/双引号
- 利用反引号
- 编码绕过
过滤括号
利用
throw
绕过利用反引号
编码绕过
0x06 修复
过滤:根据业务需求进行过滤
转义:所有输出到前端的数据都要根据输出点做转义
只允许用户输入http或hppts开头的协议,其次在进行htmlspecialchars()处理