XSS攻击
简介
XSS(Cross Site Scripting:跨站脚本攻击)是基于客户端的 Web 攻击,和 SQL 注入攻击一样稳居 OWASP 前三,危害极大。
相对于 SQL 注入攻击来说,XSS 攻击的对象是网站的用户,而 SQL 注入攻击的对象是网站服务器。
一般出现在网页中的评论框、留言板、搜索框等用户输入的地方。
XSS 一般是提前埋伏好漏洞陷阱,等着受害者上钩。
漏洞形成主要原因是 Web 服务端没有对脚本文件如
危害
会话劫持,获取用户 Cookie
网页挂马,利用你的浏览器挖矿。
https://www.cnblogs.com/bonelee/p/16497880.html
劫持用户 Web 行为,获取键盘记录。
网站钓鱼,模拟真实网站,获取用户名密码。
XSS DDOS,如:在 A、B、C、…站点执行访问 Z 站点的 XSS 代码。
刷广告、刷流量等
分类
反射型(非持久型)
通过 GET 方式把恶意攻击代码附加在 URL 中,发送给受害人点击后会在受害者的浏览器上执行恶意攻击代码,属于一次性攻击,而且比较容易被发现。
所以通常通过转换成短网址的方式增强攻击的迷惑性。
存储型(持久型)
通过可以向服务器写入数据的输入框,将恶意攻击代码永久存储在目标服务器的数据库或文件中,任何人浏览页面,服务器都会从数据库将攻击者写入的内容取出并发给前端,前端浏览器收到后就会执行恶意攻击代码,所以每一次访问就相当于一次 XSS 攻击。
DOM 型
主要利用客户端浏览器 JS 对请求的网页进行 DOM 渲染产生的漏洞。
攻击方法
概述
XSS 攻击者寻找具有 XSS 漏洞的网页,构造脚本(一般是 JavaScript)到 Web 页面,让受害者在不知情的情况下点击链接,即:在有 XSS 漏洞的网页上执行攻击者的 JavaScript 代码。若拿到了管理员的 Cookie,则直接控制整个网站。
Payload 满足的条件
代码位于 “< script> </ script>” 标签中
如:
代码位于 onclick 事件中,此类事件还有 onerror, onload, onfocus, onblur, onchange, onmouseover 等
如:大爷来玩呀!
代码位于超链接的 href 属性中,或者其他类似属性中
如:你相信光吗!?
举例
尝试访问 php 文件
<?php
@$content = $_GET['content'];
if(isset($content)) {
echo '你输入的内容为:' . $content;
}
else {
echo '请输入 content';
}
?>
<?php
@$content = $_GET['content'];
if(isset($content)) {
echo '你输入的内容为:<input type="text" value="'. $content . '">';
}
else {
echo '请输入 content';
}
?>
攻击要点
输入
攻击者向服务器网页输入恶意代码。
输出
服务器将代码输出到浏览器并正常执行。
防护方法
对用户输入的特殊字符进行安全过滤和转义
<>
引号
on 事件
script
…
不仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行
对输出到页面的数据进行相应的编码转换,如 HTML 实体编码、JS 编码等
htmlspecialchars():将特殊字符转换成实体编码