【PWN】学习笔记(三)【返回导向编程】(下)

课程

课程链接:https://www.bilibili.com/video/BV1854y1y7Ro/?vd_source=7b06bd7a9dd90c45c5c9c44d12e7b4e6
课程附件: https://pan.baidu.com/s/1vRCd4bMkqnqqY1nT2uhSYw 提取码: 5rx6

回顾

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ret2libc在这里插入图片描述

.got.plt中存放的是代码的地址
在这里插入图片描述
nop滑梯,什么都不做执行下一个指令
在这里插入图片描述
一路nop到shellcode,只要指向nop区域即可;使得地址随机化变得低效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

做题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

即使程序中没有call system指令,同时也不知道system libc的真实地址;但是我们一定会有system@plt,只要这个程序在任何地方引用过system这个函数
虽然secure函数中system(“shell?!”)没有任何用处,但是system()被放在了plt;如果连这一项都没有就需要在攻击之前泄露大量的信息,把真实地址泄露出来
在这里插入图片描述
在这里插入图片描述
还需要加上溢出ebp的四个字节,所以这里又是112
在这里插入图片描述
这里的padding 就是112个垃圾数据
在这里插入图片描述
可以简化成这个形式,都不需要exit了,不需要老老实实退出程序
在这里插入图片描述
逆向题入门也可以这样做
在这里插入图片描述

ret2libc2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
找不到/bin/sh
在这里插入图片描述
考虑写入进bss
在这里插入图片描述
在这里插入图片描述

值得注意的是这里调用了gets函数做了两次交互,而不是像之前的题目只发过去payload完事,最后一次交互需要输入/bin/sh
在这里插入图片描述
elf.symbols是程序编译链接时的粘合剂,每一个函数名和变量名都指代了自己存在的位置,在编译时对应名称的符号写入对应的内容
buf2属于变量名也是一个符号
在这里插入图片描述
这里老师是直接再输入了一次,我是在交互时输入
在这里插入图片描述

ret2libc3

在这里插入图片描述
在这里插入图片描述
先把四行字符串放在stdout缓冲区中,使用fflush将缓冲区清空再一口气把这些字符串输出在屏幕上
在这里插入图片描述
考虑到实际题目的代码量,这里可以按n修改这个这个变量的名称
找栈溢出的技巧:在每一个能输入的地方输入超长的数据,一旦崩溃就可能存在栈溢出漏洞
在这里插入图片描述
这里随机输入一个地址程序崩溃,但是这并不是栈溢出的崩溃,这里是地址无效导致的,所以需要找一个有效地址
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在继续输入超长数据时出问题了
在这里插入图片描述
在这里插入图片描述
main函数中用于保存局部变量的区域
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先调用子函数为其创建栈帧,将相关信息压栈
在这里插入图片描述
dest的空间是0x38,src的大小的0x100,将其通过strcpy(dest, src);覆盖会导致导致栈溢出
在这里插入图片描述
显然无法完成ret2systemcall
接下来就是ret2libc
plt是代码的填写者,got是代码的保存者
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中f7开头都是libc中的地址,80开头的都是elf本身的地址
在这里插入图片描述
这些f7开头的地址表示这些函数被调用过了,在libc中的地址已被填写,由此我们可以泄露这里面的地址以获取libc中的地址;这里我们选取puts,因为其地址位置高,所以我们在read的时候直接把puts对应的gots表中的起始地址传入
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
值得注意的是我们还有libc的拷贝,只要我们知道偏移量和其中一个值,system的值就可以推导出来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本地还是没打通

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粥粥粥少女的拧发条鸟

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值