XSS基本原理与注入方式

2024-08-21 07:12
文章标签 注入 方式 xss 基本原理

本文主要是介绍XSS基本原理与注入方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

XSS基本原理与注入方式

课程目标

参数改动,尝试XSS漏洞

一、XSS基本原理概述

二、XSS注入步骤

XSS注入步骤:

三、XSS的危害

课程目标

1、理解XSS漏洞的形成机制

2、理解XSS的类型和危害(利用PHP开发一个具备XSS漏洞的页面去尝试)

3、基于该漏洞实现XSS的攻击和利用

开发一个具有XSS漏洞的PHP页面

 if (isset($_GET['content'])) {$content = $_GET['content'];echo "您输入的内容是:$content";}else{echo "请输入URL地址参数content";}

参数改动,尝试XSS漏洞

  •  ?content=Hello World

    正常输出Hello World

  •  ?content=<script>alert('hello')</script> 或 ?content=<script>alert("hello")</script> 或 ?content=<script>alert(/hello/)</script>

    则会弹窗:

    image-20240721172754495

    image-20240721172928741

  •  ?content=<button οnclick="alert('you have been attacked')">come on</button>

    image-20240721175000506

  •  ?content=<script>function test() {alert("you have been attacked hahaha");}</script><button οnclick='test()'>come on</button>

  •  <script>var result = 0;for(var i=0;i<100;i++) {result += i;}alert(result);</script>

    image-20240721182051690

    会造成死循环,导致脚本执行意外中断,但为什么会死循环呢?

    image-20240721182203438

    我们可以看到,其页面源代码变成了这样,原来浏览器会将我们在url中输入的 加号(+) 变成空格,这样就导致我们的js代码变成了

     <script>var result = 0;for(var i=0;i<100;i  ) {result  = i;}alert(result);</script>

    所以就造成了死循环

  •  <script>var result = 0;for(var i=100;i>0;--i) {result -= i;}alert(result);</script>

    image-20240721182628649

    相反,我们只需换成反过来哦的负数就好了,取值的时候去个饭就行

一、XSS基本原理概述

XSS全称为:Cross Site Scripting,跨站攻击脚本,XSS漏洞发生在前端,攻击的是浏览器的解析引擎,XSS就是让攻击者的JavaScript代码在受害者的浏览器上执行。

XSS攻击者的目的就是寻找具有XSS楼哦对那个的网页,让受害者在不知情的情况下,在有XSS漏洞的网页上执行攻击者的JavaScript代码。

XSS是提前埋伏好的漏洞陷阱,等着受害者上钩。既然是执行JavaScript代码,所以供给的语句应该能让JavaScript运行。

JavaScript运行条件:

(1)代码位于 <script></script> 标签中

(2)代码位于onclick时间中,此类事件带有 onerror onload onfocus onblur onchange onmouseover(鼠标滑过) ondblclick(单击) 等

 <button οnclick="alert('you have been attacked')">come on</button><img src="http://xxx/xxx.jpg" οnmοuseοver="alert(1)" width=200></img>

(3)代码位于超链接的href属性中,或者其他类似属性中

 <a href="javascript:alert(1)">点击有惊喜</a>

XSS的攻击payload一定一定满足上述条件

XSS学习主要以测试看到效果为主,通常的明显效果就是使用alert弹窗,弹窗意味着我们的js代码成功执行了

XSS是以Web站点的用户为攻击目标,而不是服务器,是一种钓鱼攻击,攻击目标是不确定的。但是如果针对cookie类的攻击,隐含有一种确定目标就是网站管理员(这就是一种越权操作)

image-20240722112955528

受害者为用户,XSS类似于一种钓鱼攻击,用户访问攻击者事先在服务器存留的带有恶意js代码的页面,经过用户的浏览器引擎解析之后执行该恶意代码,导致被攻击

基于XSS配置钓鱼网站

利用iframe完成XSS攻击,将攻击者的模仿页面嵌入被攻击网页中: <iframe src="http://www.taobao.com" width=100% height=100%/>

例子如下:

  • 自行构建一个与淘宝一模一样的网页,并且点击登录跳转到一模一样的登录界面

