64位栈溢出

64位程序栈溢出

当参数少于7个时, 参数<1-6>放入寄存器: rdi, rsi, rdx, rcx, r8, r9

    High
    Address |                 |
            +-----------------+
            | 第7参数(如果有)    |
            +-----------------+
            | return address  |
            +-----------------+
   rbp =>   | old rbp         |
            +-----------------+
  rbp-8 =>  | canary value    |
            +-----------------+
            | local variables |
    Low     |                 |
    Address

一般参数小于7

#payload = 'a'*buf+p64(rbp)+p64(hack1)+p64(hack2)
buf为覆盖地址到ebp的字节
rbp为任意值

原理
调用hack1前,
函数一般leave,ret
将 return address  (rbp+8)传给rip
rsp指向 rbp +16
返回地址是函数hack1

调用hack1,会在rsp(rbp+16)低地址上(即rbp+24)建立栈帧
hack1返回地址就是rbp+16
则接着执行hack2

#如果要传参,要用到rop
*** 如<只给hack1传参>  ***
##payload = 'a'*buf+p64(rbp)+p64(pop|ret)+p64(参数)+p64(hack1)+p64(hack2)
如pop_rdi_ret (传递第一个参数)
将返回地址改为pop|ret则会将栈上数据传给寄存器。有几个pop就在栈上布局多少参数。
最后ret 会将rip指向参数下面的地址	如hack1

调用完hack1就执行hack2

函数hack1传参,栈布局

    High
    Address |                 |
           +-----------------+
           | hack2       	|
           +-----------------+
           |	   hack1      |
           +-----------------+
           |     hack1参数2  |
           +-----------------+
           |     hack1参数1  |
           +-----------------+
           | 返回地址(rop)     |  pop rdi|pop rsi |ret 传递参数,执行hack1                 
            +-----------------+
   rbp =>   | old rbp         |
            +-----------------+
  rbp-8 =>  | canary value    |
            +-----------------+
            | local variables |
    Low     |                 |
    Address
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux 64位系统中,栈溢出是一种常见的安全漏洞。栈溢出是指当程序写入超过栈分配的缓冲区的数据时,会覆盖到栈上的其他数据,从而导致程序的异常行为。这个漏洞可以被恶意攻击者利用,执行任意的代码或者获取敏感数据。 在64位系统中,栈溢出的原理和32位系统类似,但是由于64位系统的栈和寄存器的大小不同,所以在实际操作上会有所不同。一种常见的攻击方法是通过溢出覆盖返回地址,将程序的控制流引导到恶意代码执行的地址上。为了实现栈溢出攻击,攻击者需要了解目标程序的内存布局和对应的函数调用机制。 引用提到了关于Linux下64位缓冲区溢出的文章,对于想深入了解64位系统下的栈溢出攻击的人来说,这篇文章可能是一个很好的参考。引用提供了一个关于shellcode的示例,可以用来在64位系统中执行系统命令。而引用则指出本文的目的是让读者学习64位缓冲区溢出的基础知识。 总的来说,在Linux 64位系统中,栈溢出是一种常见的安全漏洞,攻击者可以通过溢出覆盖返回地址来执行恶意代码。为了进行栈溢出攻击,攻击者需要了解目标程序的内存布局和函数调用机制。可以参考引用中的文章来深入了解64位系统下的栈溢出攻击的细节。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [linux64 溢出,64位Linux下的栈溢出](https://blog.csdn.net/weixin_36383252/article/details/116872723)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [linux栈溢出](https://blog.csdn.net/qq_45323960/article/details/122766130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值