致刚学ctf的你
给刚入门的师傅们写一篇小文章,这里我参考之前实验室的传承,结合自身经历,把能写的全写了,望诸君共勉,由于我自己也挺菜的,然后最近又忙着考研有点赶,然后写的不好的地方体谅一下
一、什么是 ctf
1、概念
ctf 全称 Capture The Flag,意思就是指每一个题目里面有一个 flag 信息,拿到 flag 就意味着这一个题目的胜利
2、赛制
CTF 通常包括了解题模式(Jeopardy)、攻防模式(Attack with Defense,AWD)、综合渗透(Integrated Security Warfare,ISW)。
解题模式:常见于线上选拔比赛,参赛队伍可以通过互联网或者现场网络参与,解决网络安全技术挑战,获取相应分值,类似于 ACM 编程竞赛、根据总分和时间来进行排名。通常会设置 一血 、 二血 、 三血 ,也即最先完成的前三支队伍会获得额外分值。此外,还有一种 “降分” 的计分规则,即在设置每道题目的初始分数后,根据该题的成功解答队伍数来逐渐降低该题的分值。这意味着当解答这道题的人数越多,那么这道题的分值就越低。最后会下降到一个保底分值后便不再下降。
攻防模式:常见于线下比赛,尤其是一些 CTF 比赛的线下决赛阶段。所有参赛队伍拥有相同的初始系统环境,常称为 gamebox,参赛队伍挖掘网络服务漏洞并攻击对手服务获取 flag 来得分,修补自身服务漏洞进行防御从而防止扣分。
ps: 攻防模式还有一种拓展模式(awdp),与 awd 模式不一样的是。awd 是选手与选手队伍之间互相攻击,防御。awdp 则是选手打主办方的服务器,修复题目
综合渗透:模拟真实网络攻防场景,选手在限定时间内对目标网络进行渗透测试,完成阶段任务(如获取指定数据、控制关键系统),从而得分。
3、竞赛内容
CTF 的考题范围较广,主要为 Web攻防、RE 逆向工程、Pwn 二进制漏洞利用、Crypto 密码攻击、以及 Misc 安全杂项等。近几年,新增了AI、量子计算等新兴技术领域的题型。此外,初赛还会考试信息安全基础知识、法律法规与安全标准等内容。
Web攻防:涉及Web 安全中常见的漏洞,如 SQL 注入、XSS、CSRF、文件包含、文件上传、代码审计、PHP 弱类型等。
ps: web安全最近常和ai安全结合着一起考
逆向工程:Reverse Engineering,涉及 Windows/Linux/Android 平台的多种编程技术,包括 Android 移动应用 APK 文件的逆向分析,需掌握加解密、内核编程、算法、反调试和代码混淆技术。
二进制漏洞利用:涉及C/C++/Python/PHP/Java/Ruby/等语言,挖掘 Windows/Linux(x86/x86_64 平台)二进制程序漏洞,需掌握缓冲区溢出和格式化字符串攻击,编写并利用 shellcode。
Crypto 密码攻击:涉及古典密码学和现代密码学,分析密码算法和协议,计算密钥并进行加解密操作。
Misc 安全杂项:主要涉及信息搜集能力,编程能力、移动安全、云端计算安全、可信计算、自主可控、隐写术和信息隐藏、计算机取证(Forensics)技术和文件恢复技能,计算机网络基础以及对网络流量的分析能力。
新增题型主要涉及:AI安全中对抗样本攻击、深度伪造检测、大模型安全等;量子密码基础、量子安全等前沿方向;信息安全基础知识则包括网络安全概述、操作系统安全基础、渗透测试基础等,法律法规与安全标准包括国家网络安全政策、法律法规、等级保护标准等。
二、环境与工具与学习资源
1、所有人必备一个 kali 打,一个其他发行版的 linux 做本地测试
VMware WorkStation + Kali + 靶场/靶机
VMware WorkStation:https://www.52pojie.cn/thread-1804571-1-1.html (vmware 破解版)
Kaili: https://www.kali.org/get-kali/#kali-platforms (国内加速镜像: https://mirrors.aliyun.com/kali-images/current/)
在 VMware WorkStation 安装好 Kali 后,第一件事是换国内源(清华源/阿里源),否则下载工具会慢到让人崩溃。
Kali 换源命令
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
2、web手必备
- Yakit: https://yaklang.com/products/intro/ (强烈不推荐使用破解版BP)
- 小皮面板:https://www.xp.cn/
- SRK toolbox: https://github.com/Raka-loah/SRK-Toolbox
- HackBar: https://chromewebstore.google.com/detail/hackbar/ginpbkfigcoaokgflihfhhmglmbchinc?hl=zh-CN ;https://github.com/Mr-xn/hackbar2.1.3 (需要FQ,可以使用Hoxx VPN浏览器扩展)
- 焚靖Fenjing: https://github.com/Marven11/Fenjing
- Godzilla: https://github.com/BeichenDream/Godzilla
- 冰蝎Behinder: https://github.com/rebeyond/behinder
- 蚁剑AntSword: https://github.com/AntSwordProject/antSword
- ProjectDiscovery: https://github.com/projectdiscovery
- Clash Verge Rev Docs: https://www.clashverge.dev/index.html (VPN)
- Obsidian: https://obsidian.md/ (知识库)
- Git:https://git-scm.com/
- Docker:https://docker.aityp.com/
- Xftp8/xshell: https://www.xshell.com/zh/free-for-home-school/ (打awd的时候,队伍内部连接服务器,互传文件用)
还有一些浏览器插件,什么hackbar,Heimdallr,雪瞳啊之类的,这些只是web手工具中的一小部分 ,更多小工具等待大家发掘,甚至自己写。一开始我也很讨厌装各种环境,但是作为web手,面对各种各样的环境不可避免,所以说还是要有一个积极的心态
3、学习资源
学习ctf不仅仅是写题,包括但是不限于
b站(这里推荐几个b站的up,小迪安全,暗月渗透,红队笔记,零溢出,探姬,蜗牛学院,猎洞时刻,守夜人jaden)
先知社区:https://xz.aliyun.com (最优质文章的第一出处)
Maze-SEC安全社区:https://doc.maze-sec.com (社区爱好者自建,全免费,高手如云~ 卷王进)
XssSafe导航:https://xssav.com/
赛事复现:https://gz.imxbt.cn/
知识星球:https://www.zsxq.com/ (基本上是要付费)
各位知名师傅的个人blog:这里推荐几个,但是不是很全:
- Drunkbaby’s Blog
- https://b1uel0n3.github.io/
- Y4tacker:Hacking The World!
- 素十八
- 1diot9.github.io
- https://wanth3f1ag.top
当然这只是一小部分,还有很多实验室学长的blog大家可以问学长要
github这个不用我多说,21世纪最伟大的发明之一,一定要注册账号在上面活跃起来!
微信公众号比如我在群里分享的柯技知识分享,东东sec,星宇sec之类的
4、常见靶场
- HackTheBox: https://www.hackthebox.com/
- TryHackMe: https://tryhackme.com/
- Bugku: https://ctf.bugku.com/
- Picoctf: https://picoctf.org/ (新手入门)
- CTFlearn: https://ctflearn.com/
- ADWorld: https://adworld.xctf.org.cn/
- CTFshow: https://www.ctf.show
- BUUCTF: https://buuoj.cn
- NSSCTF: https://www.nssctf.cn/index
- Pwn College:https://pwn.college/
- Vulhub: https://vulhub.org/zh
- Vulfocus: https://fofapro.github.io/vulfocus/#/
- 青少年CTF:https://www.qsnctf.com/
三、如何学习 ctf?
首先我认为你因该先认清自己学这个的目的是什么,
如果你想考研保研,打ctf就是为了拿奖加分的话,那你每天的最基础的必须搞好你校本知识,每天最多2-3小时ctf。然后大三大四就别打了,冲刺研究生。
如果你是想找工作,那打ctf就更加适合你一点,你可以全身心,甚至和我之前一样,逃课学技术
但是嗷,ctf只是带领大家入门的一个东西,和真实环境亦有差距,也就是说ctf他是必须有漏洞给你利用的,然后甚至有的题是为了难而难的,但是工作不一样,他不确定到底哪里有漏洞,也不会为了为难你而为难你,他都是为了真实的业务服务的,所以打到大三之后还是要回归真实环境。
如果你是考公,和之前考研的差不多,但是又不能说的秘密,嗷福利
有了学习的目标了之后,你应该要有一种乐观,平静的态度,因为这一行,无论是一开始,还是在后面往低层做安全研究,都是需要大量的时间投入,大部分的时候甚至不会有成果,很崩溃不是。于是就需要大家调整好心态,然后有着一往无前的勇气,毕竟也是高考过来的不是
有了这种心态你去学习,当你有了第一次getshell,第一次拿到flag,看见自己的名次在榜单上面上涨,看见自己写的文章,写的工具被人看见的时候,你就会有一种正向的反馈,这个就是你学下去的动力。从此你会发现,学习ctf,学习网络空间安全不仅仅是听起来帅,工资不错,更加是一种热爱,所以说为什么我认识几个初中生小学生也搞这个,真的就是纯热爱。
热爱+专注+目标+冷静之后,下面我来讲讲学习方法,虽然我学的也不是很好然后我也考研去了。我还是分享一下我自己的
我是一开始大一上学习了全栈的web开发,当时的技术栈是很古法的php+mysql+js+nginx/apache
这个经典的组合拳适合大部分新手的入门以及在现在的新生赛中都会出现,但是对于实战已经过时了/我有了对一个web站有了大概的认识,知道每个部分是什么,业务怎么实现的,但是我不推荐这样学习,当时我是实在没人带啥也不懂就乱学
这边重点来了:下面讲解一下各个方向基本的学习方法,之后拆开讲
学完我之前说过的前置知识之后,直接去写题目,这里再回顾一下
所有方向必须会:
- 学习c语言语法,对编程有一个大致的理解
- 学习agent的使用,什么agent都可以,包括会写skill,会调用mcp,最好训练一个自己的本地agent,搭建本地知识库
- 了解ctf各个方向
- 学会一门面相对象编程,推荐py
- 学会linux基本命令,包括增删改查
- web选手: 在寒假之前学会爬虫,不要求学会beautifulsoup,会抓到数据就行,掌握http协议
- 二进制选手: 寒假之前学会汇编语言基础指令
- misc选手/crypto:学py,本身这两个方向对于新手来说比较友好,crypto学好现代和数论
然后写题目,
这个时候你肯定啥也不会,你就可以直接看wp,然后对wp中的每一个不懂的名词,让ai解释给你听,那如果ai的话术也很生涩就一直问,直到你懂了为止,懂了之后,将你学到的知识记录在笔记上,这里推荐我之前的obsidian,归纳总结在上面,注意这里一定是归纳总结,不是每次写过一个题目就抄一道在上面,参考我之前的笔记一样,将每一种绕过的姿势记录即可
另一方面,对于某些专题,比如说owasp top10漏洞,你可以直接上b站看我之前说的那几个up,有的都有介绍,你像蜗牛,jaden都是介绍基础漏洞的,反正就是看网课和写题目结合着来,也可以看文章,反正就是和上面说的那样,总结归纳好就可以。
但是,最重要的是,要有一个动手能力,不要就是看网课看文章看见了,懂了,记笔记了就可以了,一定要去动手复现,我之前说过搞两个虚拟机,一个用来打,一个用来跑服务,这里这个虚拟机就是用来跑服务复现漏洞的。你在这个跑服务的虚拟机里面你就会有很多各式各样的环境,然后比赛的时候你就可以在这个上面测试你的exp。
然后每周的周末,你可以去关注一下有什么正在进行的比赛没有,保证自己有一个手感在。
最后我建议大家搞一个本地知识库,这样学习效率大大提升,基于obsidian,每次看见一篇文章,浏览器插件obsidian web clipper cv到本地,然后要claude基于本地知识库知识解释成自己能够听懂的语言,存本地知识库。本地知识库也好,笔记也好,都不要求大家经常翻起来看看,记住。只要大家熟悉自己的笔记,在比赛的时候碰见这个点了,能够想起来自己学过这个漏洞,找到笔记中的内容并且记起来就好
最后的最后,众所周知,计算机这门学科是一个日益创新的学科,还是希望大家在有了基础之后,时刻关注最新的cve,cve是复现不完的,我们只需要复现几个出名的就可以了,主要是复现的过程中,培养动手能力,打开思路。
总结一下:学好安全,要的就是热爱,冷静,动手能力,思维
ps:这里大家必会碰见一些问题,在查阅各种渠道,询问ai无果之后可以问问学长,下面我就来说说提问的艺术
a,不要问那种没有经过思考,没有经过琢磨的问题
b,不要拍屏,shift+alt+s或者contrl+alt+a截屏
c,学长不是万能的,学安全路上最好的老师就是ai和自己
d,除了问学长还有和同龄人交流之外,还可以在各种技术群里面问问万能的群友
ps:这也是ctf好玩的一个点,可以结交一堆网友,不只是问问题,还可以线上组队,甚至当你技术足够高的时候还可以加入ctf高校联队,里面更多资源机会,当然还是建议大家不要实名上网,到时候线下赛被真实就老实了。
下面说说编程语言:这里节选至洋参教练的话
在没有AI的时候,通常要求学习各个语言的语法。 当然在大学的课程上大部分都会学习到,比如C,Java,php,python等。golang和js这些自己抽空学习下,有了前面的语法基础后续学起来都不会难。再加上当前AI发展迅速,也可以多请教AI。我们搞安全的主要是关注语言的一些特性,然后去思考这其中的特性是否有安全问题。不是说语言的共性一定是安全的,但是共性的安全风险一定被世界各地研究人员盯了很久了,其攻击面肯定是比不上特性的!所以最好的方式是去深入学习这门语言并尽可能使用其特性进行开发,如开发一个个人网站或者开发一个爬虫都可以。
然后是一些利用脚本需要自己手搓,尤其是一些线下比赛不能访问互联网,也不能用AI, 那么就需要自己能够读懂代码并编写EXP(当然我个人觉得这个模式会很快被淘汰)。因此,深入一门语言的开发编程还是有必要的。这里推荐主要以python和golang为深入点,上手简单实用性强。
有句老话说的好,不懂开发的安全人员不是一个好安全人员。作为一个web手,我们还得了解一个网站的基本架构,并且得自己亲手写一些简单页面,搭一个简易网站。越了解网站,你的硬实力相应的也会越强,不管是在ctf还是在实际漏洞场景中都会更加容易的理解漏洞本质以及与业务的实际关系!
(1)c
这是最基础的,大一入学都会学习,但是与算法有所区别,这并不像ACM要求那么多(能会自然更好),看懂是最基础的,常见的加解密代码要会编写。
这里先简单提一下重要性:绝大多数的题目都是用该语言编写,并且ida反编译之后的伪代码就是伪C代码,如果C语言都不会,那就不用说写题了。
(2)java
该语言学习主要是针对安卓逆向,反编译apk文件之后的语言是java(大部分情况),如果想学习安卓逆向,该语言基础是不可少的,学习资料很多,自行上网搜索。
(3)python
当成一门胶水语言来看待,也就是什么都能干,因为语法足够简单,社区库很多,因此很多工作你只需要调包就可以完成。
https://liaoxuefeng.com/books/python/introduction/index.html
主要关注与网络有关的模块,建议以爬虫为切入点去学习!
(4)golang
https://golang-china.github.io/gopl-zh/
golang语言的特点就是其并发协程性能极高,且是一门编译型语言且支持跨平台,语法上和c语言很接近,性能也很不错,关注点主要是网络扫描器的开发(端口扫描,目录扫描,漏洞扫描等等)。
(5)go、rust
不同于以前,现在很多题目也会拿go、rust来编写,我们的学习目的也仅限于能看懂代码就行(针对写题而言),go学习Web也提到过,rust学习自行上网搜索。
ps:编程环境搭建
要使用一门语言进行开发,必定要安装一些依赖,比如编译工具和构建工具等等。这里要勤动手,学会装环境是CTF学习过程中不可缺少的一环。建议搭建开发环境的时候同时学习漏洞环境的搭建,顺带学习linux,docker等强大工具的用法(不要做只会点鼠标的猴子)。同时多使用GitHub和Google搜索,有什么问题也可以多搜多记录。
少用什么诸如以下标签的东西:
已经打包好的网盘链接,xx绿色工具,xx破解一键启动… 除非是真的找不到了,不然不推荐使用这些。
还有编译器,这里不推荐vscode,jb全家桶更好调试一点,然后专业版本要付费的,这里解决如下:https://ckey.run/
四、专项篇(cv至洋参,教练,大博哥,retu)
1、reverse
在比赛中逆向常见的要求就是给定一个程序,运行之后会让你输入,只有正确的输入会得到flag(表示输入正确的标志),因此核心需求就是逆向程序,获得正确的输入,而程序会设置种种防止你反编译的措施,比如加壳,花指令,SMC自修改代码等等操作,需要你掌握解决这些操作的技巧以及清晰的逻辑推理能力找到正确的输入。
基本介绍
https://ctf-wiki.org/reverse/introduction/#_12
先从逆向讲起吧,因为PWN的基础是建立在逆向上的,很多的工具、知识点都是互通的,因此我不会在后面的PWN的介绍中再重复写所需工具之类的。一些书籍(包括基础知识和一些其他内容): https://pan.baidu.com/s/1P12CruOt4Ap3Wdig10_D5g 提取码: flag
工具篇(提前装好魔法~)
下载工具注意安全性,很多工具可以在52pojie中找到,但也别都相信
https://github.com/horsicq/detect-it-easy (DIE)
https://pan.baidu.com/s/1vrXSJDigDGamW1j6BRpmQw 提取码: flag (ida9.2 逆向核心工具,反编译工具)
https://www.52pojie.cn/thread-1863194-1-1.html (010editor )
https://github.com/NationalSecurityAgency/ghidra
https://github.com/x64dbg/x64dbg
https://github.com/skylot/jadx
https://github.com/dnSpy/dnSpy
https://gchq.github.io/CyberChef/
github.com/frida/frida
https://github.com/iBotPeaches/Apktool
……..(各类型工具数不胜数,后续遇到再下载)
汇编代码
这就是二进制学习的核心了。汇编代码是每个学习二进制的人都必备的一门语言。不像其他语言,汇编代码必须精通。虽说现在绝大多数题目都是x86_64位,但是汇编代码的学习依旧可以从底层的8086学起,可以搜索 王爽汇编学习,同时网盘中也有32位的汇编代码学习,都可以看看。上面说的都是x86架构,还有其他比如MIPS、ARM等架构,有时候也会遇到这种架构的题目,这些架构的汇编指令又有所区别,需要自行了解。
环境搭建
一个linux环境是必不可少的,可以选择VMware搭建一个ubuntu虚拟机,也可以选择wsl2+ubuntu,如果对linux有一定了解的话更推荐wsl2+ubuntu,纯终端操作,便捷一些。
安卓逆向的话还需要一些模拟器,比如雷电模拟器之类的,这个看个人兴趣。
多架构环境,在汇编语言中也提到过题目会有多架构,因此要在Linux环境中安装qemu,可以运行调试多种架构,包括MIPS、ARM、RISC-V,以及调试kernel,自行上网了解。
前置知识
该部分并不是说完整掌握才能开始做题,而是要在做题中不断强化这方面的理解,一定要敢于尝试去写题,不要死磕书本和知识点,可以参考:https://www.kanxue.com/chm.htm
语言基础(会基础的汇编和C就可以开始写题)
进制和编码、大小端序、函数调用约定、操作系统相关概念等等,可以看开头网盘中的 《深入理解计算机系统》,该书内容很多,可以边学习边了解
常见的加密算法,比如RC4,tea家族,AES,DES,base家族等等,前面链接中的有所提及,但是并不建议一开始就看那么多,多刷题会遇到的
PE、ELF文件基本格式,常见的逆向程序都是这两个,需要掌握其基本的格式
https://ctf-wiki.org/executable/pe/pe-excutable/
https://ctf-wiki.org/executable/elf/structure/basic-info/?h=elf#elf-header
常见比赛知识点
仅作为简单记录
常见的加解密,上面提及过的
加壳:UPX壳(最常见)、PEcompacy壳、VMP等等,一些基础的壳可以通过工具直接脱壳,但是一些只能手动脱壳,详情可以参考下面文章:
https://hello-ctf.com/hc-reverse/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E7%9A%84%E5%A3%B3/
https://www.anquanke.com/post/id/272639
- VM逆向:出题人自己实现从字节码到汇编指令的操作,该部分要求逆向出出题人自定义的字节码与汇编指令的关系,耗时很长,需要掌握基础的汇编指令和从汇编到C语言的能力。文章很多,可以参考下面的
https://bbs.kanxue.com/thread-281119.htm
- 安卓逆向:和基本的逆向题一致,也是给定正确输入获得flag,但是安卓的文件是apk文件,所需环境和文件格式都不相同,可以作为一个专门的专题进行研究,具体的资料如下:
https://www.52pojie.cn/thread-1695141-1-1.html
https://bbs.kanxue.com/thread-285906.htm
- 代码混淆:常见的花指令、smc自修改代码、控制流平坦化等等,这部分知识点很多,都是遇到具体的题目再进行学习,下面给出花指令的学习文章:
https://bbs.kanxue.com/thread-279604.htm
https://mp.weixin.qq.com/s/rzEZd1bD867TjQFnd5flpA
- 游戏逆向:可以和安卓逆向一样,作为一个专门的专题进行研究,游戏开发所运用的架构常见是:godot、Ren`Py、Unity、UE等等,架构不同,对应的解包工具分析工具也不同,遇到之后再具体分析
2、pwn
pwn和逆向的区别就在于逆向只是逆向程序,找到正确的输入即可,而pwn是要在逆向程序的基础上找出漏洞,并针对该漏洞进行exp的编写及利用,简单来说就是某个程序会运行在一个环境中,我们根据该程序的漏洞来达到攻陷环境,获得环境的shell,然后拿到指定的文件,比如flag文件。建议看看Reverse的工具篇和前置知识再看这里:
环境搭建
工具和逆向有所区别,物理机有DIE和ida即可,其他工具都要在linux环境中,pwn呢其实核心点还是在环境搭建上,必须有一个linux环境,这部分也在逆向提到过,搭建可以参考该文章,美化其实不太建议(怕搞坏),看个人需求吧。
- https://blog.csdn.net/j284886202/article/details/139352067 VMware+ubuntu24
- https://hello-ctf.com/hc-pwn/wsl2_environment/ wsl2+ubuntu22,22的环境针对比赛而言可能有点老了,不过刚入手很推荐22,工具安装和第一个文章中一样
python环境推荐安装miniconda,给pwn题目专门一个python虚拟环境,推荐python3.10
知识点
程序保护机制
| 保护机制 | 主要作用 | 绕过思路 |
|---|---|---|
| CANARY (栈保护) | 在函数返回地址前插入一个随机值(Canary),函数返回前检查该值是否被篡改,从而检测栈溢出。 | 泄露Canary值后,在利用时将其恢复;或通过改写其它内存(如__stack_chk_fail的GOT表项)来绕过检查。 |
| NX (数据执行保护) | 将内存页标记为不可执行,防止在栈或堆上执行注入的Shellcode。 | 使用ROP (Return-Oriented Programming) 技术,利用程序中已有的代码片段(gadgets)来拼凑出恶意功能。 |
| PIE (位置无关可执行文件) | 程序加载时,其代码段、数据段等会被随机化到不同的内存地址。 | 需要先泄露程序的某个基址,计算出PIE的加载基址,才能利用程序内的gadgets或函数。 |
| ASLR (地址空间布局随机化) | 系统级防护,随机化共享库(如libc)、栈和堆的加载地址。 | 同样需要先泄露地址,例如泄露libc中某个函数的地址,进而计算出libc的基址和system等函数的地址。 |
| RELRO (重定位只读) | 分为Partial RELRO和Full RELRO。Full RELRO会将GOT (全局偏移表) 标记为只读,防止通过改写GOT表项来劫持程序流程。 | 若为Partial RELRO,可尝试改写GOT表项;若是Full RELRO,则需寻找其它利用方式,如修改__malloc_hook等hook指针。 |
| SHSTK (影子栈) | 硬件级防护。在CPU内部维护一个“影子栈”,用于存储返回地址。函数返回时,CPU会比较影子栈和实际栈上的返回地址,若不一致则抛出异常。 | 这是较新的强防护,目前绕过方法较少,通常需要配合信息泄露漏洞,或攻击未受SHSTK保护的代码段。 |
| IBT (间接分支跟踪) | 硬件级防护。要求所有间接跳转(如通过函数指针的调用)的目标地址必须以ENDBR64指令开头,否则触发异常。 | 绕过难度很高,通常需要寻找未启用IBT的代码或利用其它复杂的攻击原语。 |
栈
初期学习pwn最基础也是最核心的部分,基础的ret2系列,比如ret2syscall,ret2text,ret2libc到进阶一些的ret2gets,相关的知识点一定一定要牢牢掌握,这是学习后面知识点不可缺少的部分
https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/stack-intro/
【XMCVE 2020 CTF Pwn入门课程】https://www.bilibili.com/video/BV1854y1y7Ro?vd_source=f9ce00470949b6a04739f7ec9b4c24af (讲解的非常好,开始可能听不懂,但建议多看几次)
- 进阶一些的
- ret2gets: https://bbs.kanxue.com/thread-287048-1.htm (个人认为不会再出了,但是了解一下漏洞原理也是很好的)
- ret2shellcode:虽然作为ret2系列中的基础篇章,但是核心的点在于shellcode中,常见的shellcode谁都会写,但是题目通常会加沙箱,比如禁用某些函数,禁用某些字节码,这时候你该如何编写shellcode呢?这就是要核心掌握的内容,自己写了一些,但许久未更新:
https://plastic-tire-e58.notion.site/shellcode-190ca45ea8a4806cbf27e8ba5db7ce8b?pvs=74
https://blog.xmcve.com/2022/07/16/Sandbox%E6%80%BB%E7%BB%93/
- 栈迁移:
主要是栈溢出之后的空间太小,不够我们布置rop链,通常是多出两个机器字长,我们覆盖rbp/ebp为stack/bss(或者布置好rop链的地址,或者是可以布置rop链的地址),将ret_addr覆盖为 leave_ret这个 gadget的地址,这样就可以反复利用”stack” ,早期自己也写过文章,可以参考:https://downbeat.top/2024/10/23/%E6%A0%88%E8%BF%81%E7%A7%BB-Pivoting/
格式化字符串
这算一个特殊的知识点,主要利用输入输出函数,比如 printf snprintf 而引发的漏洞。
下面是我早期写的文章,也可以上网搜索其他的
由于libc版本不同,偏移量也会有所不同,建议看看:
https://blog.csdn.net/j284886202/article/details/142406824?spm=1001.2014.3001.5501
堆 + IO_FILE
这部分可以说是pwn学习劝退的开始,因为堆的学习依赖于版本,从ubuntu16的glibc2.23到ubuntu26的glibc2.41,可以说每个glibc版本都有其对应的堆利用手法,常称为House of XXX ,技巧手法非常之多,并且需要查看glibc的源码。而IO_FILE也是一个难点,难度在于其技巧也很多,也是每个glibc版本不同,通常借助stdin,stdout,stderr,我们需要了解IO结构以及具体偏移是什么,vtable是什么等等内容,具体参考下面的文章介绍吧。
具体学习之前必须先看这个文章,因为不同glibc版本的堆结构,函数结构不太相同,需要patch成和题目环境相同的libc才好调试: https://blog.csdn.net/j284886202/article/details/142406824?spm=1001.2014.3001.5501
查看源码推荐网站:https://elixir.bootlin.com/glibc/glibc-2.31/source/malloc/malloc.c#L2924 (最好是本地也存一下各个glibc版本源码,线下断网时也可以看)
- 堆
初期学习看:
https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/introduction/
https://blog.csdn.net/qq_41202237/category_10328044.html?spm=1001.2014.3001.5515
House of 大全:
https://www.roderickchan.cn/zh-cn/2023-02-27-house-of-all-about-glibc-heap-exploitation/
个别House of系列可以看:
https://4xura.com/binex/heap/ (全英文,但是写的很好,还有渗透测试的文章,强推)
- IO_FILE
建议先看看最早提出这个概念的”大海阔”的文章:
http://angelboy.tw/ 里面的house of orange
一些基础知识可以看:
https://blog.xmcve.com/2022/08/14/%E5%AD%A6%E4%B8%8D%E5%AE%8C%E7%9A%84IO/#title-1
https://downbeat.top/2024/12/05/%E5%88%A9%E7%94%A8-IO-FILE%E7%BB%93%E6%9E%84/
后续的进阶内容也记录在House of 系列中,多刷题才会遇到
IO_2_1_stdin利用
https://blog.csdn.net/Mr_Fmnwon/article/details/144547328
IO_2_1_stdout利用
https://hollk.blog.csdn.net/article/details/113845320
kernel
这个师傅写的文章,很全面:
https://arttnba3.cn/2021/03/03/PWN-0X00-LINUX-KERNEL-PWN-PART-I/
3、misc
misc除去基本的图片、文件和音频等信息隐藏类的基础题型外,与实战方面相关的就是流量分析和OSINT等这几类了,它们都贴近更真实的攻防和应急响应的场景,对给定的文件或目标来信息收集、提取和分析攻击的行为和手段丫,侧重信息的处理分析,不像隐写那样比较偏向于脑洞~但其实这里面也有较大一部分的重复性和“眼力”的劳动的,如何自己研究小工具进行减负也是👍的
流量分析
主要是对一些常见协议的分析,异常流量特征的识别,从流量的角度来分析攻击链和攻击手段。拿到一个pcap包,从一堆数据包中还原攻击者的干坏事历程、还原文件、通过一段被加密的通信看看数据是怎样被暗地传出去的等等,来翻译数据包在说什么话。
拿到一个pcap包的话,首先要关注协议类型的占比,如果http协议占比大多数,就要往webshell流量传马等角度考虑考虑,再或是DNS或者ICMP占大多数的话,就要考虑是否在数据包的某个字段藏数据或者是构建了隐蔽隧道等等,然后再去进入下一步的分析,根据流量特征确定攻击ip,然后分析ip行为等,也可以从大字节的数据包开始探查,一般大流量肯定有猫腻。
工具
常用的就是wireshark/tshark了,这个在kali里是自带的,然后Windows的话直接官网安装就行了
网络分析工具——WireShark的使用(超详细)-CSDN博客
Kali Linux下载安装及配置(VMware Workstation虚拟机下载安装)
知识点
https://goodlunatic.github.io/posts/5422d65/
这个文章基本涵盖了流量分析的知识点和基本题型,包括USB、SQL注入、Webshell、NTLM与Kerberos认证、AD域、RTP、工控、蓝牙、邮件、无线、DNS、SSL/TLS加密、ICMP、VPN、ADS-B、OICQ协议以及损坏流量包分析,并总结了从海量流量包中精准定位异常流量的技巧
主要的练习平台
https://www.qsnctf.com/ ,solar的每个月的公益月赛,里面基本上每个月会出一些较贴合真实情景的题目,包括工控流量分析、钓鱼邮件样本的分析、勒索病毒的场景分析、攻击事件排查和应急响应的分析
https://xj.edisec.net ,玄机平台上也有很多比赛的流量分析题目
另外推荐一位csdn上师傅的博客,他的玄机wp里的知识点汇总和解题技巧都非常适合入手入门 https://peterpan.blog.csdn.net/?type=blog
常见webshell流量分析
主要是针对webshell这类管理工具的流量的识别和解密,这些工具的流量都是有特征可查的
一句话木马:Web安全-一句话木马_php一句话webshell-CSDN博客
一般是比较基础的,常见的就是无加密或者弱加密的一句话木马,流量中直接看到明文PHP代码,一般http contains “php”配合追踪流能直接看到
冰蝎流量:冰蝎webshell流量特征
哥斯拉流量:Webshell流量分析之哥斯拉Godzilla& 冰蝎Behinder - smileleooo - 博客园
USB流量:https://ctf-wiki.org/misc/traffic/protocols/usb/
这个也可以在nssctf里面进行练习,
工控协议
讲解Modbus协议的blog:https://blog.csdn.net/tiandiren111/article/details/118347661
下面有个工厂流量的工控协议分析,可以尝试一下
链接:https://pan.quark.cn/s/8c1a3829423a?pwd=VbUP
wp: 2025年Solar应急响应公益月赛-10月Writeup
样本分析
包括图片、音频、视频、文档、压缩包等的分析,一般是结合信息隐藏或者隐写和文件的特征结构特征来进行出题。
1、图片样本
工具
010editor https://blog.csdn.net/NS_ice/article/details/132398846?spm=1001.2014.3001.5506
Stegsolve https://pan.baidu.com/s/1UVS1LYVksQydxk3jeOqHkQ ip8v
命令行工具:zsteg、exiftool、stegsolve、binwalk、foremost、file、strings、steghid等,这几个算是常用的了,可以去了解了解
在ctfshow上同样也是可以进行练习,在misc入门的板块里包括了信息附加、文件结构理解和颜色通道LSB等 https://ctf.show/challenges#
知识点
这篇讲解了图片隐写基础以及原理
这篇对图片类题型相关的总结比较全面,可以阅读一下
https://blog.csdn.net/Hardworking666/article/details/120932217
这篇总结了常见文件的文件头尾格式
https://blog.csdn.net/xiangshangbashaonian/article/details/80156865?spm=1001.2014.3001.5506
2、音频/视频样本
和图片隐写的套路类似,只是呢藏数据的载体不同,通常是通过频谱图、LSB、摩斯密码或者变速来藏数据,大多工具可以直接解出,并不难的
工具
Audacity https://www.audacityteam.org/download/
SilentEye https://achorein.github.io/silenteye/
DeepSound https://github.com/Jpinsoft/DeepSound
mp3stego https://www.petitcolas.net/steganography/mp3stego/
知识点
大致讲解了与音频相关的 CTF 题目主要使用了隐写的策略
https://ctf-wiki.org/misc/audio/introduction/
3、压缩包样本
工具
010editor分析
ARCHPR暴力破解 https://blog.csdn.net/csjjjd/article/details/135098907
知识点
这个讲的很全面了,压缩包的文件头尾特征和伪加密等等
MISC:压缩包取证(zip爆破、明文攻击、伪加密、CRC32碰撞)_crc32加密
4、流量样本
对抓包文件.pcap/.pcapng的分析,这类就是术语上面的流量分析的题目了
5、系统样本
对内存镜像、磁盘镜像、系统日志文件的分析,有时候还会给个环境来进行溯源的分析(针对于这种的话就可以去练练玄机上应急响应这类题了
工具
Volatility https://github.com/volatilityfoundation/volatility3
Autopsy https://github.com/sleuthkit/autopsy
diskgenius https://www.diskgenius.cn/
玄机上也有一些练习题目 https://xj.edisec.net/challenges
知识点
https://r0fus0d.blog.ffffffff0x.com/post/memory-forensics/ ,这篇博客总结了内存取证的大致知识、工具使用和示例分析
6、程序样本
对可执行文件、脚本、恶意代码的分析,这里就是和逆向分析结合的比较紧密了,包括了静态分析和动态分析,动态的话就是可以在沙箱进行分析,奇安信和微步的云沙箱都很好用,然后静态分析的话我也不大擅长就不说了
感兴趣的可以在 https://pwn.college/system-security pwncollege里面学习学习
下面有个博客是关于动态行为分析的可以看看
https://www.anquanke.com/post/id/208208
GitHub上的恶意软件分析资源大合集
https://github.com/rshipp/awesome-malware-analysis
OSINT
总的来说,是从公开合法的信息来源来获得情报,如社交媒体内容、新闻报道和档案文件等。主要是在misc的网络谜踪,或者是在渗透时收集目标的公开数据等,但misc中还是这类网络谜踪的社工类题目为主,从社交平台来收集不经意泄露的个人信息等。
对于网络谜踪这类社工的题目的话可以在ctfshow https://ctf.show/challenges# 里稍微练习几个,不用太多,主要是掌握信息数据的收集、辨析和查询的能力。
1、搜索引擎
通过使用高级搜索技术,来发现隐藏的或公开的可访问信息
FOFA
这个可以进行学生认证,获得教育账户
360 QUAKE
https://quake.360.net/quake/#/index
Google Dorks
非常实用,主要是通过关键词来进行精准的搜索
此外,还有shodan、censys等。
2、域名和网络
Whois:域名注册信息 https://who.is/
微步:分析IP或域名背后的攻击链和组织 https://x.threatbook.com/
奇安信威胁情报中心 https://x.threatbook.com/
VirusTotal:文件和分析URL https://www.virustotal.com/
DNSDumpster:DNS 记录查询 https://dnsdumpster.com/
3、图像和地理
Google Images:反向图片搜索 https://images.google.com.hk/
ExifTool:查看图片元数据 https://exif.tuchong.com/
Google map:全球地图搜索 https://www.google.com/maps
Google Earth:地理空间分析
4、web
之前掌握了以上前置知识,在通过刷题+听课看文章掌握基本功(编程语言+owasp top10漏洞原理(文件包含,命令执行,sql注入,文件上传,身份伪造,xss,ssrf,ssti,xxe,反序列化)等扽)之后,你已经具备了解一些基础的ctf题目的能力,摸到了敲门砖。
现在你要做的就是找到自己的安全节奏,这个时候劝退了第二多的人。
(1)综合技能提升
手册:
https://hacktricks.wiki/zh/index.html
https://swisskyrepo.github.io/PayloadsAllTheThings/
到这个阶段了一般都是处于瓶颈期的时候了,因为该学的都差不多了。会出现一种窘况:难的题写不出,简单的题没意思(做出来成就感不强)。因此分水岭大概就是在这儿了,坚持下来往往很重要,这也是最能体现你搞安全热爱程度和天赋的时候了。
我觉得很大一部分原因还是积累不够,思路太过局限导致的。可以通过学习别人的wp去慢慢补充,,同时做一些比较综合的赛题,这里可以去找往年长城杯,ciscn,网鼎杯等国内顶级赛事的题去试试。记住不一定是越难的题越好,而是一些题目考察的思路是不是比较切合实际场景,,不要为了难而难(一些脑洞题连ai都写不出,那种还是算了~)。
https://github.com/CTF-Archives/2025-CISCN-Finals
这个仓库的更新速度还是可以的,里面包含一些选手自己免费投稿的真实比赛的赛题附件,大部分都是jar包,,docker部署文件等等,因此提前学会搭建漏洞环境也很重要。可以没事去看看别人的wp,当然最好是看自己写过的题,想积累只看别人写也没问题。
微信公众号搜索比赛名;
先知社区 https://xz.aliyun.com/news (自己觉得自己wp不错也可以积极投稿!)
这里总结几个比较难的点:
java安全
https://github.com/Drun1baby/JavaSecurityLearning
https://xz.aliyun.com/picture-catrow?id=5
主要是关注反序列化漏洞利用链和内存马利用两部分,学这个很吃个人对于java语言一些特性的学习,如:动态代理,反射,注解等特性的理解。玩玩很有意思,算是web安全里我觉得比较有趣的部分了,当然学起来很吃时间。
AI工具链相关的安全问题
Python相关框架的漏洞和Node.js相关的漏洞,现在各种各样的ai agent框架和工具,难免出现安全问题,因此后面这部分的漏洞占比会逐渐上升。
https://xz.aliyun.com/picture-catrow?id=6
靶场综合渗透(大部分出现在半决赛/决赛)
https://xz.aliyun.com/picture-catrow?id=2
Linux下
主要是Linux下权限提升、反弹shell、维权手段、代理搭建等知识点。
https://websec.readthedocs.io/zh/latest/intranet/linux/index.html
https://github.com/0dayCTF/reverse-shell-generator
https://github.com/fatedier/frp
https://github.com/nicocha30/ligolo-ng
Windows下
内网横向移动,Windows下的权限提升,域渗透。
https://rivers.chaitin.cn/blog/cqj69i10lnedo7thpu70
https://github.com/N1etzsche0/GOAD
在域渗透之前,首先需要了解一下什么是域。
https://academy.hackthebox.com/app/module/74
有了上面的认知之后,面对有关域渗透的文章就不会看得云里雾里。以我个人经验来说,域渗透大致可以分为这几步:获取凭据->确认凭据有效->收集域信息->分析信息->利用漏洞横向->获取域控权限。凭据的获取方法不一,凭据的验证大多是通过smb完成。由于域的特性,知晓一组凭据就可以获取域内所有信息。在此基础上整理分析是后续的关键,常见搜集域内信息的工具有
https://github.com/NH-RED-TEAM/RustHound
https://github.com/dirkjanm/BloodHound.py
https://github.com/SpecterOps/SharpHound
通常我们会把域信息交予Bloodhound来分析,在这里可以清楚地看出域内各用户、群组、机器相互之间的关系。
域渗透就是利用这些信息发现域内经典漏洞与权限错误配置来横向移动至更高权限的用户、群组与机器。具体利用的手法有很多,诸如约束委派、影子凭据、哈希传递等等,涉及到impacket、msf、bloodAD等工具的使用,这一方面需要多去打前面提到的靶场做练习,这里不多展开。
五、一个合格的ctf战队还有ctf实验室需要什么
1、ctf战队分工
每支参赛队伍建议3-4人,按以下角色分工:
| 角色 | 职责 | 技能要求 |
|---|---|---|
| Web手 | 负责WEB方向所有题目 | SQL注入、XSS、CSRF、代码审计、SSRF、JWT攻击等 |
| 二进制手(PWN/REV) | 负责PWN和逆向题目 | 汇编语言、GDB调试、IDA逆向、堆栈 exploitation |
| 密码手/MISC手 | 负责密码学、MISC、流量分析 | 密码算法原理、编码转换、Wireshark、隐写工具 |
| 队长(综合) | 统筹协调、AI工具运用、应急响应 | 全面技术视野、团队管理、大模型调用能力 |
队长组建队伍时,一定要均衡考虑队员的擅长方向,尽量不要重叠。2026年赛事强调AI辅助解题,建议团队中至少有一名成员熟练掌握大模型调用与Prompt工程,能够高效利用本地化部署的AI模型辅助分析。
2、战队日常
氛围很重要,我感觉就是咱们实验室没有那种互相交流的感觉,然后希望大家就是学这一个竞赛有自己的搭子,比如说互相告诉复现了什么漏洞很有意思,
然后战队内部也可以多在bugku上面打打awd,聚在一起解题,你像湖科他们那边就很好,每一个方向都有一个负责人,然后新生对ctf感兴趣的就拉到一个大群里面来,每周在群里面,不管你是新生还是老师傅都开会,分享自己学到的东西,然后没有参加的就自动出局,跟着参加会议的就留下来,这种模式就是一个正向的循环。
很多同学比如我之前就是比较孤立,比如说我学的web方向,其他的方向就是完全大白痴,什么都不会,这个在综合渗透里面就是大忌,我之前看红队笔记只要二进制的入口我就不会看那个视频。所以说希望大家什么方向都懂一点点,然后团队一起解题的时候配合才会好,综合渗透讲究的就是一个配合
3、一个合格的ctf实验室要干什么
这是我希望以后能看见的
第一个就是有一个好的氛围,大家能够天天聚在一起
然后就是要有一份传承,在每一个方向,传承不只是笔记,也可以是咱们实验室人员的自己的妙妙小工具,你像那种顶级的红队统一都有自己的渗透框架
还有一个就是可以搞一个实验室的官方blog,你像衡阳师范他们就是这样,官方的blog里面发点安全研究文章啊,实验室成果啊
本文完,谢谢观看,祝愿师傅们生活愉快,早日成为大hacker
made by c01sini,专题部分cv至洋参,教练,大博哥,retu。
有问题的可以联系我或者加我的微信qq:13787782556