热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

rop、64位程序中参数传递及栈溢出利用

ctf64位程序中参数传递及栈溢出利用rop64位程序中参数传递及栈溢出利用32位程序参数传递是直接弹出栈顶元素作为参数,而64位程序通过edi寄存器传参ÿ

ctf

      • 64位程序中参数传递及栈溢出利用
      • rop


64位程序中参数传递及栈溢出利用

32位程序参数传递是直接弹出栈顶元素作为参数,而64位程序通过edi寄存器传参;因此在栈溢出漏洞利用的步骤为:
找到“pop edi\rdi;ret;”语句、system函数和“bin/sh”字符串的地址,输入数据:【填满栈空间的数据+覆盖edb的数据(32位大小为4h,64位大小为8h)+“pop edi\rdi;ret;”语句的地址+“bin/sh”字符串的地址+system函数的地址】。
具体执行过程:
子函数调用结束时,通过返回地址执行“pop edi\rdi;ret;”语句,将“bin/sh”字符串的地址出栈到edi\rdi寄存器作为参数,通过“pop edi\rdi;ret;”语句的“ret”指令及栈顶的system函数地址执行system函数,将edi\rdi寄存器中的“bin/sh”字符串的地址所在的“bin/sh”字符串作为参数传给system函数 ,执行system(“bin/sh”)语句。
Alt

rop

rop即返回导向编程,其原理是利用动态链接库以及已有的指令中接“ret”指令的指令,利用一个栈,在栈中存入各个利用指令的地址并将其按照想要的运行流程顺序存入栈中,在执行完第一个指令后因为后接“ret”指令,所以会将下一条想要运行的指令的地址作为返回地址出栈继续运行,通过每一条指令后的“ret”指令以及栈中安排好的地址可以实现控制想运行的指令的运行流程。
ps:像rop是某个寄存器这种世界机密我是不会说的(/滑稽)


推荐阅读
author-avatar
徐徐回忆_545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有