ROP之linux_x64知识杂记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROP之linux_x64知识杂记相关的知识,希望对你有一定的参考价值。

蒸米大神谈ROP:http://www.vuln.cn/6644

0x00  ROP

     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

 
















以上是关于ROP之linux_x64知识杂记的主要内容,如果未能解决你的问题,请参考以下文章

栈溢出之rop到syscall

[NTUSTISC pwn LAB 5]rop入门实验

[NTUSTISC pwn LAB 6]rop&Return to plt实验

Pwn之ROP系列练习

inndy_rop

Linux_x64_Pwn溢出漏洞