[PWN][基础篇]保护函数和溢出实例

一、常见的保护

1、CANARY(栈保护)

栈溢出保护是一种缓冲区溢攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行,当启动栈保护后,函数开始执行的时候会显往栈里插入cookie的信息,当函数真正返回的时候会验证cookie信息是否合法,如何不合法就停止程序运行。攻击者在覆盖返回地址的时候往往会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中的cookie信息成为canary。

2、NX(DEP)

NX是不可执行的意思,nx(dep)的原理就是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意代码

3、PIE(ASLR)

一般情况下NX和地址空间分布随机化(aslr)是会同时工作
内存地址随机化机制,有三种情况
0-表示关闭进程地址空间随机化
1-表示将mmap的机制,stack和vdso页面随机化
2-表示在1的基础上增加栈(heap)的随机化
可以防范基于Ret21bc方式的针对dep的攻击。aslr和dep配合使用,可以有效阻止攻击者在堆栈上运行恶意代码

二、神奇的小知识

1、如何检查文件的保护情况

checksec 文件名(要以root权限执行)
在这里插入图片描述

2、编译时如何关闭这些保护呢

gcc -no-pie -fno-stack-protector -Z execstack -m32 -o read read.c

3、查看程序使用了哪些函数

objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具
-j hello
仅仅显示指定名称为hello的section的信息
-t 显示文件的符号表入口
objdump -t -j .text hello
查看hello程序的.text段有哪些函数

在这里插入图片描述

三、实例教学

在这里插入图片描述
编译指令等请参照上一篇博客
我的上一篇文章

后续的操作如下:
在这里插入图片描述

在这里插入图片描述

这里我们分析一下,首先是sub esp,0x24,然后sub eso,0x4,所以在esp上方有0x28的空间,我们的目的是执行exploit的函数,所以我们就要覆盖到ret指令。

下面是我们的exp,我是用的是python来写

在这里插入图片描述
首先要导入pwn包,第二步我们要获得进程,也就是read程序了,再写偏移offset,也就是0x28+0x4,
,然后写payload,我们要覆盖,这里我用a来覆盖,offset次,再加上我们的返回地址,也就是在disass exploit中我们push ebp的地址,p32()是告诉电脑,这是个32位地址如下图:
在这里插入图片描述字符a将0x28覆盖了,同时也覆盖了0x4(ebp),多出来的就将覆盖ret了,也就是上图中红框的地址。
然后我们写payload,使用sendline函数,发送内容是我们的payload。
最后我们获取一下运行环境,也就是p.interactive()

写好exp之后,可能没有权限,这个时候要提权,也就是chmod 777 exp.py,然后执行即可,结果如下图:
在这里插入图片描述
出现了$符号,说明我们已经获得了root权限了!

希望大家可以有所收获!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鹏华李

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

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

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

打赏作者

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

抵扣说明:

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

余额充值