-
-
[原创]Ret2libc 学习记录笔记
-
发表于:
2021-6-11 21:36
15593
-
它是指的是劫持程序流程利用程序当中已经存在得指令来执行。多用在栈不可执行得情况。
注释:-no-pie只是针对编译的ELF文件做了随机化,libc加载地址跟/proc/sys/kernel/randomize_va_space有关,echo 0 >/proc/sys/kernel/randomize_va_space
使用gdb 进行调试,运行程序并且获取函数system地址,以及参数“/bin/sh”的地址,然后设计溢出劫持程序流程来是程序运行system('/bin/sh')。
设置断点,运行程序,使system()加载。
获取system函数以及参数的地址
生成字符穿,计算溢出点
构造分析:
注释;图中有一个难理解的地方,即覆盖system函数的地址后面为什么需要紧接这一个"ret"然后才是参数“/bin/sh”。其实该"ret"的值可以是任意。他的作用可以说就是为了在调用system() 函数压入参数的时候将“/bin/sh”压入。假定程序在正常执行时ret 的时候,原本可以正常跳转出去,但是现在ret 的位置被修改成为“system()”函数。所以执行完ret 指令之后,EIP的值是system(),也就是说下一步就是执行函数system()。所以,程序会在[EBP+8] 的位置找寻参数。下图为正常函数调用之后的栈空间示意图:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-6-13 19:29
被天象独行编辑
,原因: