这是我参与「第四届青训营 」笔记创作活动的第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)