BUUCTF PWN wp--warmup_csaw_2016
第一步 先checksec一下(没有启用NX保护、PIE、完整的RELRO和栈保护,还有具有RWX权限的内存段。)
分析一下这个文件的保护机制:
- Arch: amd64-64-little
- 这表示该可执行文件是为64位的AMD64架构编译的,并且使用的是小端字节序(little-endian)。
- RELRO: Partial RELRO
- RELRO(Relocation Read-Only)是一种安全特性,旨在减少攻击者修改程序运行时的全局偏移表(GOT)的能力。有两种RELRO设置:
- Full RELRO:将GOT置于只读段,从而在程序启动时就完全确定,并且在运行时不可更改。
- Partial RELRO:只将部分GOT置于只读段,这意味着攻击者可能仍然有能力在运行时修改GOT,尽管这比没有任何RELRO保护要困难。
- Partial RELRO表示该程序没有实现完全的RELRO保护,因此存在一定的风险。
- RELRO(Relocation Read-Only)是一种安全特性,旨在减少攻击者修改程序运行时的全局偏移表(GOT)的能力。有两种RELRO设置:
- Stack: No canary found
- 栈保护可以通过栈溢出保护(Stack Smashing Protector,SSP)实现,通常使用一个称为“canary”的随机值来检测栈溢出。如果攻击者试图通过栈溢出覆盖返回地址,canary值会被改变,程序可以检测到这种改变并终止。
- No canary found表示该程序没有启用栈保护,这使得它更容易受到栈溢出攻击。
- NX: NX disabled
- NX(No-eXecute)是一种硬件支持的功能,它将内存区域标记为不可执行,从而防止了在数据段(如堆栈或堆)中执行代码。
- NX disabled表示该程序没有启用NX保护,这允许攻击者在程序的堆栈或堆上执行代码,增加了受到攻击的风险。
- PIE: No PIE (0x400000)
- PIE(Position-Independent Executable)是一种安全特性,它使得程序的代码可以在内存中的任意位置加载,这样每次程序运行时地址空间布局都是随机的,增加了利用内存损坏漏洞的难度。
- No PIE表示该程序不是位置独立的,它总是在固定的地址(在这个例子中是0x400000)加载,这使得利用某些类型的漏洞更容易。
- RWX: Has RWX segments
- RWX表示内存段同时具有读(Read)、写(Write)和执行(eXecute)权限。通常,内存段应该只有读和执行权限,或者只有读和写权限,而不应该同时具有所有三个权限。
- Has RWX segments表示该程序有内存段同时具有读、写和执行权限,这是不安全的,因为它允许攻击者修改内存中的代码并执行它。
第二步 拖入ida,发现关键字flag,双击后按ctrl + x
发现该语句在sub_40060D中
进入该函数,该函数就是一个简单的system()函数,这个函数的作用就是输出flag的文件信息
与之前一题相似:触发后门函数sub_40060(),函数地址为0x40060D
第三步 进入该数组
以下是对这两个特殊字段 “r” 和 “s” 的解释:
- r:代表返回地址(return address)。当一个函数被调用时,调用者的返回地址(即调用指令之后的地址)会被自动推入栈中。这个返回地址在函数执行完毕后用于控制流返回到调用点。
- s:代表保存的寄存器(saved registers)。在函数开始执行时,如果函数要使用某些寄存器,并且这些寄存器在调用者中之后还需要使用,那么这些寄存器的值需要在栈上保存,以便在函数返回前恢复。
解释一下最后var部分:
- var_40 db 64 dup(?):这行代码声明了一个名为var_40的局部变量,它是一个字节数组,大小为64字节。db表示声明字节(double byte),64 dup(?)表示重复64次,每次分配一个未初始化的字节(用?表示)。这个数组在栈帧中的位置相对于基指针ebp是偏移量-40的地方(如果ebp指向栈帧的底部),这通常意味着它是函数中的一个局部变量。
- s db 8 dup(?):这行代码声明了一个名为s的局部变量,它是一个字节数组,大小为8字节。这个数组用于保存寄存器的值,正如之前提到的Saved regs: 8,这通常用于保存两个32位寄存器的值。
- r db 8 dup(?):这行代码声明了一个名为r的局部变量,它也是一个字节数组,大小为8字节。这个数组用于保存返回地址,尽管在大多数汇编语言中,返回地址是自动保存在栈上的,而不是显式声明一个变量来保存。这里的声明可能是为了示例或说明目的,实际上并不常见。(就我个人理解这个8应该不算在内,要算的的话只算前面那两个32位寄存器的。仅为个人理解,如有错误,请指正。)
如此看的话填充数据大小为64+8(var_40加上两个32位寄存器),72个。
第五步 编写脚本
成功得到flag
相关文章:

