第一个PWN 栈溢出简单题

先拿到题目 ret2text
拿到题目,先检查file文件类型,然后丢入ida进行分析
找到主函数,发现并没有什么漏洞,但有个vulnerable()函数
在这里插入图片描述
查看vulnerable()函数,发现漏洞,竟然发现存在gets()函数,那必然可以进行栈溢出
在这里插入图片描述
并且发现有个后面函数,get_shell(),则目标明确,就是通过栈溢出调用get_shell()获取权限即可
在这里插入图片描述
则目标是构造溢出payload,为了确定溢出填充字符,进行gdb调试:gdb:ret2text
开始调试,在main函数那打断点

gdb 小知识:
(breakpoints) b 函数名/函数入口地址: 打断点
(next) n:下一步
(run) r:运行
(step in) s:进入一个函数,不然会直接运行函数返回结果
stack num:显示附近num项的地址情况

调试进入vulnerable()函数,并运行gets函数,输入正常值,再输入stack 24 查看栈情况的情况在这里插入图片描述

第一根红线表示栈顶,第二根红线表示底端,黄线位置代表的值则表示要返回的上一个函数调用点的位置,我们的目标就是改变黄色地址空间的值,使得其转向get_shell()函数,这边要解决两个问题

  1. 怎么构造payload,要覆盖多少字节数据
  2. 找到get_shell()入口

针对第一个问题:如上图我们正常输入ssds时,数据被存入0xffffd118地址,我们先覆盖到ebp指向的地址,中间一共16字节,然后ebp地址也要覆盖,这需要4个字节,最后是get_shell地址
打开ida,找到get_shell函数,发现入口地址为:0x8048522
在这里插入图片描述
payload构造完毕,开始写程序进行攻击

from pwn import *
io = process("./ret2text")
payload = b'A'*16 + b'B'*4 + p64(0x8048522)
io.send(payload)
io.interactive()

成功!!!
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值