2025 0penHarmonyCTF(部分)
字数 1327 2025-09-01 11:26:17

OpenHarmony CTF PWN 题目解析与教学文档

1. mini-shell 题目分析

1.1 题目概述

  • 主进程是 minishell 二进制文件
  • 可以使用 binwalk 直接分离出二进制文件
  • 关键功能:cat 命令可以执行 shellcode

1.2 漏洞利用要点

  1. 寄存器状态

    • 执行 shellcode 前会将所有寄存器清空,包括 rsprbp
    • 这与 2025 VNCTF 的一道题目类似
  2. 利用方法

    • 初始尝试:使用 mov rsp, fs:[0x300] 恢复栈空间,构造 read 再读入 shellcode(本地通但远程不通)
    • 改进方案:参考 VNCTF 的简短 shellcode,本地和远程均可通

2. ezshell 题目分析

2.1 题目概述

  • 同样可以使用 binwalk 分离二进制文件
  • 需要定位隐藏函数进行利用

2.2 关键函数分析

  1. 检测机制

    • 第一部分检测 !devmode
    • sub_40135f 函数规定了参数的输入格式
    • 有效输入格式:ffbc 可以读取 flag
  2. 利用条件

    • 需要满足 v12 不为空
    • 需要使用 ad ea 功能(创建快捷方式)

2.3 利用步骤

  1. 快捷方式创建

    • 使用 shortcut 命令创建带参数的快捷方式
    • 更新 UMU 变量:LODWORD(UMU) = n9 - 1(记录刚添加的快捷方式索引)
    • 打印信息:sub_4073F6(类似 printf)输出 "Shortcut %d added: %s\n"
  2. 函数指针赋值

    • sub_40127Apsub_403703 赋值回 sub_403703
    • 这使得可以在 shell 中直接调用 cat
  3. 完整利用流程

    • 先提权(不清空快捷方式)
    • 创建包含特定字符串的快捷方式(不能直接包含 "flag",需要拼接绕过)
    • 使用 cat 调用创建好的快捷方式
  4. 注意事项

    • 不提权会导致快捷方式被清空
    • 在隐藏命令结尾处 sub_401211 完成 flag 的最终拼接

3. JavaScript 沙盒题目

3.1 题目概述

  • 一个命令执行题目,基于 JS 沙盒
  • 底层只有 printf 函数可用
  • 更像 Web 题目,需要代码执行技巧

4. 通用解题建议

  1. 面对新型题目

    • 不要慌张,尝试猜测和探索
    • 直接练习远程环境,不要轻易放弃
    • 本地启动可能会遇到问题,需要耐心解决
  2. 分析方法

    • 准确定位关键函数位置
    • 可以结合 AI 辅助分析(如华清未央、pwno 等工具)
    • 注意题目之间的相似性(如参考 VNCTF 的解法)
  3. 调试技巧

    • 使用 binwalk 分离二进制文件
    • 关注寄存器状态和内存布局
    • 尝试多种 shellcode 构造方法

5. 总结

本教学文档详细分析了 OpenHarmony CTF 中的三个 PWN 题目,重点讲解了 mini-shell 和 ezshell 的利用方法,包括 shellcode 构造、快捷方式创建和函数指针劫持等技术。对于 CTF 参赛者,掌握这些技术点和分析方法将有助于解决类似的题目。

OpenHarmony CTF PWN 题目解析与教学文档 1. mini-shell 题目分析 1.1 题目概述 主进程是 minishell 二进制文件 可以使用 binwalk 直接分离出二进制文件 关键功能: cat 命令可以执行 shellcode 1.2 漏洞利用要点 寄存器状态 : 执行 shellcode 前会将所有寄存器清空,包括 rsp 和 rbp 这与 2025 VNCTF 的一道题目类似 利用方法 : 初始尝试:使用 mov rsp, fs:[0x300] 恢复栈空间,构造 read 再读入 shellcode(本地通但远程不通) 改进方案:参考 VNCTF 的简短 shellcode,本地和远程均可通 2. ezshell 题目分析 2.1 题目概述 同样可以使用 binwalk 分离二进制文件 需要定位隐藏函数进行利用 2.2 关键函数分析 检测机制 : 第一部分检测 !devmode sub_40135f 函数规定了参数的输入格式 有效输入格式: ff 或 bc 可以读取 flag 利用条件 : 需要满足 v12 不为空 需要使用 ad ea 功能(创建快捷方式) 2.3 利用步骤 快捷方式创建 : 使用 shortcut 命令创建带参数的快捷方式 更新 UMU 变量: LODWORD(UMU) = n9 - 1 (记录刚添加的快捷方式索引) 打印信息: sub_4073F6 (类似 printf )输出 "Shortcut %d added: %s\n" 函数指针赋值 : sub_40127A 将 psub_403703 赋值回 sub_403703 这使得可以在 shell 中直接调用 cat 完整利用流程 : 先提权(不清空快捷方式) 创建包含特定字符串的快捷方式(不能直接包含 "flag",需要拼接绕过) 使用 cat 调用创建好的快捷方式 注意事项 : 不提权会导致快捷方式被清空 在隐藏命令结尾处 sub_401211 完成 flag 的最终拼接 3. JavaScript 沙盒题目 3.1 题目概述 一个命令执行题目,基于 JS 沙盒 底层只有 printf 函数可用 更像 Web 题目,需要代码执行技巧 4. 通用解题建议 面对新型题目 : 不要慌张,尝试猜测和探索 直接练习远程环境,不要轻易放弃 本地启动可能会遇到问题,需要耐心解决 分析方法 : 准确定位关键函数位置 可以结合 AI 辅助分析(如华清未央、pwno 等工具) 注意题目之间的相似性(如参考 VNCTF 的解法) 调试技巧 : 使用 binwalk 分离二进制文件 关注寄存器状态和内存布局 尝试多种 shellcode 构造方法 5. 总结 本教学文档详细分析了 OpenHarmony CTF 中的三个 PWN 题目,重点讲解了 mini-shell 和 ezshell 的利用方法,包括 shellcode 构造、快捷方式创建和函数指针劫持等技术。对于 CTF 参赛者,掌握这些技术点和分析方法将有助于解决类似的题目。