前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[PWN][基础篇]保护函数和溢出实例

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

作者头像
李鹏华
发布2024-03-12 15:04:07
1880
发布2024-03-12 15:04:07
举报
文章被收录于专栏:网络信息安全
[PWN][基础篇]保护函数和溢出实例
  • 一、常见的保护
    • 1、CANARY(栈保护)
    • 2、NX(DEP)
    • 3、PIE(ASLR)
  • 二、神奇的小知识
    • 1、如何检查文件的保护情况
    • 2、编译时如何关闭这些保护呢
    • 3、查看程序使用了哪些函数
  • 三、实例教学

一、常见的保护

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权限了!

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [PWN][基础篇]保护函数和溢出实例
  • 一、常见的保护
    • 1、CANARY(栈保护)
      • 2、NX(DEP)
        • 3、PIE(ASLR)
        • 二、神奇的小知识
          • 1、如何检查文件的保护情况
            • 2、编译时如何关闭这些保护呢
              • 3、查看程序使用了哪些函数
              • 三、实例教学
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档