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.
  • 相关阅读:
    .net中对象序列化技术
    new、virtual、override
    如何检测指定的Windows服务是否启动
    c#中的GetUpperBound,GetLowerBound方法
    C#.net中的rank方法
    实现MD5算法
    用C#实现DES加密解密封装
    [转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案
    [转]runOnUiThread 、 Handler 对比(一)
    [转]使用popBackStack()清除Fragment
  • 原文地址:https://www.cnblogs.com/elvirangel/p/6746937.html
Copyright © 2011-2022 走看看