Web安全测试(五):XSS攻击—存储式XSS漏洞

news2024/12/25 9:34:26

一、前言

结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬!
全部文章请访问专栏:《全栈安全测试教程(0基础)》

文章目录

    • 一、前言
    • 二、XSS攻击
    • 三、存储式XSS漏洞
      • 1)什么是存储式XSS
      • 2)如何检测存储式XSS
      • 3)如何防范存储式XSS
      • 4)常用WEB漏洞扫描工具对存储式XSS漏洞扫描方法


二、XSS攻击

XSS(cross site script)或者说跨站脚本是一种Web应用程序的漏洞,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

存在的风险

盗取用户cookie,然后伪造用户身份登录,泄漏用户个人身份及用户订单信息。
操控用户浏览器,借助其他漏洞可能导致对https加密信息的破解,导致登录传输存在安全风险。
结合浏览器及其插件漏洞,下载病毒木马到浏览者的计算机上执行。
修改页面内容,产生钓鱼攻击效果,例如伪造登录框获取用户明文帐号密码。

三、存储式XSS漏洞

1)什么是存储式XSS

存储式XSS,持久化,代码是存储在服务器中的。
存储式XSS是当不可信的用户输入被处理并在没有任何验证的情况下保存在文件或数据库,同时该不可信的数据从存储中被获取然后在没有编码或转义的情况下反射回响应文中,导致了永久性的每次存储数据反射回响应文代码就会在浏览器中执行的一种XSS漏洞。
存储式XSS的影响有:

  1. 通过javascript获取用户的cookie,根据这个cookie窃取用户信息
  2. 重定向网站到一个钓鱼网站
  3. 重新更改页面内容,假装让客户输入用户名,密码,然后提交到黑客的服务器
  4. 生成蠕虫,迅速扩散到整个网站用户(微博等)

2)如何检测存储式XSS

攻击者向被攻击页面写入恶意代码的方法很多,最常见的就是在论坛或留言本中发帖时将html代码写入到被攻击页面中,此外在用户资料修改、签名、联系方式等地方也是攻击者写入html代码常用的地方,如果被攻击页面对用户输入过滤不严的话,就可以被攻击者写入类似如下的一段代码。

 <script>alert('1')</script>

由于攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据。所以大部分的存储型XSS漏洞都是在表单提交上会发生的。
针对这种特性,我们需要做的就是在程序任何有可能提交表单上进行验证。

传统测试方式:

<script>alert('1')</script>

任意可以输入的地方,使用上面代码尝试是否可以有如下的弹窗:

在这里插入图片描述

这个是最简单的XSS检测方式。

img标签属性跨站
第一种方法受挫后,黑客可能尝试利用img标签。

<img src=javascript:alert('1')"></img>
<img dynsrc=javascript:alert('1')"></img>

结果是与之前相同

在这里插入图片描述
DIV标签属性跨站
img标签外,DIV标签也可以利用。同样也是图片载入

结果是与之前相同 ![在这里插入图片描述](https://img-blog.csdnimg.cn/aa4cb61d09b14b80b85d61a1897e20c6.png)

利用insertAjacentHTML
javascript字符被过滤了,我们也可以用其它方法:
<img src=“knownsec” οnerrοr=alert(‘1’)>
通过构造错误属性,让浏览器执行特定的javascript代码。
即使这种方式被防住,我们也可以使用自行构造事件

除了font, 还有table,a,ul等标签也可以利用

3)如何防范存储式XSS

第一是对用户输入的特殊字符进行转译
对HTML中不可信字符串进行HTML转义。

&	&amp;	
<	&lt;	
>	&gt;	
"	&quot;	
`	&#x60;	
'	&#x27;	
/	&#x2F;	

对于HTML属性中不可信字符串进行HTML转义,并且总是为你的属性加上引号,无论是( ‘ 或“ ),不要使用反引号( ` )。
除了字母数字字符,用格式(或者命名实体,如果可用)转义所有ASCII值小于256的字符以防止开关的值伸出属性。恰当的为属性加上引号可以只被对应的引号转义。不带引号的属性可以被分解为许多个字符,包括和。


