64位ROP——通用gadget

原理与目的

程序在编译的时候会加入一些通用函数来进行初始化操作,所以可以针对初始化函数来提取一些通用的gadget,通过泄露某个在libc中的内容在内存中的实际地址,通过计算偏移量来得到system和bin/sh的地址,然后利用返回指令ret连接代码,最终getshell。

实验步骤

chechsec命令检查是否有canary保护

在这里插入图片描述
图中显示并没有,如果有的话,就先进行泄露。

IDA反汇编

int __cdecl main(int argc, const char **argv, const char **envp)
{
  write(1, "Hello, World\n", 0xDuLL);
  vulnerable_function(1LL, "Hello, World\n");
  return 0;
}

通过看源代码可能看不出什么,我们来看一下vulnerable_function,

ssize_t vulnerable_function()
{
 char buf; // [rsp+0h] [rbp-80h]

 return read(0, &buf, 0x200uLL);
}

由此看出可以利用栈溢出来进行泄露,找到system和bin/sh。
32位和64位区别
linux_64与linux_86的区别主要有两点:
一是编址不同,内存地址的范围由32位

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值