CTF那些事儿
书籍作者:李舟军 |
ISBN:9787111729914 |
书籍语言:简体中文 |
连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 |
下载次数:5967 |
创建日期:2024-04-20 |
发布日期:2024-04-20 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
内容简介
本书创新性的提出新的CTF知识学习框架,按照安全杂项入门、隐写术、Web渗透、密码学基础、软件逆向工程、二进制程序漏洞利用(PWN)的顺序构建知识体系,每节附有大量实操练习,即使是完全没有网络安全基础的“新人”,也能对照书中操作,独立复现实验内容。
编辑推荐
适读人群 :高校网络空间安全专业学生、安全企业的技术人员、互联网企业的安全技术人员等
本书由北航Lancet战队核心成员倾力编写,根据多年来的CTF竞赛和培训经验,总结了全新的CTF知识学习框架,按照安全杂项、隐写术、密码学、Web渗透、软件逆向工程、二进制程序漏洞利用(PWN)、工业控制系统安全的顺序安排章节内容,每章中附有大量案例和实操练习。任何网络安全初学者都可以对照书中的讲解,系统学习CTF相关的知识并进行实践,熟练掌握相关的技术、工具和比赛技巧。本书适合作为CTF竞赛参赛者的训练教材和培训材料,也适合作为网络安全技术人员培训教程或技术参考书。
前言
前 言
为什么写这本书
CTF(Capture The Flag)一般翻译为“夺旗”,起源于古代的战争,后来逐渐转变为欧美的一种传统运动。在网络空间安全领域,CTF已经成为一种重要的竞赛形式。
CTF比赛是快速提升网络安全实战技能的重要途径,已成为各个行业选拔网络安全人才的通用方法。但是,本书作者在从事CTF培训的过程中,发现存在几个突出的问题:
1)线下CTF比赛培训中存在严重的“最后一公里”问题,线下培训讲师的水平参差不齐。
2)国内高等院校和职业院校的网络空间安全学科与专业缺乏实战型、系统化的教材和配套实验课程。例如,Base64编码是网络安全行业必备的基础知识,但是学校的教材并不涉及该知识点,也没有专门的实验课对该知识进行讲解。
3)大部分CTF比赛书籍对想学习网络空间安全技术的新人不够友好,很多初学者找不到快速、有效的学习方法。
为了解决上述问题,帮助零基础的学习者快速掌握基本技能,同时吸引更多的人关注网络空间安全技能的学习,推进CTF比赛的发展,本书创新性地提出新的CTF知识学习框架,并在每一章附有大量实操练习,即使是没有网络空间安全知识基础的新手,也能按照书中的操作独立复现实验内容。
本书不仅讲授了网络空间安全相关的基础知识和操作技能,还探讨了CTF赛题的本质,着重阐述了面对不同类型题目时的分析思路和方法。比如,我们首次提出“图像隐写三板斧”“逆向真经”等解题思维模式,并较为全面地总结了CTF比赛中对工控安全相关知识的考查方式。从线下培训的效果来看,这些方法的实用性极强。
网络空间安全技术不应该被神秘化,更不应该被人为地高深化、复杂化。我们希望通过喜闻乐见的方式,以通俗易懂、幽默风趣的语言普及网络空间安全的知识,从而提高公众的网络空间安全意识,进而促进全行业水平的提高,为我国成为网络安全强国打下坚实的基础。
CTF比赛的意义
在一些人眼中,CTF比赛就是一种游戏,这种看法不无道理。一是因为绝大多数CTF赛题难以上升到高深的理论研究层面;二是受比赛时间与场景搭建等客观条件的制约,CTF赛题的复杂度和运算量与现实的业务场景有巨大的差距。
古语有云:不以一眚掩大德。在作者看来,CTF比赛对于我国网络安全行业发展具有举足轻重的作用。
2015年,我国在高等院校正式设立“网络空间安全”一级学科与专业,经过这些年的努力,专业建设取得了长足的发展,但是在课程和知识体系方面与传统专业相比仍有不足。CTF比赛有利于促进高校网络空间安全相关专业的课程体系建设,并弥补教学过程中课程衔接不紧密带来的“知识盲区”,尤其是那些教材中没有出现但在实践中经常遇到的重要知识点。例如,通过学习软件逆向分析技术,读者可以将汇编语言、编译原理、数据结构、C语言、操作系统、计算机体系结构等课程中学到的知识融会贯通,综合运用,从而为今后解决实际的网络安全问题奠定坚实的基础。
目前,国内专业的网络安全人才非常短缺,同时各个企业对于员工的网络安全技能的要求与日俱增。与其他专业人员相比,网络安全从业人员的工程实践能力尤为重要。CTF比赛是网络安全人才从小白到高手的演武厅与练兵场。通过参与CTF比赛,可以提高网络安全实战技能。CTF比赛可以快速提升能力,弥补学校教育中“重理论,轻实践”的不足。大部分CTF题目不需要选手具备特别深入的理论知识,即使已经忘记了相关的理论知识,通过CTF比赛的锻炼,选手的网络安全实战技能仍可以有效提高,从而满足企业日常在网络安全方面的需求。
最后,在我国现行的法律制度下,CTF比赛是普及和学习网络安全知识的有效途径。随着《中华人民共和国网络安全法》的实施,网络安全技术野蛮发展的时代一去不复返。但现阶段网络安全问题层出不穷,危害日益严重。CTF比赛不仅满足了企业在真实场景下培养员工网络安全技能的需求,也规避了网络漏洞肆意传播的危害。这也是越来越多的企业将CTF比赛作为员工内部考核的主要方式的原因。
综上所述,CTF比赛的重要特点是能够快速、高效地培养出满足当前社会发展需求的网络安全人才。
本书特色
1.提出了适合国内读者的网络安全学习框架
CTF比赛起源于国外,很多学习资料也是由英文翻译而来,但这些资料可能并不适合国内学习者学习使用。本书根据国内计算机学科与网络空间安全学科的知识体系,按照安全杂项(隐写)、密码学基础、Web渗透、软件逆向工程、二进制程序漏洞利用(PWN)、工业控制系统安全的顺序构建知识框架。
之所以采用这样的学习框架,是基于以下考虑:安全杂项方面的介绍以工具为主,适合新手快速学习和入门,其中的很多知识点也是其他方向的基础;密码学在Web渗透、软件逆向工程、PWN中极为常见,所以安排在安全杂项之后讲解;Web渗透一直是网络安全领域的热点,因此放在密码学之后学习;接下来讲解二进制程序的知识,先介绍软件逆向分析,然后介绍二进制程序漏洞利用,因为越来越多的PWN题目要求先读懂程序的逻辑,所以把逆向的知识放到PWN前面讲解,而且把PWN部分分为两章,主要包括栈漏洞利用、堆漏洞利用以及如何防护;最后介绍当前比较火热的工业控制系统安全。
2.零基础高效掌握网络安全技能
很多读者对于学习网络安全知识有畏难心理,为了帮助他们实现网络安全基础知识和实操技能从“0”到“1”的突破,本书提供了适当的工具和丰富的例题,这些例题代表性强,实操方便,有助于读者理解书中讲授的知识点。为方便初学者,每个例题都给出了详细的思路和解题步骤。虽然书中用到的一些工具可能已经不是网络安全实践中的主流工具,但对于新手而言,这些工具仍有十分重要的示范意义。本书的目的是介绍CTF比赛的基本知识和实操技能,因此并没有加入较多“炫技”的内容。希望读者通过本书的学习,打下牢固的基础,进而能够自学网络安全中更高级的内容。
谁适合读这本书
本书适合以下读者阅读:
1)想系统学习网络安全基础技能的读者。本书作者的初衷,是希望以通俗易懂的方式呈现网络安全基础知识和技能,凡是对网络安全感兴趣的人都可以学习本书。
2)政府机关、事业单位、国企及其他企业的技术人员。对于各类企业中需要参加CTF比赛的读者而言,本书可以作为赛前训练的指导书,帮助他们在短时间内快速掌握网络安全技能。
3)高等院校和职业院校学生。对于高等院校和职业院校的学生,本书可以作为他们学习网络安全知识的“准教材”,有效补充理论知识与实操技能的不足。
4)网络安全培训和比赛从业人员。我们希望抛砖引玉,使本书成为网络安全培训的基础教材和重要参考书,促进CTF比赛和培训行业的进一步发展。
如何使用和阅读这本书
本书提供所有例题需要的工具包和脚本等资源,以方便读者自行练习。根据本书的章节结构,每节的例题会单独保存为一个文件夹。例如,第1章的1.1.1节Base64编码中,有例题b64steg.txt,这个例题保存的路径为:/CTF那些事儿/题目/第1章例题/1-1/b64steg.txt。其他题目的路径以此类推。读者可以到出版社网站下载上述资源,或发邮件至[email protected]索取本书资源。
考虑到例题中所使用的工具或脚本在CTF比赛中有一定的广泛性和适用性,因此工具和脚本按照题目类型分文件夹保存,方便读者后续使用。例如,第1章和第2章均属于安全杂项(MISC)范畴,这两章例题所对应的工具都在文件夹“/CTF那些事儿/工具包/MISC-工具包.zip/”中。例题b64steg.txt所使用的解题脚本b64steg.py就在上述文件夹中。
由于本书主要讲解CTF比赛的初级知识,因此提供的工具和脚本对于大部分简单和中等难度题目有较好的效果,但并不能保证可以解答所有的CTF比赛题目。如果题目难度较大或考点和书中例题不一致,我们建议读者根据题目需求修改工具包中的脚本,千万不要生搬硬套。
另外,本书尽可能详尽地给出操作步骤的截图和说明,读者最好能对照例题讲解进行同步实践,从而深入理解解题思路和相关工具的使用方法。
本书涉及的知识和技术与真实世界中的网络攻防息息相关,希望读者在学习了相关内容后,能够进一步提高网络防御能力,在实践中切实维护单位或企业的网络安全,为我国的网络安全建设添砖加瓦。
编写分工
本书由北京航空航天大学的Lancet网络安全战队倾力打造。Lancet战队指导老师李舟军任本书主编,负责本书总体策划和编写组织工作,并审校全稿。Lancet战队的主力队员赵宇飞、王宇、张翼鹏和杨立群分别负责各章的编写。本书共有9章,各章的主要内容介绍如下:
第0章?主要介绍CTF比赛的历史、CTF比赛的赛制、国内外知名的CTF比赛和战队,以及阅读本书前需要准备的相关实验环境。该章由李舟军、赵宇飞撰写。
第1章?讲解常见的安全杂项题目类型和解题方法。
第2章?介绍安全杂项中隐写部分的相关知识,重点介绍“图像隐写三板斧”解题套路。
第1章和第2章由赵宇飞撰写。
第3章?介绍CTF比赛中的密码学知识体系,以及常见密码的加密过程和破解方法。其中,3.0节、3.1.0节至3.1.10节由赵宇飞撰写,3.1.11节及之后的内容由王宇撰写。
第4章?介绍Web渗透的基础知识、常见漏洞类型和工具。该章由张翼鹏撰写。
第5章?讲述软件逆向工程的原理和常用工具,并提出了解决逆向问题的原则性方法—逆向真经。该章由赵宇飞撰写。
第6章?重点讲解栈溢出原理、栈漏洞利用以及格式化字符串漏洞。
第7章?针对堆的结构和漏洞利用方法展开介绍,并介绍如何对二进制程序打补丁。
第6章和第7章由王宇撰写。
第8章?介绍工业控制系统的基础概念、梯形图和指令表等PLC编程语言基础知识、常见工业控制通信协议以及PLC漏洞利用。该章由杨立群撰写。
本书的出版离不开许多朋友的大力帮助,他们是翟优、董浩、梁明月、邢浩、原铭、谢子鸣、杨琛、简容和罗杰,在这里向他们表示衷心感谢。
由于作者水平有限,书中的错误在所难免,恳请各位读者批评指正。
接下来,沿用我国传统戏曲中的表演程序,以两首定场诗开启我们的CTF之旅!这两首诗蕴含了CTF学习方法的要义,希望各位读者在学习过程中仔细体会。祝大家阅读
愉快!
四海纵横先筑基,
三千世界任翱翔
目录
目 录
前言
第0章 开启CTF之旅 1
0.0 CTF比赛的历史 1
0.1 CTF比赛的常见赛制 1
0.2 国内外知名的CTF比赛 3
0.3 国内外知名的CTF战队 4
0.4 学习前的实验环境准备 7
0.4.0 虚拟机运行软件 7
0.4.1 搭建Python脚本运行环境 9
0.4.2 搭建Docker使用环境 11
第1章 安全杂项 12
1.0 安全杂项类赛题简介 12
1.1 常见的编码与解码 13
1.1.0 ASCII编码 13
1.1.1 Base64编码 15
1.1.2 Base32编码 18
1.1.3 Base16编码 19
1.1.4 其他Base系列编码 19
1.1.5 Shellcode编码 21
1.1.6 Quoted-printable编码 22
1.1.7 UUencode编码 22
1.1.8 XXencode编码 23
1.1.9 URL编码 24
1.1.10 摩斯码 24
1.1.11 JSFuck编码 25
1.1.12 Brainfuck编码 26
1.1.13 编码类题目的通用解题方法 28
1.2 网络流量分析 30
1.2.0 网络协议的基础知识 31
1.2.1 Wireshark的基本使用方法 33
1.2.2 CTF流量分析的通用方法 42
1.2.3 ICMP 44
1.2.4 Telnet 45
1.2.5 FTP 47
1.2.6 DNS 48
1.2.7 HTTP 50
1.2.8 USB 59
1.2.9 TLS 60
1.2.10 IEEE 802.11 62
1.3 日志分析 65
1.3.0 Web日志及分析方法 65
1.3.1 系统设备日志及分析方法 70
1.4 电子取证分析 75
1.4.0 电子取证的常用技术 75
1.4.1 文件恢复 77
1.4.2 磁盘取证分析方法 79
1.4.3 内存取证分析方法 81
1.5 压缩文件格式与破解 84
1.5.0 ZIP压缩包格式 84
1.5.1 伪加密 87
1.5.2 压缩包密码爆破 89
1.5.3 CRC碰撞破解压缩包 91
1.5.4 已知明文攻击 93
1.6 信息搜集与搜索引擎的高级用法 95
1.6.0 信息搜集方法 95
1.6.1 搜索引擎的高级用法 97
第2章 安全杂项——隐写术专题 99
2.0 隐写术简介 99
2.1 图像隐写方法及信息提取 100
2.1.0 常见的图像隐写方法 101
2.1.1 PNG文件格式及隐写方法 102
2.1.2 JPG文件格式及隐写方法 106
2.1.3 GIF文件格式及隐写方法 110
2.1.4 图像隐写三板斧 115
2.1.5 图像隐写三板斧2.0 124
2.1.6 图像和像素值的转换 133
2.2 音频隐写方法及信息提取 135
2.2.0 常见的音频文件格式解析 135
2.2.1 基于波形图的隐写 137
2.2.2 基于频谱图的隐写 138
2.2.3 音频LSB隐写 139
2.2.4 MP3文件隐写 141
2.2.5 拨号音识别 144
2.2.6 音频隐写总结 146
2.3 视频隐写方法及信息提取 147
2.4 文本隐写方法及信息提取 148
2.4.0 基于文本内容的隐写 149
2.4.1 基于Word文档的隐写 149
2.4.2 基于PDF文档的隐写 151
2.5 二维码 155
2.5.0 QR码的基础知识和常用工具 156
2.5.1 QR码画图 158
2.5.2 QR码修复 159
第3章 密码学基础 161
3.0 密码学简介 161
3.1 古典密码 165
3.1.0 栅栏密码 165
3.1.1 凯撒密码 169
3.1.2 ROT位移密码 170
3.1.3 Atbash密码 172
3.1.4 猪圈密码 172
3.1.5 培根密码 173
3.1.6 简单替换密码 175
3.1.7 仿射密码 177
3.1.8 单表代换密码总结 178
3.1.9 多表代换密码 179
3.1.10 维吉尼亚密码 179
3.1.11 希尔密码 184
3.2 对称密码 185
3.2.0 对称密码的基本模型 185
3.2.1 流密码和分组密码的本质区别 186
3.2.2 xor密码 186
3.2.3 RC4 190
3.2.4 Feistel密码结构 191
3.2.5 DES 194
3.2.6 AES 195
3.2.7 填充 196
3.2.8 分组模式 197
3.3 非对称密码 206
3.3.0 RSA基础 206
3.3.1 模数N相关攻击 208
3.3.2 指数e相关攻击 212
3.3.3 私钥d相关攻击 214
3.3.4 广播攻击 215
3.3.5 ECC基础 217
3.3.6 ECC加密 218
3.3.7 Pohlig_Hellman攻击 219
3.3.8 Smarts攻击 220
3.4 哈希函数 221
3.4.0 哈希函数的基本模型 221
3.4.1 MD5 222
3.4.2 哈希长度扩展攻击 223
第4章 Web渗透基础 228
4.0 引言 228
4.0.0 概述 228
4.0.1 HTTP理论基础 229
4.0.2 环境搭建与工具使用 234
4.1 Web信息收集的技巧 241
4.1.0 端口扫描 241
4.1.1 目录探测 247
4.1.2 指纹识别 255
4.2 暴力破解 258
4.2.0 用户名/密码爆破 258
4.2.1 参数爆破 264
4.2.2 密钥爆破 268
4.2.3 随机数爆破 271
4.2.4 字典 275
4.3 PHP弱类型 277
4.3.0 PHP代码基础 277
4.3.1 PHP弱类型问题 280
4.4 上传漏洞 283
4.4.0 前端JavaScript绕过 287
4.4.1 MIME-Type绕过 288
4.4.2 黑名单绕过 288
4.4.3 .htaccess绕过 289
4.4.4 后缀名绕过 290
4.4.5 图片马 291
4.4.6 其他类型的问题 296
4.5 SQL注入漏洞 297
4.5.0 SQL注入 297
4.5.1 SQL注入漏洞的分类 300
4.5.2 SQL注入漏洞实战 301
4.5.3 SQLmap 307
4.5.4 宽字节注入 309
4.5.5 WAF绕过 310
4.5.6 利用SQL注入读写文件 313
4.5.7 报错注入 314
4.6 文件包含 317
4.6.0 php://filter进阶 321
4.6.1 文件包含的分类 322
4.6.2 文件包含中的截断和phar:// 322
4.7 命令执行 324
4.7.0 危险函数 332
4.7.1 无参数RCE 333
4.8 CSRF与XSS 338
4.8.0 CSRF 338
4.8.1 CSRF防御 340
4.8.2 XSS 341
4.9 SSRF 344
第5章 软件逆向工程 347
5.0 软件逆向工程简介 347
5.0.0 软件是怎么生成的 347
5.0.1 软件逆向工程的定义及目标 349
5.0.2 软件逆向工程的发展历史 349
5.1 CTF软件逆向工程入门 350
5.1.0 逆向题目的特点 350
5.1.1 逆向真经 351
5.2 静态分析方法 352
5.2.0 静态分析的原理和技巧 352
5.2.1 静态分析的常用工具 355
5.2.2 静态分析实战 359
5.3 动态分析方法 383
5.3.0 动态调试的技巧 383
5.3.1 汇编 384
5.3.2 使用OllyDbg进行动态调试 392
5.3.3 使用GDB进行动态调试 399
5.3.4 使用IDA进行本地动态调试 403
5.3.5 使用IDA进行远程动态调试 407
第6章 进入 PWN 的世界 410
6.0 PWN简介 410
6.1 CTF中的PWN 410
6.2 栈溢出入门 414
6.2.0 认识栈结构 415
6.2.1 函数调用过程分析 415
6.2.2 Linux操作系统的基本保护
?机制 418
6.2.3 覆盖返回地址 419
6.2.4 覆盖返回地址到Shellcode 421
6.2.5 编写单个函数的ROP链 423
6.2.6 编写两个函数的ROP链 427
6.2.7 编写多个函数的ROP链 431
6.2.8 ret2syscall 433
6.2.9 用动态链接动态泄露system
?地址并利用 437
6.2.10 64位程序的栈溢出 442
6.2.11 未知远程libc的解法 443
6.3 格式化字符串 443
6.3.0 格式化字符串的原理 443
6.3.1 格式化字符串漏洞的利用 446
6.3.2 通过格式化字符串漏洞泄露
?栈上内容 447
6.3.3 通过格式化字符串漏洞泄露
?任意地址内存 448
6.3.4 通过格式化字符串漏洞覆盖
?任意地址内存 450
6.3.5 64位格式化字符串 456
6.3.6 格式化字符串的综合利用 456
6.4 栈溢出进阶技术 457
6.4.0 栈劫持 457
6.4.1 ropchain 463
6.4.2 Canary保护机制及其利用
?方式 463
6.4.3 __libc_csu_init的利用方式 472
6.4.4 ret2_dl_runtime_resolve 474
6.5 栈溢出和格式化字符串总结 484
第7章 PWN进阶 485
7.0 堆管理器 485
7.0.0 ptmalloc堆管理器的基本功能 485
7.0.1 malloc和free简介 486
7.0.2 内存分配背后的系统调用 487
7.1 堆相关的数据结构 488
7.1.0 malloc_chunk 488
7.1.1 bin 490
7.1.2 fast bin 492
7.1.3 small bin 493
7.1.4 large bin 495
7.1.5 unsorted bin 496
7.1.6 bin 的总结 497
7.2 malloc的基本算法 497
7.2.0 __libc_malloc 497
7.2.1 fast bin分配算法 498
7.2.2 small bin分配算法 499
7.2.3 large bin分配算法1 500
7.2.4 unsorted bin分配算法 501
7.2.5 large bin分配算法2 503
7.2.6 寻找更大的bin链 504
7.2.7 使用top chunk 505
7.2.8 总结 506
7.3 free函数的基本算法 506
7.4 堆利用的基本方法 507
7.4.0 House of Prime 507
7.4.1 House of Lore 508
7.4.2 House of Spirit 509
7.4.3 House of Force 512
7.4.4 House of系列方法总结 514
7.5 链表攻击 514
7.5.0 unlink 514
7.5.1 fast bin 攻击 520
7.5.2 unsorted bin 攻击 524
7.6 其他漏洞形式及其利用 526
7.6.0 off by one 527
7.6.1 off by null 530
7.6.2 fast bin 三重释放攻击 533
7.7 例题讲解 536
7.8 tcache机制及其利用方式 542
7.8.0 tcache的重要数据结构与
?源码解读 542
7.8.1 tcache dup(glibc 2.27) 5