首页 > 其他分享 >ROP学习

ROP学习

时间:2024-08-13 22:16:34浏览次数:15  
标签:bin ropper gadget system 学习 地址 sh ROP

基本知识

Return Oriented Programming面向返回的编程。
通过找各种小片段gadget,去实现类似(最简单的)直接在栈上运行恶意代码的方法。

  1. 程序存在溢出
  2. 合适的gadget

ROPgadget,ropper.

ropper

ropper -f 程序 --search "pop|ret"

rop种类

ret2shellcode

最简单的,当NX关着的时候(也就是可执行栈)。直接把返回地址跳到栈上缓冲区buf(用gets写入的恶意代码)

ret2text

差不多,当NX开着的时候,如果text段里居然刚好有你想要的功能,就把返回地址跳到那里。

ret2syscall

还是很巧妙的,通过栈溢出将栈上面排序好想要赋给寄存器的值,然后找到pop_eax_ret之类的gadget,就能完成对应的功能。

ret2libc

  1. 找到libc中system的地址
  2. 找/bin/sh字符串地址

要注意的是32和64位系统差别:64位是把参数都放入rdi,rsi,rdx,rcx,r8,r9,然后第七个才会放入栈中。

如果直接有/bin/sh和system地址,就直接用

比如说32位放置的时候,要注意参数和system中间有4字节的返回地址。

system给plt地址也是可以的,gdb能看plt地址。

如果没有,就自己构建

  1. 通过任意一条libc函数第二次执行(第一次执行时got表无内容,第二次执行才能找到函数地址)(将payload返回地址设置为main函数即可循环)
  2. 然后通过该函数计算偏移量,因为动态库每次加载位置不一样,但是相对偏移是一样的。
  3. 用同样的方法,计算出/bin/sh的偏移量。
  4. 然后就回到了上面的第一种方法,通过设置栈顶顺序实现调用system并且给其传参。

ret2dl

return to dl_runtime_resolve
该函数简易原型为:_dl_runtime_resolve(*link_map,reloc_index)

标签:bin,ropper,gadget,system,学习,地址,sh,ROP
From: https://www.cnblogs.com/muyiGin/p/18357808

相关文章

  • MySQL学习[4] ——MySQL锁
    四、MySQL锁4.1MySQL有哪些锁?4.1.1全局锁全局锁就是**对整个数据库实例加锁,主要用于全库逻辑备份**等场景。flushtableswithreadlock#加全局锁unlocktables#解锁加上全局(读)锁后,整个数据库都是只读状态。若数据库的数据较多,导致整个处理流程较慢,数据库......
  • 51单片机学习
    静态数码管显示unsignedcharNixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};voidNixie(unsignedcharLocation,Number){   switch(Location)   {      case1:P2_4=1;P2_3=1;P2_2=1;break;      case2:P2_4=1;P2_3=1;......
  • 51单片机学习
    1.1控制一个灯亮voidmain(){   P2=0xFE;}1.2控制一个灯闪烁voidDelay500ms()      //@12.000MHz{   unsignedchari,j,k;   _nop_();   i=4;   j=205;   k=187;   do   {      do      {......
  • Avnet ZUBoard 1CG开发板上手—深度学习新选择
    AvnetZUBoard1CG开发板上手—深度学习新选择摘要本文主要介绍了AvnetZUBoard1CG开发板的特性、架构、硬件单元等概念,并对如何使用以太网接口和串口连接开发板进行基本介绍,同时辅以两个应用例程演示其功能。原文链接:FreakStudio的博客往期推荐:学嵌入式的你,还不会面向......
  • UEFI Shell 的基本操作和应用场景,适合初学者了解和入门 UEFI Shell 的使用。 UEFI She
    UEFIShell是一种提供命令行接口的环境,用于与UEFI固件进行交互。UEFI(统一可扩展固件接口)是计算机启动过程中的一种固件接口,替代了传统的BIOS。UEFIShell提供了一种方式,让用户在启动操作系统之前进行系统管理和配置。主要特点命令行界面:UEFIShell提供一个类似于操作......
  • 导数学习笔记
    或许看起来和物理很有关系?变化率平均速度定义物体的位移与所用时间的比值,通常指物体在某一时间段内的速度,若物体的位移与所用时间的关系式是\(s=f(t)\),函数\(f(t)\)在\(t_0\)与\(t_0+\Deltat\)之间的平均速度是\(\frac{f(t_0+\Deltat)-f(t_0)}{\Deltat}\)。瞬时速......
  • Java中类与对象的学习下
    Java中类与对象的学习下对象的创建和使用创建对象语法:类名对象名=new类名()使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)//这是我们定义的Person类classPerson{**上一个代码块的内容;**}//具体使用publicclassPersonTest{publicstati......
  • 计算机视觉1:cv2模块函数学习
    cv2模块函数学习importcv2ascv (下文同一用cv)1.cv.imread()cv.imread(filename[,flags]) -> retval其中,参数filename表示要读取得图像得文件名,flags表示读取模式,取值如下:flags=2,表示载入的图像深度为16位或者32位,就返回对应深度的图像,否者转换为8位图像再返......
  • 计算机视觉2:NumPy模块函数学习
    NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含一个强大的N维数组对象ndarray、广播功能函数、整合C/C++/Fortran代码的工具和线性代数、傅里叶变换、随机数生成等功能。将NumPy包引入,没有的话需要先安装。importnumpyasnp一、ndarray对象NumPy最重要的一个......
  • Java线程池学习
    Java线程池学习一、线程池基础1定义2优点3基本组件二、Java线程池实现1Executor接口2ExecutorService接口3ThreadPoolExecutor类3.1创建线程池实例三、执行策略1直接提交策略(DirectSubmissionExecutor)2固定线程数策略(FixedThreadPool)3缓存线程池策略......