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

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是某个寄存器这种世界机密我是不会说的(/滑稽)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值