BUUCTF PWN wp--warmup_csaw_2016
第一步 先checksec一下(没有启用NX保护、PIE、完整的RELRO和栈保护,还有具有RWX权限的内存段。) 分析一下这个文件的保护机制: Arch: amd64-64-little 这表示该可执行文件是为64位的AMD64架构编译的,并且使用的是小…...

dockerfile搭建部署LNMP
目录 实验 架构: 实验步骤: nginx部分 mysql部分 php部分 实验 实验:用dockerfile搭建LNMP论坛 架构: 一台docker虚拟机 docker部署nginx 1.22 指定ip地址172.111.0.10 docker部署mysql 8.0.30 指定ip地址…...

Rust : 数据分析利器polars用法
Polars虽牛刀小试,就显博大精深,在数据分析上,未来有重要一席。 下面主要列举一些常见用法。 一、toml 需要说明的是,在Rust中,不少的功能都需要对应features引入设置,这些需要特别注意,否则编译…...

Qt第一课
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...

论“graphics.h”库,easyx
前言 别人十步我则百,别人百步我则千 你是否有这样的想法,把图片到入进c里,亦或者能实时根据你发出的信息而做出回应的程序,graphics.h这个库完美满足了你的需求,那今天作者就给大家介绍一下这个库,并做一些…...

如何在寂静中用电脑找回失踪的手机?远程控制了解一下
经过一番努力,我终于成功地将孩子哄睡了。夜深人静,好不容易有了一点自己的时间,就想刷手机放松放松,顺便看看有没有重要信息。但刚才专心哄孩子去了,一时就忘记哄孩子之前,顺手把手机放哪里去了。 但找过手…...