对于事件触发属性中的不可信字符串,先进行JavaScript转义,然后执行HTML转义,因为浏览器在执行JavaScript字符串解码前执行HTML属性解码。对于JavaScript中的非可信数据,进行JavaScript字符串转义并且总是将属性加上引号,无论是( ‘ 或“ ),但不要使用反引号( ` )

  1. 除了字母数字字符,以格式转义小于256的所有字符,以防开关的值伸到脚本中或另一个属性。不要使用类似的转义符号,因为引号符号可能被HTML属性解析器在第一次运行被匹配。这些转义字符也容易受到”转义已转义”的攻击,攻击者发送和漏洞代码转为使得可以成为引号。如果事件触发属性被正确引号,需要通过相应的引号来闭合。不带引号的属性可以被分割为许多字符,包括另外,一个闭合标签可以闭合脚本块,即使它是一个带引号的字符串。需要注意的是,HTML解析器在JavaScript解析器

  2. 对HTML属性中的URL路径进行转义而不是完整的URL。总是为属性加上引号,无论是(‘ 或“ ),但不要使用反引号( ` )。绝不允许或包含格式像或或者他们的组合(如)。
    除了字母数字字符, 用格式转义所有ASCII值小于256的字符。如果或属性被正确的引号起来,突破需要对应的引号。未被引号属性可以使用许多字符进行突破,包括和。请注意,这种情况下,实体编码是无用的。

  3. 对HTML样式属性内的不可信字符串先做CSS字符串转义,然后进行HTML转义,因为解析器的解析顺序是先HTML解析器然后再CSS解析器。总是给你的属性加上引号,如本例子中的风格属性加上( “ ) ,CSS字符串加上( ‘ ) ,不要使用反引号( )。为在CSS中的不可信字符串做CSS字符串转义。也要确保不可信字符串在引号( ‘ 或“ ) 之间,不要使用反引号( )。也不要允许expression以及它的复杂组合,如(expre/**/ssion)。
    除了字母数字字符, 用格式转义所有ASCII值小于256的字符。不要使用任何类似的转义符号,因为引号符号可能被HTML属性解析器在第一次运行被匹配。这些转义字符也容易受到”转义已转义”的攻击,攻击者发送和漏洞代码转为使得可以成为引号。如果属性被正确引号,需要通过相应的引号来闭合。不带引号的属性可以被分割为许多字符,包括。同时, 标签会关闭风格块,即使是在一个被引号的字符串内。请注意,HTML解析器在CSS解析器前运行。

  4. 对于JavaScript字符串中不可信的HTML,先执行HTML转义,然后执行JavaScript字符串转义,保持这个顺序。
    创建个Web应用程序应该允许的来自用户的标签和属性的白名单。黑名单可以很容易的被绕过。
    使用UTF-8为默认的字符编码以及设置content为text/html
    不要将用户可以控制的文本放在标签前。通过使用不同的字符集注射可以导致XSS。
    使用告诉你的浏览器遵循标准进行HTML,CSS的渲染以及如何执行

4)常用WEB漏洞扫描工具对存储式XSS漏洞扫描方法

snuck
snuck是一款自动化的漏洞扫描工具,它可以帮助你扫描Web应用中存在的XSS漏洞。snuck基于Selenium开发,并且支持Firefox、Chrome和IE浏览器。
snuck与传统的Web安全扫描工具有显著的区别,它会尝试利用特殊的注入向量来破坏网站的XSS过滤器,并通过这种方法提高漏洞的检出成功率。基本上说,snuck所采用的检测方法与iSTAR漏洞扫描工具的检测方法较为相似,但snuck针对的是特定的XSS过滤器。
通常都是利用收集的各类XSSpayloads来进行尝试

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RHCA之路---EX280(5)

RHCA之路—EX280(5) 1. 题目 Using the example files from the wordpress directory under http://materials.example.com/exam280/wordpress create a WordPress application in the farm project For permanent storage use the NFS shares /exports/wordpress and /export…

蓝桥杯打卡Day1

文章目录 全排列八皇后 一、全排列IO链接 本题思路:本题是一道经典的全排列问题&#xff0c;深度优先搜索即可解决。 #include <bits/stdc.h>constexpr int N10;std::string s; std::string ans; int n; bool st[N];void dfs(int u) {if(un){std::cout<<ans<…

java 基础面试题 静态绑定与动态绑定

一 静态绑定与动态绑定 1.1 前言概述 昨天去用友面试&#xff0c;被问到了如下几个问题 1.单例模式使用场景 2.责任链模式 3.分布式事务TCC 4.动态绑定和静态绑定 5.类加载器 今天就来研究一下静态绑定和动态绑定 1.2 静态绑定代码 1.父类&#xff1a;定义一个stati…

OpenCV实现Photoshop曲线调整

《QT 插件化图像算法研究平台》有仿Photoshop曲线调整图像的功能&#xff0c;包括RGB曲线调整和HSV曲线调整。 Photoshop曲线调整原理&#xff1a;RGB、HSV各通道曲线&#xff0c;可以理解为一个值映射&#xff08;值转换&#xff09;函数。X轴是输入&#xff0c;Y轴是输出。x0…

什么是SpringCloud Eureka服务注册与发现

&#x1f600;前言 本篇博文是关于SpringCloud Eureka 介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&…

包管理工具--》npm的配置及使用(一)

目录 &#x1f31f;概念 &#x1f31f;背景 &#x1f31f;前端包管理器 &#x1f31f;包的安装 本地安装 全局安装 &#x1f31f;包配置 配置文件 保存依赖关系 &#x1f31f;包的使用 &#x1f31f;概念 模块&#xff08;module&#xff09; 通常以单个文件形式存…

解决windows下git操作提示用户名密码错误的问题

当代码从一个平台切换到另一个平台的时候&#xff0c;需要做两步操作&#xff0c;第一步就是更新git的仓库地址&#xff0c;在项目的.git/config文件里面修改&#xff0c;这一步做完之后&#xff0c;就可以推送代码到新的仓库了&#xff0c;这里就是重点来了。 一般第一次推动代…

