PWN基础7:Rop-Ret2Text介绍 及 插件配置

ROP概述

  • Return-oriented Programming,面向返回的编程,是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码
  • ROP的核心思想:攻击者扫描已有的动态链接库和可执行文件,提取出可以利用的指令片段(gadget),这些指令片段均以ret指令结尾,即用ret指令实现指令片段执行流的衔接。
  • ROP攻击是利用以ret结尾的程序片段,操作这些栈相关寄存器,控制程序的流程,执行相应的gadget,实施攻击者预设目标
  • ROP不同于return-to-libc攻击之处在于,ROP攻击以ret指令结尾的函数代码片段,而不是整个函数本身去完成预定的操作
  • 广义上说,return-to-libc攻击是ROP的一种特例
  • 最初ROP攻击实现在X86体系结构下,随后扩展到各种体系结构
  • ROP攻击的程序主要使用栈溢出的漏洞,实现程序控制流的劫持。因此,栈溢出漏洞的防护是阻挡ROP攻击最根源性的方法。如果解决了栈溢出的问题,ROP攻击将会在很大程度上受到抑制

基础知识

  • BSS段:通常是指用来存放程序中未初始化的全局变量的一块内存区域,BSS段属于静态内存分配。在溢出时EIP的值可以是BSS段的地址
  • DATA段:数据段,通常是指用来存放程序中已初始化的全局变量的一块内存区域,属于静态内存分配
  • TEXT段:代码段,通常是指用来存放程序执行代码的一块内存区域
  • RODATA段:存放C中的字符串和#define定义的常量
  • 如何理解ret2text即执行程序中已有代码,如程序中写有system等系统的调用函数,就可以利用控制已有的gadgets(以ret结尾的指令序列,通过这些指令序列,可以修改某些地址的内容)控制system函数。说白了,就是控制程序执行本身已有的代码(.text),使EIP指向具有system("/bin/sh")的代码段
  • 快速定位栈溢出:IDA F5大法
  • 使用pwndbg快速定位溢出偏移:关于cyclic的使用。在之前的文章中有使用,如果不熟练请参考文章,https://blog.csdn.net/prettyX/article/details/107129908

关于peda的使用学习

1、安装gdb-peda

在安装时,注意一点,是以哪个用户安装的,用户不同,安装的文件夹也是不同的

git clone https://gitee.com/takaobsid/peda.git ~/peda          //下载
echo "source ~/peda/peda.py" >> ~/.gdbinit                     //安装

2、安装好后,再运行gdb,会如下图所示

PWN基础7:Rop-Ret2Text介绍 及 插件配置_第1张图片

3、切换pwndbg、peda

首先,查看下面的文件

vim ~/.gdbinit

安装好peda后,可能需要手动写入下面的路径

那么,想要使用pwndbg、peda中其中一个,则把另外一个注释掉就好了

如果两个都注释掉,就是gdb本身

gdb下的两个插件:pwndbg和peda,两个不兼容

pwndbg在调试堆得数据结构时更方便

peda在查找字符串等功能时更方便

快速选择插件脚本,请参考这篇文章:https://blog.csdn.net/aptx4869_li/article/details/81566541

4、在peda插件下,快速定位溢出点,则使用pattern指令,使用方法和cyclic基本一致

这节课就到这里

文章中难免有疏漏,大家多批评指正

加油,下节见


参考

Roger师傅的课程

https://baike.baidu.com/item/ROP%E7%B3%BB%E7%BB%9F%E6%94%BB%E5%87%BB/16230646?fr=aladdin

https://blog.csdn.net/kevin66654/article/details/86773517

你可能感兴趣的:(PWN)