CISCN2022华中分区部分wp
字数 2206 2025-08-06 21:48:51

CISCN2022华中分区赛题解与教学文档

Web安全部分

Web1 - 目录穿越漏洞利用

漏洞分析

  • 题目存在目录穿越漏洞,通过构造特殊路径访问服务器上的敏感文件
  • 最终目标是找到flag.php文件

解题步骤

  1. 尝试使用../等目录遍历技术访问上级目录
  2. 通过不断尝试发现flag.php文件路径
  3. 直接访问flag.php获取flag

教学要点

  • 目录遍历漏洞原理:未正确过滤用户输入的路径参数
  • 常见利用方式:../..\、编码绕过等
  • 防御措施:规范化路径、白名单过滤、禁用特殊字符

Web2 - 文件上传漏洞利用

漏洞分析

  1. 通过BurpSuite抓包发现响应中有identity字段
  2. 添加identity字段后获得隐藏上传页面A0ther_hldden_PaGe.php
  3. 存在文件上传漏洞但限制为.jpg扩展名

解题步骤

  1. 上传.htaccess文件使服务器解析.jpg文件为PHP
    AddType application/x-httpd-php .jpg
    
  2. 上传包含恶意代码的图片马(.jpg)
  3. 使用蚁剑等工具连接WebShell
  4. 在服务器上查找并获取flag

教学要点

  • .htaccess文件的作用与配置
  • 文件上传漏洞的绕过技巧
  • 图片马的制作方法
  • 防御措施:文件类型检查、内容检测、禁用危险功能

PWN部分

Pwn1 - HTTP请求处理中的堆漏洞

漏洞分析

  • 模拟HTTP请求处理过程的程序
  • 在edit功能中存在off-by-NULL漏洞
  • 环境:libc2.27,开启沙箱需要ORW(open/read/write)绕过

利用步骤

  1. 通过堆布局构造合适的内存结构
  2. 利用off-by-NULL触发堆合并
  3. 泄露libc地址计算基址
  4. 构造ROP链绕过沙箱限制
  5. 最终通过ORW读取flag文件

关键代码

# 泄露libc地址
add('a'*0x450)
add('b'*0xa0)
delete(0)
add('a'*0x450)
show(0)
libc_base = u64(ru('\x7f')[-6:].ljust(8,b'\0')) - 0x3ebca0

教学要点

  • off-by-NULL漏洞原理与利用
  • libc地址泄露技术
  • 沙箱绕过技术(ORW)
  • HTTP协议模拟与交互

逆向工程部分

Re1 - Android APK逆向(RC4算法)

分析过程

  1. 反编译APK发现自定义encode函数
  2. 识别出明显的RC4算法特征
  3. 编写解密脚本还原flag

RC4解密脚本

def rc4_main(key = "init_key", message = "init_message"):
    s_box = rc4_init_sbox(key)
    crypt = rc4_excrypt(message, s_box)
    return crypt

def rc4_init_sbox(key):
    s_box = list(range(256))
    j = 0
    for i in range(256):
        j = (j + s_box[i] + ord(key[i % len(key)])) % 256
        s_box[i], s_box[j] = s_box[j], s_box[i]
    return s_box

def rc4_excrypt(plain, box):
    plain = base64.b64decode(plain.encode('utf-8'))
    plain = bytes.decode(plain)
    res = []
    i = j = 0
    for s in plain:
        i = (i + 1) % 256
        j = (j + box[i] + 136) % 256
        box[i], box[j] = box[j], box[i]
        t = (box[i] + box[j]) % 256
        k = box[t]
        res.append(chr(ord(s) ^ k))
    return "".join(res)

教学要点

  • RC4算法原理与实现
  • Android APK逆向基本流程
  • 加密算法识别技巧
  • 动态调试与静态分析结合

Re3 - Python PYD逆向(迷宫问题)

分析过程

  1. 分析main.py和PYD文件
  2. 恢复迷宫地图(101x101)
  3. 识别地图元素:
    • 'S': 起点
    • 'X': 终点
    • '0': 墙
    • '1': 路

迷宫求解算法(DFS)

void dfs(int x,int y,int len) {
    vis[x][y] = 1;
    if(flag == 1) return;
    if(f[x][y] == '2') {  // 终点
        for(int j = 0;j<=len;++j)
            cout<<leng[j];
        flag = 1;
        return; 
    }

    for(int i = 0;i<4;++i) {  // 四个方向
        int nx = x+x1[i];
        int ny = y+y1[i];
        if(nx<0||ny<0||nx>=n||ny>=n||vis[nx][ny] == 1)
            continue;
        if(f[nx][ny] == '0')  // 墙
            continue;
        leng[len] = w[i];  // 记录路径
        dfs(nx,ny,len+1);
        vis[nx][ny] = 0;
    } 
}

