看不见的彼方:交换空间——小菜一碟
有个蓝色的链接,先去看看两年前的题目的write up
(https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/master/official/%E7%9C%8B%E4%B8%8D%E8%A7%81%E7%9A%84%E5%BD%BC%E6%96%B9/README.md)
从别人的write up中了解到,可以用信号和IPC来传递数据,而这个IPC指的就是消息队列(msgget 等)和共享内存(shmget 等),注意一定要使用System V的 API,因为posix的那几个会依赖文件系统而不能使用。
进程间通信的问题解决了,接下来就是内存限制的处理了。虽然不能完全复制,但是一次复制个2MiB 还是没问题的。开一个2MiB大小的共享内存空间,然后前半部分用来把A的文件内容传给B,后半部分用来把 B 的文件内容传给 A,写入到文件的时候直接原位置覆盖写入即可。每次传递两个1MiB 大小的文件片段,再加上用消息队列跨进程同步,整个事情就成了。
容器内存限制 316 MiB,你提交的程序文件会复制为两份,分别占用一份内存空间。环境限制总 PID 数为 32。对于 chroot 内部的进程,只有 /space 可读写。/space(/home/pwn/A/space/ 和 /home/pwn/B/space/)为 tmpfs,使用内存空间。
已经尝试过让AI生成代码,但还是不行,代码这块我不熟悉,下面是大佬的write up的代码:
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/msg.h>
#include <sys/shm.h>void perror_exit(char* message){perror(message);exit(-1);
}struct message {long type;char buffer[4];
};int main()
{printf("a start\n");int mqab=msgget(12450,0666 |IPC_CREAT);if(mqab<0){perror_exit("msgget swapab error");}int mqba=msgget(12451,0666 |IPC_CREAT);if(mqba<0){perror_exit("msgget swapba error");}int shm=shmget(12452,2*1024*1024,0666 |IPC_CREAT);if(mqba<0){perror_exit("shmget error");}void* mem=shmat(shm,0,0);if(mem==(void*)(-1)){perror_exit("shmat error");}int fd=open("/space/file",O_RDWR);if(fd<0){perror_exit("open error");}printf("a ok\n");char* read_start=((char*)(mem));char* write_start=((char*)(mem))+1024*1024;for(int i=0;i<128;i++){int segment_start=i*1024*1024;// 读出文件内容off_t read_off=lseek(fd,segment_start,SEEK_SET);if(read_off<0){perror_exit("lseek error");}int read_count=0;while(read_count<1024*1024){int read_len=read(fd,read_start+read_count,1024*1024-read_count);if(read_len<0){perror_exit("read error");}read_count+=read_len;}// 发送同步信号struct message out;out.type=1;if (msgsnd(mqab, &out, sizeof (struct message), 0) <0) {perror_exit("msgsnd error");}// 接收同步信号struct message in;if (msgrcv(mqba, &in, sizeof (struct message),0, 0) <0) {perror_exit("msgrcv error");}// 写回文件内容off_t write_off=lseek(fd,segment_start,SEEK_SET);if(write_off<0){perror_exit("lseek error");}int write_count=0;while(write_count<1024*1024){int write_len=write(fd,write_start+write_count,1024*1024-write_count);if(write_len<0){perror_exit("write error");}write_count+=write_len;}}printf("a complete\n");
}
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/msg.h>
#include <sys/shm.h>void perror_exit(char* message){perror(message);exit(-1);
}struct message {long type;char buffer[4];
};int main()
{printf("b start\n");int mqab=msgget(12450,0666 |IPC_CREAT);if(mqab<0){perror_exit("msgget swapab error");}int mqba=msgget(12451,0666 |IPC_CREAT);if(mqba<0){perror_exit("msgget swapba error");}int shm=shmget(12452,2*1024*1024,0666 |IPC_CREAT);if(mqba<0){perror_exit("shmget error");}void* mem=shmat(shm,0,0);if(mem==(void*)(-1)){perror_exit("shmat error");}int fd=open("/space/file",O_RDWR);if(fd<0){perror_exit("open error");}printf("b ok\n");char* read_start=((char*)(mem))+1024*1024;char* write_start=((char*)(mem));for(int i=0;i<128;i++){int segment_start=i*1024*1024;// 接收同步信号struct message in;if (msgrcv(mqab, &in, sizeof (struct message),0, 0) <0) {perror_exit("msgrcv error");}// 读出文件内容off_t read_off=lseek(fd,segment_start,SEEK_SET);if(read_off<0){perror_exit("lseek error");}int read_count=0;while(read_count<1024*1024){int read_len=read(fd,read_start+read_count,1024*1024-read_count);if(read_len<0){perror_exit("read error");}read_count+=read_len;}// 写回文件内容off_t write_off=lseek(fd,segment_start,SEEK_SET);if(write_off<0){perror_exit("lseek error");}int write_count=0;while(write_count<1024*1024){int write_len=write(fd,write_start+write_count,1024*1024-write_count);if(write_len<0){perror_exit("write error");}write_count+=write_len;}// 发送同步信号struct message out;out.type=1;if (msgsnd(mqba, &out, sizeof (struct message), 0) <0) {perror_exit("msgsnd error");}}printf("b complete\n");
}
编译之后上传文件:
成功得到flag:flag{just A p1ece 0f cake_2e65492b77}
相关文章:
看不见的彼方:交换空间——小菜一碟
有个蓝色的链接,先去看看两年前的题目的write up (https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/master/official/%E7%9C%8B%E4%B8%8D%E8%A7%81%E7%9A%84%E5%BD%BC%E6%96%B9/README.md) 从别人的write up中了解到&…...
YOLO模型训练后的best.pt和last.pt区别
在选择YOLO模型训练后的权重文件best.pt和last.pt时,主要取决于具体的应用场景:12 best.pt:这个文件保存的是在训练过程中表现最好的模型权重。通常用于推理和部署阶段,因为它包含了在验证集上表现最好的模型权重&#x…...
Pareidoscope - 语言结构关联工具
文章目录 关于 Pareidoscope安装使用方法输入格式语料库查询 将语料库转换为 SQLite3 数据库两种语言结构之间的关联简单词素分析关联共现和伴随词素分析相关的更大结构可视化关联结构 关于 Pareidoscope Pareidoscope 是一组 用于确定任意语言结构之间 关联的工具,…...
GPT(Generative Pre-trained Transformer) 和 Transformer的比较
GPT(Generative Pre-trained Transformer) 和 Transformer 的比较 flyfish 1. Transformer 是一种模型架构 Transformer 是一种通用的神经网络架构,由 Vaswani 等人在论文 “Attention Is All You Need”(2017)中提…...
软件无线电(SDR)的架构及相关术语
今天简要介绍实现无线电系统调制和解调的主要方法,这在软件定义无线电(SDR)的背景下很重要。 外差和超外差 无线电发射机有两种主要架构——一种是从基带频率直接调制到射频频率(称为外差),而第二种超外差是通过两个调制阶段来实…...
Python将Excel文件转换为JSON文件
工作过程中,需要从 Excel 文件中读取数据,然后交给 Python 程序处理数据,中间需要把 Excel 文件读取出来转为 json 格式,再进行下一步数据处理。 这里我们使用pandas库,这是一个强大的数据分析工具,能够方便地读取和处理各种数据格式。需要注意的是还需要引入openpyxl库,…...
排序算法之选择排序篇
思想: 每次从未排序的部分找出最小的元素,将其放到已排序部分的末尾 从数据结构中找到最小值,放到第一位,放到最前面,之后再从剩下的元素中找出第二小的值放到第二位,以此类推。 实现思路: 遍…...
sizeof和strlen区分,(好多例子)
sizeof算字节大小 带\0 strlen算字符串长度 \0之前...
A050-基于spring boot物流管理系统设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
[自然语言处理] NLP-RNN及其变体-干货
一、认识RNN模型 1 什么是RNN模型 RNN(Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出. 一般单层神经网络结构: RNN单层网络结构: 以时间步对RNN进行展开后的单层…...
Elasticsearch ILM 索引生命周期管理讲解与实战
ES ILM 索引生命周期管理讲解与实战 Elasticsearch ILM索引生命周期管理:深度解析与实战演练1. 引言1.1 背景介绍1.2 研究意义2. ILM核心概念2.1 ILM的四个阶段2.1.1 Hot阶段2.1.2 Warm阶段2.1.3 Cold阶段2.1.4 Delete阶段3. ILM实战指南3.1 定义ILM策略3.1.1 创建ILM策略3.1.…...
重塑视频新语言,让每一帧都焕发新生——Video-Retalking,开启数字人沉浸式交流新纪元!
模型简介 Video-Retalking 模型是一种基于深度学习的视频再谈话技术,它通过分析视频中的音频和图像信息,实现视频角色口型、表情乃至肢体动作的精准控制与合成。这一技术的实现依赖于强大的技术架构和核心算法,特别是生成对抗网络࿰…...
联想Lenovo SR650服务器硬件监控指标解读
随着企业IT架构的复杂性和业务需求的增长,服务器的稳定运行变得至关重要。联想Lenovo SR650服务器以其高性能和稳定性,在各类应用场景中发挥着关键作用。为了保障服务器的稳定运行,监控易作为一款专业的IT基础设施监控软件,为联想…...
二十一、QT C++
1.1QT介绍 1.1.1 QT简介 Qt 是一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工具。它最初由挪威的 Trolltech (奇趣科技)公司开发,现在由 Qt Company 维护ÿ…...
微服务上下线动态感知实现的技术解析
序言 随着微服务架构的广泛应用,服务的动态管理和监控变得尤为重要。在微服务架构中,服务的上下线是一个常见的操作,如何实时感知这些变化,确保系统的稳定性和可靠性,成为了一个关键技术挑战。本文将深入探讨微服务上…...
指针与引用错题汇总
int *p[3]; // 定义一个包含 3 个指向 int 的指针的数组int a 10, b 20, c 30; p[0] &a; // p[0] 指向 a p[1] &b; // p[1] 指向 b p[2] &c; // p[2] 指向 c // 访问指针所指向的值 printf("%d %d %d\n", *p[0], *p[1], *p[2]); // 输出: 10 20 30…...
短视频账号矩阵系统源码--独立saas技术部署
短视频矩阵系统通过多账号在多个平台上发布内容,形成一种网络效应。对于抖音平台而言,技术公司需具备特定接口权限方能进行开发工作。然而,视频发布及企业号评论与回复等功能的接口权限往往难以获取。通过构建抖音账号矩阵,利用多…...
leaflet 介绍
目录 一、leaflet 官网 二、leaflet 在项目中的引用 1、在head中引入 2、在main.js中引入 leaflet目前版本是1.9.4,在leaflet插件库中,很多插件因长时间未更新,适配的是1.7版本的,在选用插件的时候要查看版本适配。 leaflet详…...
总结贴:Servlet过滤器、MVC拦截器
一:Servlet过滤器 1.1解析 Filter 即为过滤,用于请求到达Servlet之前(Request),以及再Servlet方法执行完之后返回客户端进行后处理(HttpServletResponse)。简单说就是对请求进行预处理,对响应进行后处理 在请求到达Servlet之前,可以经过多个Filt…...
鸿蒙开发:自定义一个任意位置弹出的Dialog
前言 鸿蒙开发中,一直有个问题困扰着自己,想必也困扰着大多数开发者,那就是,系统提供的dialog自定义弹窗,无法实现在任意位置进行弹出,仅限于CustomDialog和Component struct的成员变量,这就导致…...
在Windows下编译支持https的wsdl2h
下载源码 在官网下载源码 安装Openssl 下载OpenSSL并安装,安装完成后需要将OpenSSL的路径添加到环境变量中 配置VS 1、打开工程 2、因为前面安装的OpenSLL是64位的,因此需要创建一个X64的配置 打开配置管理器,然后选择新建࿰…...
PHP和GD库如何根据像素绘制图形
使用PHP和GD库,你可以根据像素绘制各种图形,比如点、线、矩形、圆形等。GD库是PHP的一个扩展,它提供了一系列用于创建和处理图像的函数。以下是一个简单的示例,展示如何使用GD库根据像素绘制图形。 安装GD库 首先,确…...
webpack(react)基本构建
文章目录 概要整体架构流程技术名词解释技术细节小结 概要 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的主要功能是将各种资源(如 JavaScript、CSS、图片等)视为模块,并将它们打包成一个或多个输出文件,以便…...
《Opencv》基础操作<1>
目录 一、Opencv简介 主要特点: 应用领域: 二、基础操作 1、模块导入 2、图片的读取和显示 (1)、读取 (2)、显示 3、 图片的保存 4、获取图像的基本属性 5、图像转灰度图 6、图像的截取 7、图…...
Oracle 11g R2 RAC 到单实例 Data Guard 搭建(RMAN备份方式)
一、配置方案 环境说明 角色主库主库备库主机名rac01rac02racdg公网IP10.10.10.14110.10.10.14310.10.10.191VIP10.10.10.14210.10.10.144-SCAN10.10.10.14010.10.10.140-INSTANCE_NAMEorcl1orcl2orclDB_NAMEorclorclorclSERVICE_NAMEorclorclorclDB_UNIQUE_NAMEorclorclorcl…...
HTTPS 加密
HTTPS 加密技术 1. HTTPS 概述 HTTPS(HyperText Transfer Protocol Secure)是 HTTP 协议的安全版本,利用 SSL/TLS 协议对通信进行加密,确保数据的机密性、完整性和身份认证。HTTPS 在保护敏感数据的传输(如登录凭证、…...
泛微e9开发 编写前端请求后端接口方法以及编写后端接口
泛微e9开发 前端请求后端接口以及后端发布接口 前端请求后端接口 前端发起get请求 fetch(/api/youpath, {method: GET, // 默认 GET 方法,可以省略headers: {Content-Type: application/json, // 通常 GET 请求无需指定 body,Content-Type 不太重要},…...
Linux —— 《线程控制》
文章目录 前言:为什么要链接pthread库?线程控制:线程创建:start_routine?传递自定义类型同一份栈空间? 线程等待:返回值与参数?创建多线程 线程终止线程分离 前言: 上一文我们学习…...
基于HTML+CSS的房地产销售网站设计与实现
摘 要 房地产销售系统,在二十年来互联网时代下有着巨大的意义,随着互联网不断的发展扩大,一个方便直 观的房地产管理系统的网站开发是多么地有意义,不仅打破了传统的线下看房,线下获取资讯,也给房地产从业…...
操作系统 | 学习笔记 | 王道 | 2.4死锁
2.4 死锁 文章目录 2.4 死锁2.4.1 死锁的概念2.4.2 死锁预防2.4.3 死锁避免2.4.4 死锁检测和解除 2.4.1 死锁的概念 死锁的定义 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象&am…...
手机网站建设软件有哪些/cps广告联盟
ps:个人学习笔记,视频链接https://www.bilibili.com/video/BV1Y7411d7Ys 参考链接https://blog.csdn.net/bit452/category_10569531.html 文章目录相关知识点线性模型梯度下降1.梯度下降2.随机梯度下降反向传播1.两层神经网络示例2.反向传播计算损失函数对权重偏导P…...
网站如何做银联在线支付/铁岭网站seo
今天搞树莓派,遇到/sys这个目录,不太清楚,先对/sys目录知识进行一个整理 首先,对 /sys目录下的各个子目录进行具体说明: /sys下的子目录 内容 /sys/devices 该目录下是全局设备结构体系,包含所有…...
国际网站建设招标/合肥seo建站
JavaScript学习笔记(十)——学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^转载于:https://www.cnblogs.com/springmvc-hibernate/archive/2010/08/06/2484248.html...
南京网站制作报价/网络广告推广方式
深度学习编译器综合研究报告 本文主要参考了: The Deep Learning Compiler: A Comprehensive Survey 本文主要回答以下几个问题: 为什么需要dl compiler当下流行的dl framwwork有哪些深度学习硬件有三类 都有哪些dl compiler的关键组件和技术流行的dl c…...
招聘网站源码下载/app推广兼职是诈骗吗
ps命令时显示当前系统进程信息的命令,与top不同的是,ps返回的事当前活动进程的信息清单。所以,如果想要得到动态更新显示的信息,使用top命令。 默认ps: 选定所有有效进程(EUID)转载于:https://w…...
网络公司排名及分析/河南seo
Git 的标签管理。跟大多数的 VCS 工具一样,git 也有在历史状态的关键点“贴标签”的功能,一般人们用这个功能来标记发布点(例如’v1.0′)。 列出git中现有标签 要想列出git中现有的所有标签,输入’git tag’命令运行即…...