Web安全 -XSS 跨站脚本攻击| 青训营笔记

182 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第30天

XSS 跨站脚本攻击

主要利用的是我们盲目的新人用户提交的内容,以及直接把字符串读出来生成dom结构。 攻击者通过脚本注入攻击,用户在访问该页面时就会受到攻击。造成的后果可能有:用户隐私泄露、用户机器被用作挖矿机器

XSS的一些特点

  • 通常难以从UI上感知(暗地执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(例如弹窗),诱骗用户点击、填写表单(网站上的一些广告就有可能是)

> XSS根据性质可以分为几大类

  • 存储型XSS攻击 Stored XSS
  • 反射性XSS攻击 Reflected XSS
  • 基于DOM的XSS攻击 DOM-based XSS

1、存储型XSS (Stored XSS)

就是把恶意代码存储在数据库中

  • 恶意脚本被存在数据库中
  • 访问页面-> 读取数据 == 被攻击
  • 危害最大,对全部用户可见

2、Reflected XSS

  • 不涉及数据库
  • 从 URL 上攻击

攻击字段携带在URL链接中,服务器会从用户请求的query中读取字段,并将这个字段生成HTML片段,当用户访问这个页面的时候,就会收到XSS攻击。

3、基于DOM的XSS攻击方式(DOM-based XSS)

基于dom的[xss]是指pyaload的执行结果是用户浏览器中DOM环境的修改。网页(http响应包)本身并没有修改,但由于DOM环境中发生的恶意修改,客户端中的页面代码的执行方式有所不同。

假设以下代码用来生成一个表单,使用户选择他们偏好的语言。一个默认的语言也在请求中提供,为参数“default”。


document.write("<OPTION value=1>"+
decodeURIComponent(document.location.href.substring(document.location.href.indexOf("default=")+8))+
"</OPTION>");

document.write("<OPTION value=2>English</OPTION>");

可以用以下URL调用页面:

http://www.some.site/page.html?default=French

对此页面的基于DOM的xss攻击可以通过发送以下URL给一名用户完成:

http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

当用户点击此链接,浏览器发送以下请求:

/page.html?default=<script>alert(document.cookie)</script>

到www.some.site。服务器对此的响应包带有上面的JS代码,浏览器在页面中生成一个dom对象,其中的 document.location对象带有以下字符串:

http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

原本的JS代码并未想到参数default会包含html代码,所以,它在运行时简单的解码并回显到页面中。然后浏览器渲染此最终的页面并执行攻击者的脚本:

alert(document.cookie)