数据结构与算法复杂度介绍

目录 一、基本概念 二、时间复杂度 【2.1】时间复杂度概念 【2.2】大O的渐进表示法 【2.3】举例时间复杂度计算 三、空间复杂度 一、基本概念 数据结构&#xff1a;相互之间存在一种或者多种特定关系的数据元素的集合。在逻辑上可以分为线性结构&#xff0c;散列结构、树…

关于 ignore

当使用 insert into xxx 时&#xff0c;可能出现因数据类型错误插入失败的情况&#xff0c;如图所示&#xff1a; 当出现这种情况时&#xff0c;可以通过 ignore 来“强制”插入&#xff0c;提示插入成功 但是这种操作会带来隐患如图&#xff1a; 时间有问题&#xff0c;但是时…

SMU200A/罗德与施瓦茨SMU200A信号发生器

181/2461/8938产品概述 R&S SMU200A信号发生器旨在满足现代通信系统研发及其生产中遇到的所有要求。R&S SMU200A矢量信号发生器不仅将多达两个独立的信号发生器组合在一个只有四个高度单位的机柜中&#xff0c;还提供无与伦比的RF和基带特性。 Rohde & Schwarz S…

如何让Android平台像网络摄像机一样实现GB28181前端设备接入?

技术背景 好多开发者在做国标对接的时候&#xff0c;首先想到的是IPC&#xff08;网络摄像头&#xff09;&#xff0c;通过参数化配置&#xff0c;接入到国标平台&#xff0c;实现媒体数据的按需查看等操作。 像执法记录仪等智能终端&#xff0c;跑在Android平台&#xff0c;…

mysql主从同步步骤(一主一从)

1、主库添加binlog配置&#xff0c;并设置server-id server-id124 # 设置日志格式,日志路径(注意路经需要mysql用户有权限写&#xff0c;默认地址放在datadir的目录下) binlog_formatmixed log-binmysql-bin# 设置binlog清理时间(秒), binlog每个日志文件大小 binlog_expire_l…

线上问诊:数仓开发(三)

系列文章目录 线上问诊&#xff1a;业务数据采集 线上问诊&#xff1a;数仓数据同步 线上问诊&#xff1a;数仓开发(一) 线上问诊&#xff1a;数仓开发(二) 线上问诊&#xff1a;数仓开发(三) 文章目录 系列文章目录前言一、ADS1.交易主题1.交易综合统计2.各医院交易统计3.各性…

行业追踪,2023-09-04

自动复盘 2023-09-04 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

实时操作系统Freertos开坑学习笔记:(四):临界段保护、列表与列表项

前言 废话不多说&#xff0c;直接看主要要探究的问题&#xff1a; 一、临界段代码保护 1.什么是临界段&#xff1f; 图里面说&#xff0c;临界区的代码是不能被打断的&#xff0c;它运行时不能被中断打断&#xff0c;也不能由于非阻塞任务延时而切换到其他任务去。 比如说…

【Java转Go】Go中使用WebSocket实现聊天室(私聊+群聊)

目录 前言功能效果&#xff08;一人分饰多角.jpg&#x1f60e;&#xff09;用户上线、群聊私聊和留言下线 实现思路代码服务端 chat.go 完整代码客户端 html 完整代码 最后 前言 之前在Java中&#xff0c;用 springbootwebsocket 实现了一个聊天室&#xff1a;springbootwebso…

用BAPI创建销售订单条件价格有多个

说明&#xff1a; 在用BAPI_SALESORDER_CREATEFROMDAT2创建销售订单的时候&#xff0c;业务配置的是Z001自动出来的&#xff0c;我在BAPI条件那块赋值更改标识也是U&#xff0c;但是创建出来的单据还是有两条件类型。 解决方法&#xff1a; LOGIC_SWITCH-PRICING G .即可

AP9193 升压恒流驱动芯片 美容护肤仪 美容灯 锂电池升压驱动IC

AP9193 是一款高效率、高精度的升 压型大功率 LED 灯恒流驱动控制芯片。 应用领域 LED 灯杯 电池供电的 LED 灯串 平板显示 LED 背光 恒流充电器控制 大功率 LED 照明 AP9193 内置高精度误差放大器&#xff0c;固 定关断时间控制电路&#xff0c;恒流驱动电路等&#xff…

签到系统怎么设计

背景 相信签到系统大家都有接触过&#xff0c;更多的是使用。但是有思考过这种系统是怎么设计的吗&#xff1f;比方说我统计一下每个月中每天的签到情况&#xff0c;怎么设计呢&#xff1f;今天一篇文章告诉你。 首先&#xff0c;我们熟悉的思维是&#xff1a;我设计一个数据…

电商平台-业务中台-SPU,SKU,SN概念简介

什么是SPU &#xff08;Standard Product Unit)? SPU标准属性是商品基本属性&#xff0c;基本属性中最核心两个属性是品牌和型号&#xff0c;电商平台一般采用 品牌和型号 来确定SPU&#xff08;Standard Product Unit&#xff09;标准化管理单元&#xff0c; 例如:小米 10 就…