XSS

Chiexf Lv4

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
2
<iframe onload=alert("xss");></iframe>
<iframe src=javascript: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()处理