Android 实现动态换行显示的 TextView 列表
在开发 Android 应用程序时,我们经常需要在标题栏中显示多个 TextView,而这些 TextView 的内容长度可能不一致。如果一行内容过长,我们希望它们能自动换行;如果一行占不满屏幕宽度,则保持在一行内。本文将带我们一步步…...

Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间
题目: 题解: type SummaryRanges struct {*redblacktree.Tree }func Constructor() SummaryRanges {return SummaryRanges{redblacktree.NewWithIntComparator()} }func (ranges *SummaryRanges) AddNum(val int) {// 找到 l0 最大的且满足 l0 < val…...

Ubuntu安装mysql 以及远程连接mysql Windows—适合初学者的讲解(详细)
目录 准备工作 一.Xshell中操作 (1)在虚拟机中安装mysql (2)连接Windows数据库 (3)进入linux数据库。 (4)修改mysql配置文件 二.Windows命令窗口操作 需要软件虚拟机,Xsh…...

【数学建模】MATLAB快速入门
文章目录 1. MATLAB界面与基本操作1.1 MATLAB的基本操作 2. MATLAB字符串和文本2.1 string变量2.2 char变量 3. MATLAB的矩阵运算 1. MATLAB界面与基本操作 初始界面: 刚开始的界面只要一个命令行窗口,为了使编辑界面出现我们需要新建一个文件ÿ…...

【ubuntu24.04】k8s 部署5:配置calico 镜像拉取
kubeadm - 中国大陆版建议:初始化Kubeadm –apiserver-advertise-address 这个地址是本地用于和其他节点通信的IP地址 –pod-network-cidr pod network 地址空间 sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-add…...

Elasticsearch 的数据备份与恢复
在生产环境中,数据的安全性和可靠性至关重要。对于基于 Elasticsearch 的系统而言,数据备份与恢复是确保数据完整性、应对灾难恢复的关键操作。本文将详细介绍 Elasticsearch 中如何进行数据备份与恢复,帮助管理员构建一个可靠的数据保护策略…...

Ps:首选项 - 暂存盘
Ps菜单:编辑/首选项 Edit/Preferences 快捷键:Ctrl K Photoshop 首选项中的“暂存盘” Scratch Disks选项卡通过合理配置和管理暂存盘,可以显著提高 Photoshop 的运行性能,特别是在处理复杂的设计项目或大型图像文件时。选择合适…...

力扣217题详解:存在重复元素的多种解法与复杂度分析
在本篇文章中,我们将详细解读力扣第217题“存在重复元素”。通过学习本篇文章,读者将掌握如何使用多种方法来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释,以便于理解。 问题描述 力扣第217…...

享元模式:轻量级对象共享,高效利用内存
享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少对象数量、降低内存消耗和提高系统性能。它通过共享相似对象的内部状态,减少重复创建的对象。下面将具体介绍享元模式的各个方面: 组成 抽象享元࿰…...

人工智能-自然语言处理(NLP)
人工智能-自然语言处理(NLP) 1. NLP的基础理论1.1 语言模型(Language Models)1.1.1 N-gram模型1.1.2 词嵌入(Word Embeddings)1.1.2.1 词袋模型(Bag of Words, BoW)1.1.2.2 TF-IDF&a…...

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(三)---创建自定义激光雷达Componet组件
前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博…...

C++ 设计模式——策略模式
策略模式 策略模式主要组成部分例一:逐步重构并引入策略模式第一步:初始实现第二步:提取共性并实现策略接口第三步:实现具体策略类第四步:实现上下文类策略模式 UML 图策略模式的 UML 图解析 例二:逐步重构…...

【书生大模型实战营(暑假场)闯关材料】基础岛:第3关 浦语提示词工程实践
1.配置环境时遇到的问题 注意要使用terminal,而不是jupyter。 否则退出TMUX会话时,会出问题。 退出TMUX会话命令如下: ctrlB D # 先按CTRLB 随后按D另外一个是,端口转发命令 ssh -p XXXX rootssh.intern-ai.org.cn -CNg -L …...

C++ | Leetcode C++题解之第350题两个数组的交集II
题目: 题解: class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int length1 nums1.size(), length2 nums2…...

遗传算法原理与实战(python、matlab)
遗传算法 1.什么是遗传算法 遗传算法(Genetic Algorithm,简称GA)是一种基于生物进化论和遗传学原理的全局优化搜索算法。它通过模拟自然界中生物种群的遗传机制和进化过程来解决复杂问题,如函数优化、组合优化、机器学习等。遗传…...

《黑神话:悟空》媒体评分解禁 M站均分82
《黑神话:悟空》媒体评分现已解禁,截止发稿时,M站共有43家媒体评测,均分为82分。 部分媒体评测: God is a Geek 100: 毫无疑问,《黑神话:悟空》是今年最好的动作游戏之一ÿ…...

安卓中携程和线程的区别。携程是指什么?
在安卓和其他编程环境中,协程(Coroutine)和线程(Thread)是两种不同的并发处理机制。它们各自有独特的特点和适用场景: 线程(Thread): 线程是操作系统能够进行运算调度的最…...

部署flannel网络(master服务器执行)遇到错误
出现错误 “The connection to the server 192.168.0.23:6443 was refused - did you specify the right host or port?” 的原因通常是因为 Kubernetes API 服务器未能启动或无法访问。以下是一些可能的原因和解决方案: 解决方案 确认 Kubernetes API 服务器的状…...

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。
阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了…...

使用托管竞价实例在Amazon SageMaker上运行机器学习训练
这是本系列文章的第二篇,旨在通过动手实践,帮助大家学习亚马逊云科技的生成式AI相关技能。通过这些文章,大家将掌握如何利用亚马逊云科技的各类服务来应用AI技术。 那么让我们开始今天的内容吧! 介绍 什么是Amazon SageMaker …...

AIoT智能物联网平台定义
随着科技的飞速发展,我们正步入一个由智能设备和互联网络构成的新时代。AIoT,即人工智能物联网(Artificial Intelligence of Things),是这个时代的标志性产物。本文旨在探讨AIoT智能物联网平台的定义、核心组件、应用场…...

微服务设计原则——高性能:存储设计
文章目录 1.读写分离2.分库分表3.动静分离4.冷热分离5.重写轻读6.数据异构参考文献 任何一个系统,从单机到分布式,从前端到后台,功能和逻辑各不相同,但干的只有两件事:读和写。而每个系统的业务特性可能都不一样&#…...

hbase-manager图形化界面的安装与配置
相关资料下载 夸克网盘分享 1、上传项目到linux上 解压: 切换到conf目录下:/opt/installs/hbase-manager-2.0.8-hbase-2.x/conf/ 2、修改数据库配置信息 application-druid.yml 3、创建hbase-manager数据库(注意字符集编码),导入数据库脚本…...

STM32之继电器与震动传感器的使用,实现震动灯
在STM32的外设应用中,继电器扮演着重要的角色。继电器作为一种电控制器件,其主要作用是通过小电流控制大电流的通断,实现电路的自动控制和保护。具体来说,继电器在STM32外设中的作用可以归纳为以下几点: 电路隔离与保…...