ret2libc攻击方式:针对动态链接(Dynamic linking) 编译的程序,静态链接一般利用简单ROP能构造出payload进行攻击(详见ROP博客)。一般情况下无法在程序中直接找到system、execve这一类系统函数,动态链接过程中动态连接器会将程序所有需要的链接库加载到内存进程空间,而libc.so是最基本的一个。

libc.so 是 linux 下 C 语言库中的运行库glibc 动态链接版,里面包含了大量可利用的函数,ret2libc的原理便是将 libc.so在内存中我们所需要的函数返回地址获取,进而取得控制权。通常是利用system("/bin/sh")打开shell,简单可以判定为两个步骤:

1.system地址获取

2."/bin/sh"字符串地址获取

现在需要了解动态链接的过程:

1) 重点理解PLT以及got (Global offset Table)表:

【pwn】CTF学习:4、PLT表与GOT表 | 延迟绑定机制_哔哩哔哩_bilibili

调用动态链接函数时,如printf函数时,先去plt表和got表寻找printf函数的真实地址。plt表指向got表中的地址,got表指向glibc中的地址。

即第一次调用:plt->got->plt->公共plt->动态连接器_dl_runtime_resolve->锁定函数地址

第二次:plt->got->直接锁定函数地址,此时got表已记录函数地址

got表:包含函数的真实地址,包含libc函数的基址,用于泄露地址

plt表:不用知道libc函数真实地址,使用plt地址就可以调用函数

libc就是linux下的c函数库:
libc中包含着各种常用的函数,在程序执行时才被加载到内存中
libc是一定可以执行的,跳转到libc中函数绕过NX保护

攻击步骤:

1、泄露任意一个函数的真实地址:只有被执行过的函数才能获取地址
2、获取libc的版本
3、根据偏移获取shell和sh的位置:a、求libc的基地址(函数动态地址-函数偏移量)b、求其他函数地址(基地址+函数偏移量)
4、执行程序获取shell

实例代码:

1)源码中不包含system及sh等敏感信息,推测是泄露libc基地址来进行exp

2)当执行vuln函数后,会生成write的got表地址,通过got的地址可以寻址到write函数的真实地址(里面保存的数值就是write函数的真实地址),同时在第一次read时可构建payload获取write@got,同时将vuln地址写入read中进行二次调用,达到第二次payload机会。最后再利用第一次的got地址进行获取system和/bin/sh的地址进行二次payload构建

代码构建过程:

首先确认linux  调用的so文件(远程一般会给相应so文件,没有的话用libsearch寻址):

构造第一次payload:

发送后获取write_addr:

此时write的真实地址已找出,便可以计算出libc的真实地址,基于此真实地址便可以进行第二次payload构造(忽视打错了):

至此完成payload提权

ret2libc攻击原理+实例分析相关推荐

  1. java 递归原理_Java中递归原理实例分析

    本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...

  2. mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了

    前言 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询 ...

  3. php csrf攻击教程,HTTP路由实例教程(三)—— CSRF攻击原理及其防护

    HTTP路由实例教程(三)-- CSRF攻击原理及其防护 由 学院君 创建于5年前, 最后更新于 11个月前 版本号 #3 77487 views 92 likes 0 collects 1.什么是C ...

  4. 缓冲区溢出攻击原理分析

    <缓冲区溢出攻击实践>以实践者角度介绍了初级缓冲区溢出攻击方法,本文从原理上对该方法做原理性介绍. 函数帧结构 现在高级语言C(或者C++),在函数开头的几指令要建立好函数帧结构,而函数返 ...

  5. Android10.0 Binder通信原理(四)-Native-C\C++实例分析

    摘要:本节主要来讲解Android10.0 Binder的Native层实例流程 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...

  6. Android Touch事件原理加实例分析

    Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...

  7. JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用

    http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/index.html 一.系统架构 本文以一个实际的产品为例,来说明 JPEG 在其中的应用. ...

  8. 索引原理及项目中如何使用索引实例分析

    一.索引原理: 为认识索引工作原理,首先有必要对数据表的基本结构作一次全面的复习. 当一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机 ...

  9. python实现dos攻击_dos攻击原理及攻击实例

    DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带宽攻击和连通性攻击. Do ...

最新文章

  1. linux关于程序的user,c – “get_user_pages”如何工作(对于linux驱动程序)
  2. 选项卡 都是显示在页面底部
  3. 面试题——轻松搞定面试中的红黑树问题
  4. PMCAFF产品众测 | 对话随手攒CEO聊聊产品的设计、推广和改进
  5. 数据库规范设计说明书(参考阿里开发规范)
  6. 深度学习attention原理_深度原理学习–Redis集群
  7. PyTorch 1.0 中文官方教程:Torchvision 模型微调
  8. [转载] python中append函数的用法
  9. DEDECMS 另类***
  10. vs2008 sp1安装时候系统盘空间不够问题,解决方式
  11. 【工程源码】CYUSB3014芯片使用EEPROM无法下载固件说明
  12. 少儿编程学习(循环及条件语句)
  13. 网线的水晶头做法568a,568b
  14. Ubuntu 网络管理
  15. H.264及编解码调试
  16. 好不容易进了洞房,解不开新娘的衣服,新郎一怒走天涯,人间惨剧啊!
  17. 美创科技与星环科技大数据平台完成兼容互认证!
  18. 百度云心里的声音加长版
  19. 【SSM学习】04-Maven高级
  20. ubuntu配置VLAN的方法

热门文章

  1. android studio手机连接本地服务器测试
  2. 区块链的去中心化账本有和意义?为什么要哈希运算?如何保证数据不可篡改?
  3. STM32 OSPI四线读取 SST26VF064B ID
  4. 仿今日头条 时间段选择器组件封装
  5. 有哪些能玩上一天的网站?
  6. 古代文论真可谓是我的一处死穴
  7. Linux 音频设备驱动(宋宝华书)
  8. 微软学者奖学金2020名单出炉!中国高校八人上榜,清华表现最为亮眼
  9. 彩虹世界未能连接到服务器,彩虹世界免费资源-彩虹世界新版基遇免费资源官网链接 v1.0预约_手机乐园...
  10. WIP Discrete Job or EAM Work Order remain stuck in Pending Close Status (文档 ID 158674.1)