教学要点

  • Python PYD文件逆向分析
  • 迷宫算法实现(DFS/BFS)
  • 游戏逆向基本方法
  • 路径记录与输出

密码学部分

密码1 - LCG算法破解

题目分析

  • 线性同余生成器(LCG)算法:s_{n+1} = (a*s_n^2 + b*s_n + c) mod n
  • 已知:b, n, seed, s1, s2, c1, c2

解题步骤

  1. 根据seed, s1, s2建立方程求解a和c
  2. 通过c1, c2的关系恢复flag
  3. 注意题目描述与实际代码的差异

关键计算

a = (((s2-s1)-b*(s1-seed))*gmpy2.invert((pow(s1,2)- pow(seed,2)),n))%n
c = (-a*s1**2 - b*s1 + s2)%n
flag = ((c11-c)*gmpy2.invert(a,n)%n)

教学要点

  • LCG算法原理与破解
  • 模运算与逆元计算
  • 密码题目中的陷阱识别
  • 多解情况的处理

密码2 - 共模攻击

题目分析

  • 三组RSA加密,使用相同的模数n
  • 通过GCD计算发现n1和n2有公共因数p

解题步骤

  1. 计算n1和n2的GCD得到p
  2. 计算q = n/p
  3. 计算私钥d = e^-1 mod (p-1)(q-1)
  4. 解密得到明文

关键代码

p = gmpy2.gcd(n1,n2)
q1 = n1//p
d1 = gmpy2.invert(e1,(q1-1)*(p-1))
print(long_to_bytes(pow(c1,d1,n1)))

教学要点

  • RSA算法原理
  • 共模攻击的条件与方法
  • 大数分解技巧
  • 多组相关加密数据的处理

杂项(Misc)部分

Misc1 - 内存取证分析

分析过程

  1. 使用Volatility分析内存转储
  2. 发现notepad进程中有关键信息:
    • Python脚本片段(文件操作)
    • 密码提示"Achilles heel"相关
  3. 发现并提取flag.zip加密文件
  4. 通过XOR爆破恢复原始zip
  5. 使用密码"Ank1eAnk1e"解压

关键发现

  • notepad中保存的XOR加密脚本
  • 画图程序中的密码提示
  • 内存中的egg1.rtf文件包含flag

教学要点

  • 内存取证基本流程
  • 进程内存分析技巧
  • XOR加密破解方法
  • 密码心理学与提示分析

Misc2 - ZIP伪加密与明文攻击

解题步骤

  1. 识别ZIP伪加密特征
  2. 使用工具修复伪加密
  3. 或使用已知明文攻击破解

教学要点

  • ZIP文件结构分析
  • 伪加密原理与修复
  • 明文攻击条件与方法
  • 常用工具使用(bkcrack等)

Misc3 - PNG隐写分析

解题步骤

  1. 使用binwalk发现隐藏的压缩包
  2. 修改PNG尺寸提取压缩包
  3. 使用LSB隐写分析提取flag

教学要点

  • 文件格式分析与隐写识别
  • LSB隐写原理与工具使用
  • 文件修复技巧
  • 多层级隐写分析方法

总结

本比赛涵盖了网络安全竞赛的多个领域,每道题目都考察了不同的技术点:

  1. Web安全:目录穿越、文件上传漏洞利用
  2. PWN:堆漏洞利用、沙箱绕过
  3. 逆向工程:算法识别、游戏逆向
  4. 密码学:LCG破解、RSA共模攻击
  5. 杂项:内存取证、文件隐写分析

关键学习点:

  • 多技术领域综合能力
  • 漏洞利用的创造性思维
  • 算法分析与逆向能力
  • 密码学原理的实际应用
  • 数字取证与隐写分析技巧