image-20240722122822132

  • 一旦用户点击登录进行账密的输入并且提交,那么这些账密的数据就会传送至我们的后台服务器并获取。不过我们需要做的是这个登录页面要我们自己做,否则登录的请求就直接发给淘宝了,只需点击登录时跳转的页面是我们自己的就可以,其他淘宝的功能就用淘宝自己的

image-20240722123249749

  • 然后我们可以再将获得的账密通过post请求发给真正的淘宝登录,如果登录成功,就保存该账密,并且重定向页面到一个登录失败的页面,这个登录失败也可以做的和真正淘宝登录失败的页面一样,然后再跳转到真正的淘宝页面,大不了再重新登录一次,让用户以为自己账密输错了

自己服务器端的代码类似于:

 if (isset($_GET['content'])) {$content = $_GET['content'];echo "您输入的内容是:$content";}else{echo "请输入URL地址参数content";}​// 获取用户的淘宝账密$username = $_POST['username'];$password = $_POST['password'];​//将数据发送真正淘宝并POST登录检查是否登录成功​echo "<script>document.write('用户名或密码错误,请重新登录'); setTimeout(function() { location.href='https://www.taobao.com'}, 3000);</script>";​?>

二、XSS注入步骤

XSS攻击,一定牢记 “输入输出”,输入指的是攻击者对服务器网页输入恶意代码,输出指的是浏览器接收到代码后能解析并输出到前端。

XSS的原理就是开发者没有对输入内容进行过滤,导致通过攻击者精心构造的前端代码,输入后和原有的前端代码产生混淆,形成新的页面语句,并且新的页面语句能被浏览器解析并输出。

XSS注入步骤:

  • 找到输入点,输入任意字符串,查看输出位置

  • 打开网页源代码,在源代码中查看输出的位置。(有可能输入和输出不在同一个页面)

  • 查看输出位置的内容与输入的内容之间的关系,构建闭合和拼接脚本。

  • 利用 <script>onclickalert(1) 进行测试,确认食肉存在XSS注入点。

  • 开始利用该注入点完成各类复杂的操作,实现攻击目的。

优化PHP代码为以下代码,并在一个文本框中进行输出:

 if (isset($_GET['content'])) {$content = $_GET['content'];echo '您输入的内容是:<input type="text" id="content" value="'.$content.'"/>';}else{echo "请输入URL地址参数content";}

image-20240722150123950

那如果此时输入 <script>alert(1)</script> ,就不会再出现弹窗了,我们来看看为什么

image-20240722150243262

image-20240722150324742

这段脚本完全作为了字符串,要想让其执行,就需要闭合引号,所以我们输入 点我一下" onclick="alert(1) 会是什么样子

image-20240722150839646

那如果修改后端代码为下面这样呢

 if (isset($_GET['content'])) {$content = $_GET['content'];echo '您输入的内容是:<input type="text" value="'.$content.'" id="content"/>';}else{echo "请输入URL地址参数content";}

这样我们该如何闭合引号?

  • 直接闭合

    • click here" onclick="alert(1)

image-20240722153241113

  • 注释

    • click here" onclick="alert(1)"/> <!--

image-20240722153123846

  • type="hiddenmaxlength="100

image-20240722153213998

得到的结果和修改代码之前的结果是一样的

那如果修改后端代码为下面这样呢

  if (isset($_GET['content'])) {$content = $_GET['content'];echo "<a href='$content'>please click here</a>";}else{echo "请输入URL地址参数content";}

甚至我们还可以标签闭合标签

image-20240722155115322

image-20240722155209710

image-20240722155239267

三、XSS的危害

image-20240722174145353

这篇关于XSS基本原理与注入方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092474

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

前端form表单+ifarme方式实现大文件下载

// main.jsimport Vue from 'vue';import App from './App.vue';import { downloadTokenFile } from '@/path/to/your/function'; // 替换为您的函数路径// 将 downloadTokenFile 添加到 Vue 原型上Vue.prototype.$downloadTokenF

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 :frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可,不过需要覆盖所有目录下的图片。 由于是静态修改,则需要make一下,重新编译。 2、方法二Overlay方式 由于上述方法有很大缺点,修改多了之后容易遗忘自己修改哪些文件,为此我们采用另外一种方法,使用Overlay方式。