2025 0penHarmonyCTF(部分)
字数 1327 2025-09-01 11:26:17
OpenHarmony CTF PWN 题目解析与教学文档
1. mini-shell 题目分析
1.1 题目概述
- 主进程是
minishell二进制文件 - 可以使用
binwalk直接分离出二进制文件 - 关键功能:
cat命令可以执行 shellcode
1.2 漏洞利用要点
-
寄存器状态:
- 执行 shellcode 前会将所有寄存器清空,包括
rsp和rbp - 这与 2025 VNCTF 的一道题目类似
- 执行 shellcode 前会将所有寄存器清空,包括
-
利用方法:
- 初始尝试:使用
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 参赛者,掌握这些技术点和分析方法将有助于解决类似的题目。