CISCN2022华中分区赛题解与教学文档 Web安全部分 Web1 - 目录穿越漏洞利用 漏洞分析 : 题目存在目录穿越漏洞,通过构造特殊路径访问服务器上的敏感文件 最终目标是找到flag.php文件 解题步骤 : 尝试使用 ../ 等目录遍历技术访问上级目录 通过不断尝试发现flag.php文件路径 直接访问flag.php获取flag 教学要点 : 目录遍历漏洞原理:未正确过滤用户输入的路径参数 常见利用方式: ../ 、 ..\ 、编码绕过等 防御措施:规范化路径、白名单过滤、禁用特殊字符 Web2 - 文件上传漏洞利用 漏洞分析 : 通过BurpSuite抓包发现响应中有identity字段 添加identity字段后获得隐藏上传页面A0ther_ hldden_ PaGe.php 存在文件上传漏洞但限制为.jpg扩展名 解题步骤 : 上传.htaccess文件使服务器解析.jpg文件为PHP 上传包含恶意代码的图片马(.jpg) 使用蚁剑等工具连接WebShell 在服务器上查找并获取flag 教学要点 : .htaccess文件的作用与配置 文件上传漏洞的绕过技巧 图片马的制作方法 防御措施:文件类型检查、内容检测、禁用危险功能 PWN部分 Pwn1 - HTTP请求处理中的堆漏洞 漏洞分析 : 模拟HTTP请求处理过程的程序 在edit功能中存在off-by-NULL漏洞 环境:libc2.27,开启沙箱需要ORW(open/read/write)绕过 利用步骤 : 通过堆布局构造合适的内存结构 利用off-by-NULL触发堆合并 泄露libc地址计算基址 构造ROP链绕过沙箱限制 最终通过ORW读取flag文件 关键代码 : 教学要点 : off-by-NULL漏洞原理与利用 libc地址泄露技术 沙箱绕过技术(ORW) HTTP协议模拟与交互 逆向工程部分 Re1 - Android APK逆向(RC4算法) 分析过程 : 反编译APK发现自定义encode函数 识别出明显的RC4算法特征 编写解密脚本还原flag RC4解密脚本 : 教学要点 : RC4算法原理与实现 Android APK逆向基本流程 加密算法识别技巧 动态调试与静态分析结合 Re3 - Python PYD逆向(迷宫问题) 分析过程 : 分析main.py和PYD文件 恢复迷宫地图(101x101) 识别地图元素: 'S': 起点 'X': 终点 '0': 墙 '1': 路 迷宫求解算法(DFS) : 教学要点 : Python PYD文件逆向分析 迷宫算法实现(DFS/BFS) 游戏逆向基本方法 路径记录与输出 密码学部分 密码1 - LCG算法破解 题目分析 : 线性同余生成器(LCG)算法: s_{n+1} = (a*s_n^2 + b*s_n + c) mod n 已知:b, n, seed, s1, s2, c1, c2 解题步骤 : 根据seed, s1, s2建立方程求解a和c 通过c1, c2的关系恢复flag 注意题目描述与实际代码的差异 关键计算 : 教学要点 : LCG算法原理与破解 模运算与逆元计算 密码题目中的陷阱识别 多解情况的处理 密码2 - 共模攻击 题目分析 : 三组RSA加密,使用相同的模数n 通过GCD计算发现n1和n2有公共因数p 解题步骤 : 计算n1和n2的GCD得到p 计算q = n/p 计算私钥d = e^-1 mod (p-1)(q-1) 解密得到明文 关键代码 : 教学要点 : RSA算法原理 共模攻击的条件与方法 大数分解技巧 多组相关加密数据的处理 杂项(Misc)部分 Misc1 - 内存取证分析 分析过程 : 使用Volatility分析内存转储 发现notepad进程中有关键信息: Python脚本片段(文件操作) 密码提示"Achilles heel"相关 发现并提取flag.zip加密文件 通过XOR爆破恢复原始zip 使用密码"Ank1eAnk1e"解压 关键发现 : notepad中保存的XOR加密脚本 画图程序中的密码提示 内存中的egg1.rtf文件包含flag 教学要点 : 内存取证基本流程 进程内存分析技巧 XOR加密破解方法 密码心理学与提示分析 Misc2 - ZIP伪加密与明文攻击 解题步骤 : 识别ZIP伪加密特征 使用工具修复伪加密 或使用已知明文攻击破解 教学要点 : ZIP文件结构分析 伪加密原理与修复 明文攻击条件与方法 常用工具使用(bkcrack等) Misc3 - PNG隐写分析 解题步骤 : 使用binwalk发现隐藏的压缩包 修改PNG尺寸提取压缩包 使用LSB隐写分析提取flag 教学要点 : 文件格式分析与隐写识别 LSB隐写原理与工具使用 文件修复技巧 多层级隐写分析方法 总结 本比赛涵盖了网络安全竞赛的多个领域,每道题目都考察了不同的技术点: Web安全:目录穿越、文件上传漏洞利用 PWN:堆漏洞利用、沙箱绕过 逆向工程:算法识别、游戏逆向 密码学:LCG破解、RSA共模攻击 杂项:内存取证、文件隐写分析 关键学习点: 多技术领域综合能力 漏洞利用的创造性思维 算法分析与逆向能力 密码学原理的实际应用 数字取证与隐写分析技巧