XCTF联赛,全称XCTF国际网络攻防联赛,现在整理 经典 CTF 题型的解题思路、高频考点 和 模拟训练方法,并提供部分示例题目供练习。
一、Web 安全(占比约 30%-40%)
示例题目 1:SQL 注入绕过
题目描述:
存在注入点 URL:http://example.com/user?id=1
过滤规则:禁用单引号 '
和 union
关键字
参考答案:
- 使用数字型注入,无需引号:
http://example.com/user?id=1 AND 1=1 --+ http://example.com/user?id=1 AND 1=2 --+
- 绕过
union
过滤:http://example.com/user?id=1 /*!UNION*/ SELECT * FROM users
示例题目 2:XSS 绕过 WAF
题目描述:
输入框过滤 <script>
标签,但允许其他 HTML 标签
参考答案:
利用事件处理器绕过:
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
二、逆向工程(占比约 20%-30%)
示例题目 1:CrackMe 简单校验
题目描述:
某 EXE 文件校验输入密码是否为 admin123
,要求绕过验证
解题步骤:
- 使用 IDA 打开文件,定位到校验函数(通常包含
strcmp
或HashCompare
)。 - 修改关键跳转指令(如将
JE
改为JNE
)。 - 保存修改后的二进制文件并运行。
示例题目 2:RSA 私钥恢复
题目描述:
已知公钥 (n, e)
,且存在低指数漏洞(e=3),如何解密?
参考答案:
- 若密文
c = m^e mod n
且 e=3,尝试直接开三次方:from gmpy2 import iroot m = iroot(c, 3)[0]
三、密码学(占比约 15%-25%)
示例题目 1:凯撒密码变种
题目描述:
密文 Uryyb Jbeyq!
,要求解密
解题步骤:
- 识别为 ROT13 加密(字母位移 13)。
- 使用在线工具或 Python 解码:
import codecs print(codecs.decode("Uryyb Jbeyq!", 'rot_13'))
示例题目 2:异或加密破解
题目描述:
已知密文 68 65 6c 6c 6f
和密钥 key
(长度 3),求明文
解题步骤:
- 将密钥重复至密文长度:
keyke
。 - 逐字节异或:
cipher = bytes.fromhex('68656c6c6f') key = b'key' plain = bytes([cipher[i] ^ key[i % len(key)] for i in range(len(cipher))]) print(plain) # 输出 b'hello'
四、二进制漏洞利用(Pwn方向)
示例题目 1:栈溢出基础
题目描述:
存在漏洞的二进制文件,输入超长字符串导致崩溃,要求获取 Shell。
解题步骤:
- 使用
checksec
检查保护机制(如 NX、Canary)。 - 通过
gdb
调试确定溢出偏移量。 - 构造 ROP 链或覆盖返回地址跳转到
system("/bin/sh")
。
示例题目 2:格式化字符串漏洞
题目描述:
程序输出 Welcome %x %x %x...
,要求泄露栈上的地址。
参考答案:
./vuln "%7$p.%8$p" # 打印栈上第 7、8 个参数的地址
五、综合训练平台推荐
- CTFtime:历年真题与赛事直播
https://ctftime.org - Hack The Box:实战渗透练习
https://www.hackthebox.com - VulnHub:提供漏洞环境镜像
https://www.vulnhub.com
六、备赛建议
- 工具掌握:熟练使用 Burp Suite、Metasploit、Ghidra 等工具。
- 靶场练习:在本地搭建 Docker 环境模拟漏洞(如 OWASP Juice Shop)。
- 团队协作:加入 CTF 社区(如 Discord 群组)交流思路。
如果需要具体题目的详细分析,建议在 CTFtime 或 GitHub 搜索对应年份的 XCTF 赛事 Writeup。