大家好呀!我刚参加了美国线上CTF比赛,收获超多,特别感谢老师教我的干货知识。今天就和大家分享我的学习笔记。CTF像刺激冒险,有挑战有惊喜。
学习中我懂了很多知识技能,像密码学、Web安全、Misc题型等,它们是构建能力城堡的基石。遇到困难别退缩,克服困难就成长。
希望我的心得助大家在CTF之路前行,愿大家都像勇敢探险家,在网络安全世界发光发热,一起努力,未来比赛共同进步,收获多多,加油!
一、CTF简介
(一)起源与发展
- CTF起源于1996年DEFCON全球黑客大会,是网络安全爱好者的竞技游戏,旨在替代黑客间真实攻击的技术比拼方式。
- 2012年前后,国外有20 - 30场知名CTF国际赛事,国内尚无CTF及选手;现今,每年有100场国际比赛,国内CTF赛事众多,涌现出大量选手,国内战队在国际赛事中成绩优异,如b1o0p获DEF CON 2016亚军。
(二)赛事相关
- 知名战队
- 0ops:上海交通大学组织,领队姜开达,队长Slipper、副队长Lovelydream曾是蓝莲花战队队员,成功组织多场国内知名赛事。
- 蓝莲花战队(blue - lotus):由多所高校学生组成,是中国首支闯入DEFCON CTF全球总决赛的战队,获全球第5名,每年举办BCTF赛事。
- 217:台湾大学资讯工程学系学生组成,多次参赛。
- 知名赛事
- 国际赛事
- DEFCON CTF:CTF赛事中的“世界杯”。
- UCSB iCTF:面向世界高校。
- Codegate CTF:韩国首尔“大奖赛”,冠军奖金高。
- 国内赛事
- XCTF全国联赛:奖金丰厚,权威性高,影响力大。
- AliCTF:阿里巴巴组织,奖金高。
- XDCTF:西安电子科大组织,侧重渗透实战。
- HCTF:杭电信安协会承办,涵盖多方向。
- 湖湘杯:湖南省网信办承办,特等奖奖金高。
- 国际赛事
(三)竞赛模式
- 解题模式:在线比赛,选手自由组队,人数不限。题目陆续放出,解出一题提交flag得分,比赛结束按总分排名。
- 攻防模式:现场比赛,多为CTF决赛形式。队伍人数受限,注重临场反应与解题速度,需攻击目标主机获取权限,通过攻防对抗得分,最终按得分排名。
- 混合模式:结合解题与攻防模式,如iCTF国际CTF竞赛。参赛队伍先通过解题获初始分数,再通过攻防对抗增减分数,以最终得分定胜负。
(四)CTF意义与人才去向
- 意义
- 提升思维、快速学习和技术能力。
- 为参与者提供名利机会。
- 成为信息安全领域稀缺人才,类似电竞选手。
- 人才去向
- 进入互联网巨头公司(如腾讯、阿里)从事安全技术工作。
- 继续攻读学位,在高校或科研机构从事研究。
- 创业,如长亭科技等。
二、题型介绍
(一)题型侧重
- PWN、Reverse:侧重汇编、逆向理解,要求掌握相关编程技术和分析工具。
- Crypto:偏重数学、算法学习,需具备脚本编写能力,涉及多种加密算法和密码学知识。
- Web:注重技巧沉淀和快速搜索能力,涵盖多种Web漏洞类型,时效性强,紧跟热点。
- Misc:内容复杂,包含信息搜集、编码转换、数字取证与隐写分析等,考验综合知识和创新思维。
(二)题型形式
- Web:包括SQL注入、XSS、CSRF、文件上传、文件包含、框架安全、PHP漏洞、代码审计等众多类型。
- Reverse:涉及多平台编程技术逆向分析,如Windows、Linux、Android,包括源代码、二进制文件、APK文件分析,以及加解密、内核编程、算法、反调试和代码混淆技术。
- Pwn:目标是在Linux平台利用漏洞获取服务器shell并拿到flag,需掌握二进制/系统调用和漏洞利用脚本编写。
- Crypto
- 古典密码学:如摩斯密码、换位密码(栅栏、凯撒、曲路、列移位密码)、替换密码(单表替换、简单替换、多表替换、培根密码、埃特巴什码、猪圈密码、键盘密码)等,形式多样,依赖创造力,安全性较低。
- 现代密码学:包括对称加密(DES、3DES、AES、RC4)、非对称加密(RSA、椭圆曲线加密)、哈希函数(MD5、SHA - 1、SHA - 512等)、数字签名(RSA签名、DSA签名),基于理论,安全性较高。
- Misc
- 信息搜集(Recon):介绍获取信息渠道和搜索引擎技巧。
- 编码转换(Encode):涵盖常见编码形式及转换,如ASCII、Base家族、ShellCode、Quoted - printable、URL、Unicode、HTML实体编码等。
- 数字取证与隐写分析(Forensic && Stego):包括文件分析、隐写、内存镜像分析和流量抓包分析等,涉及隐写取证、文件嵌套、搜索引擎利用等。
三、密码学学习笔记
(一)密码学概述
- 发展阶段
- 古典密码阶段(1949年以前):早期加密简单,多为字谜,工业革命和二战后有发展,出现复杂算法和机械加密设备。
- 近代密码阶段(1949 - 1975年):计算机诞生使加密进入电子时代,算法复杂程度和安全性提高。
- 现代密码阶段(1976年至今):Diffie和Hellman提出公开密钥密码体制概念,为密码学提供新方向。
- 密码设计目标:机密性、完整性、可用性、认证性、不可否认性,前三者为CIA三要素。
- 常见攻击方法:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击。
(二)古典密码
- 摩斯密码:用短脉冲(点)和长脉冲(横)组合表示信息,常用于电报、无线电通信、求救信号等,适合英语通信,在业余无线电通信中全球统一。
- 换位密码
- 栅栏密码:将明文分组,按特定顺序组合字符得密文,可通过分组和组合方式加密解密。
- 凯撒密码:针对字母,按固定数目移动字母顺序加密。
- 曲路密码:需约定算法,将明文填入表格,按约定路径加密。
- 列移位密码:根据明文字母在字母表中的顺序编号,按列写出密文。
- 替换密码
- 单表替换加密
- 移位密码:类似凯撒密码,处理多种字符,用ASCII码表移位,破解需遍历。
- 简单替换密码:每个明文字母对应唯一不同字母,密钥个数多,破解难度高于凯撒密码。
- 多表替换加密
- 棋盘密码(Polybius):将明文字母转换为棋盘格中数字组合。
- 维吉尼亚密码:使用一系列凯撒密码组成密码字母表,加密时需填充密钥并查表。
- 其他类型加密
- 培根密码:密文字符为a和b,明文字符替换为长度为5的字符串,可通过表格加密解密,有常规和扩展密码表。
- 埃特巴什码:密钥字母倒序加密。
- 猪圈密码:图形密码,用特定图形符号表示字母。
- 键盘密码:包括坐标法和字母对应法,根据规则加密解密。
- 单表替换加密
(三)编解码
- ASCII编码:对照全表分非打印控制字符、打印字符和扩展打印字符,CTF常用打印字符部分,用于字符与二进制、十进制、十六进制转换。
- Base家族:Base64、Base32、Base16可将8位字节编码转化为6位、5位、4位,Base64常用于表示、传输和存储二进制数据,编码原理是将3个8位字节转化为4个6位字节,前面补0,需映射表,编码后数据需满足6与8的倍数关系,会出现填充字符“=”。
- ShellCode编码:以\x开头,用于将源文本编码为特定格式,常用于漏洞利用。
- Quoted - printable编码:MIME的一种实现方式,用“=”与十六进制表示,常用于邮件内容编码。
- URL编码:又叫百分号编码,规定数字、字母可直接用,特殊字符需%xx编码处理,已成为规范,多语言支持。
- Unicode编码:国际组织制定,容纳世界文字符号,有四种编码方式(&#x [Hex]、&# [Decimal]、\U [Hex]、\U + [Hex])。
- HTML实体编码:用于在HTML中表示特殊字符,如“"”表示引号。
(四)现代密码
- 对称密码
- 特点:使用相同密钥加密解密,速度快、实现简单、效率高、密钥短。
- 常见算法
- DES:使用56位密钥对数据加密,密钥长度64位,实际参与运算56位,每64比特为一组,迭代16次,加密和解密过程有特定规则。
- 3DES:对DES加强,使用两次或三次DES算法加密,安全性高但速度慢。
- AES:常用对称加密算法,支持128位、192位和256位密钥,分组长度128位,密钥长度不同加密轮数不同,安全性高且速度快。
- RC4:流密码算法,将密钥和明文异或生成密文,因安全性漏洞不推荐使用。
- 非对称密码
- 特点:加密和解密使用不同密钥(公钥和私钥),公钥可分发,私钥保密,可用于数字签名,密钥长。
- 常见算法
- RSA:由公钥和私钥组成,公钥加密私钥解密,广泛应用于网络安全,如ssh协议。加密过程为信息m通过公钥(e,N)加密得密文c(m^e mod N = c),解密时密文c通过私钥(d,N)解密得明文m(c^d mod N = m),生成密钥对需找两个质数计算相关参数。目前对RSA的攻击主要是密文求离散对数困难,可通过爆破N尝试破解,N越长破解难度越大。
- Diffie - Hellman(DH):密钥交换协议,双方约定大素数p和生成元g,各自选私密随机数,通过计算交换并再次计算得到共享密钥,原理基于离散对数问题。
- Elliptic Curve Cryptography(ECC):利用椭圆曲线上离散对数问题,安全性高,密钥短,广泛应用于移动设备和物联网领域,加密和解密涉及椭圆曲线上点运算。
(五)摘要算法
- MD5:消息摘要算法第五版,输入任意长度信息,输出128位固定长度二进制数据,不可逆、高度离散、抗碰撞,常用于密码保护、数据库、数字签名、文件完整性校验等。
- 其他算法
- SHA - 1:生成160位摘要,常用于文件完整性校验,因易受碰撞攻击逐渐被淘汰。
- SHA - 256:属于SHA - 2系列,生成256位摘要,应用广泛。
- SHA - 3:称为Keccak算法,与SHA - 2结构算法不同,安全性和性能更好。
- RIPEMD - 160:广泛应用于比特币等加密货币领域,是欧洲CRYPTREC项目候选摘要标准之一。
四、Misc学习笔记
(一)文件/图片操作与隐写
- 文件类型识别
- File命令:用于识别无扩展名或扩展名错误的文件类型,以便修改扩展名打开文件,格式为“file文件名”。
- Winhex:在Windows下通过查看文件头类型判断文件类型,不同文件类型有特定文件头标识。
- 文件分离操作
- Binwalk工具:Linux下分析和分离文件工具,能判断文件是否由多个文件合并,分离成功后在目标文件目录生成“文件名_extracted”文件夹存放分离文件,用法为“binwalk -e文件名”(kali未用root登录需加“–run - as = root”)。
- Foremost:当binwalk无法正确分离文件时使用,将目标文件复制到kali,执行后按文件类型在目标文件目录分离文件,安装命令为“apt - get install foremost”,用法为“foremost文件名 - o输出目录名”。
- dd命令:手动分离文件工具,格式为“dd if =源文件of =目标文件名bs = 1 count = xx skip =开始分离的字节数”,参数if指定输入文件名,of指定输出文件名,bs设置读写块大小,count指定读取块数量,skip指定从输入文件开头跳过的块数后开始复制。
- Winhex(手动分离):在Windows下利用winhex程序对文件手动分离,将目标文件拖入,定位到需分离部分复制并保存为所需后缀。
- 文件合并操作
- Linux下:使用“cat合并的文件>输出的文件”命令批量合并文件名相似文件,完整性检测用“md5sum文件名”计算MD5值。
- Windows下:使用“copy /B合并的文件输出的文件名”命令批量合并,完整性检测用“certutil - hashfile文件名md5”计算MD5值。
- 文件内容隐写:将KEY以十六进制形式写在文件中,通常在开头或结尾,分析时重点观察这些部分,若在中间可搜索关键字查找,Windows下可用Winhex查看,优先观察首尾,搜索flag或key等关键字。
- 图片文件隐写
- 图片混合:把两张图片重叠隐藏其中一张,推荐工具Stegsolve.jar,打开图片调节按钮直到出现与flag有关的图片。
- LSB(最低有效位):通过修改图片属性隐藏信息,理论上可隐藏大量数据。用Stegsolve.jar打开图片,发现通道异样后勾选相关通道并导出保存为png格式文件获取隐藏信息。
(二)压缩文件分析
- 伪加密:压缩文件加密或解压错误时,先检查是否伪加密。zip文件通过标识符显示加密状态,将加密文件文件头第九第十个字符修改为0000可变为无加密状态,操作方法是用winhex打开压缩文件,找到加密文件头字段修改。
- 暴力破解:通常用ARCHPR.exe工具破解rar文件。攻击类型可选择暴力破解或掩码破解,暴力破解需设置范围选项,建议用1 - 9位数字密码和系统自带英文字典;掩码破解可根据已知密码部分设置掩码,如知道前3位是abc,后3位为数字,掩码设为abc???,选择暴力破解范围为数字后进行破解。
(三)流量包文件分析
利用Wireshark过滤器筛选报文,常用过滤命令包括过滤IP(如“ip.src eq x.x.x.x or ip.dst eq x.x.x.x”等)、过滤端口(如“tcp.port eq 80”等)、过滤协议(如“tcp/udp/arp/icmp/http/ftp/dns/ip…”)、过滤MAC(如“eth.dst ==A 0: 00: 00: 04: c 5: 84”)、包长度过滤(如“udp.length == 26”等)、http模式过滤(如“http.request.method == “GET””等)。
通过这些过滤命令可快速定位和分析流量包中的关键信息,如在buuctf:wireshark例题中,通过“http contains “flag””等过滤命令找到包含flag的报文。
以下是一些学习 CTF 的资源推荐:
- CTF-All-In-One:项目地址为 https://gitcode.com/firmianay/CTF-All-In-One 。按照 CTF 的主要领域分类,包括 Web 安全、逆向工程、取证分析、密码学等,有详尽教程、挑战题和参考文献。采用 Markdown 格式编写,易于阅读和维护,还整合了流行的 CTF 实战平台链接和指南。
- CTF Write-up 大全:项目地址 https://gitcode.com/scwuaptx/CTF 。是一站式的网络安全挑战解决方案与学习宝库,汇聚众多实战经验分享,涵盖信息安全多个子领域的知识,有跨领域集成、动态更新、实战导向等特点。
- CTF Resources:项目地址 https://gitcode.com/gh_mirrors/reso/resources 。精心编排的知识宝库,覆盖网络攻防、逆向工程、密码学、二进制漏洞等关键领域资料,不断更新最新技术和工具,具有全面性、交互性、实践导向、即时更新等亮点。
- Awesome CTF:项目地址 https://gitcode.com/ 。致力于整理和分享有关 CTF 挑战创建与解决的全方位资源库,涵盖从创建挑战所需工具到解决挑战的实用程序以及教育资源,活跃度高、易于贡献、有教育价值且提供一站式服务。
- i 春秋:国内较好的安全知识在线学习平台,地址:https://www.ichunqiu.com/main 。
- XCTF_OJ 练习平台:由 XCTF 组委会组织开发的网络安全技术对抗赛练习平台,地址:https://adworld.xctf.org.cn/ 。
- 网络信息安全攻防学习平台:提供基础知识考查、漏洞实战演练、教程等资料,地址:http://hackinglab.cn/index.php 。
- Awesome CTF Book:开源项目,由 Ph0en1x-XMU 编撰,覆盖 Web 安全、逆向工程、密码学、取证分析、移动安全、硬件安全、编程基础等多个领域,包含工具使用说明、实战案例、解题思路和赛制介绍等内容。
- JarvisOJ:网址 https://www.jarvisoj.com/ ,由浙江大学系统安全实验室学生 Jarvis 开发的 CTF 在线答题系统,题目由作者参加过的各类比赛题目改变整合及部分原创题目组成。
- BUUCTF:网址 https://buuoj.cn/challenges ,安恒搭建的网安学习平台。
- websec:网址 http://www.websec.fr ,国外的偏向于 Web 安全方向的网站。
- ringzeroctf:国外的网站,方向覆盖全面,包括代码审计、逆向分析、漏洞攻击、Web、系统安全等。
- wargames:网址 http://overthewire.org/wargames/ ,基于游戏的让你学习安全技术和概念的黑客网站。
此外,还有一些 CTF 在线工具网站,如:
- ctf 在线工具箱:http://ctf.ssleye.com/ ,包含常用的编码、加解密、算法等。
- ctf 加解密工具箱:http://www.atoolbox.net/category.php?id=27 。
- ctfhub 在线工具:https://www.ctfhub.com/#/tools 。
同时,一些公众号也会发布 CTF 赛事信息及相关资源,例如“网络安全实验室”。另外,CTFwiki(https://ctf-wiki.github.io/ctf-wiki/#/introduction )也是入门必看的 wiki,包含 CTF 各项知识点。
靶场方面的资源有:
- 在线靶场:如 bugku(https://ctf.bugku.com/index.html )、buuctf(https://buuoj.cn/ )、ctfhub 靶场(https://www.ctfhub.com/#/index )、网络攻防世界(https://adworld.xctf.org.cn/ )、i 春秋(https://www.ichunqiu.com/competition )、浙大 oj(https://www.jarvisoj.com/ )等。
- 自己搭建靶场:如 sqli-labs、dvwa、owasp 靶场、dsvw 靶场、webgoat 靶场等,可通过相关链接下载并搭建。
同时,还提供了一些常用的网站,用于字符串二进制互转、栅栏密码、语言加密、与佛论禅、维吉尼亚解密、培根密码、摩尔斯电码、盲文在线解密、凯撒密码、进制转换、词频分析、草料二维码、uuencode、url 编码解码、serpent 加密解密、rot 编码、mime 编码、md5、js 加密、jjencode、crc32 等功能。
具体网址可参考上述内容中的相关链接。