zoukankan      html  css  js  c++  java
  • ROP之linux_x64知识杂记

    蒸米大神谈ROPwww.vuln.cn/6645

         ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等)。

    0x01 linux_64与linux_86的区别

        linux_64与linux_86的区别主要有两点:首先是内存地址的范围由32位变成了64位。但是可以使用的内存地址不能大于0x00007fffffffffff,否则会抛出异常。其次是函数参数的传递方式发生了改变,x86中参数都是保存在栈上,但在x64中的前六个参数依次保存在RDI, RSI, RDX, RCX, R8和 R9中,如果还有更多的参数的话才会保存在栈上。

    0x02 寻找gadgets

        linux安装 ROPgadget 

    git clone https://github.com/JonathanSalwan/ROPgadget.git
    cd ROPgadget
    sudo python setup.py install

        使用ROPgadget

    ~$ ROPgadget --binary level4 --only "pop|ret"

    Gadgets information
    ============================================================
    0x00000000004008ac : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
    0x00000000004008ae : pop r13 ; pop r14 ; pop r15 ; ret
    0x00000000004008b0 : pop r14 ; pop r15 ; ret
    0x00000000004008b2 : pop r15 ; ret
    0x00000000004008ab : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
    0x00000000004008af : pop rbp ; pop r14 ; pop r15 ; ret
    0x0000000000400700 : pop rbp ; ret
    0x00000000004008b3 : pop rdi ; ret
    0x00000000004008b1 : pop rsi ; pop r15 ; ret
    0x00000000004008ad : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret
    0x0000000000400601 : ret
    0x0000000000400682 : ret 0x2009

    Always believe that good things will come.
  • 相关阅读:
    基于FPGA的频率检测与LCD显示
    基于labview和fpga的信号发生器
    基于FPGA的直流电机
    基于FPGA的LDPC编译码器说明文档
    基于FPGA的dds发生器与lcd显示
    12th.Linux驱动程序开发
    11th.U-boot——代码结构分析(二)
    C语言中的函数指针
    10th.U-boot——代码结构分析(一)
    9th.U-boot——初识Bootloader
  • 原文地址:https://www.cnblogs.com/elvirangel/p/6746937.html
Copyright © 2011-2022 走看看