CTF特训营:技术详解、解题方法与竞赛技巧pdf下载

CTF特训营:技术详解、解题方法与竞赛技巧百度网盘pdf下载

作者:
简介:CTF特训营:技术详解、解题方法与竞赛技巧
出版社:机械工业出版社
出版时间:2020-06-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介
  本书主要从Web、Reverse、PWN、Crypto、APK、IoT 6个方面对CTF的入门知识、学习方法和常见题型进行了介绍,并且结合实际题目对相关知识点进行讲解,同时结合线上赛、线下赛对竞赛技巧进行了总结。从定位上来说,本书并不能让读者读完就成为“职业竞技选手”,而是希望读者能够从本书中知道自己对哪些方面感兴趣,要进一步学习哪些方面的知识,达到CTF入门的目的。因此,本书面向的人群是CTF的初学者。当然,如果有经验的读者想要跨领域学习其他类型的题目的解法,也可以从本书中获取一些灵感。
作者简介
  FlappyPig
  国内老牌知名CTF战队,曾获数十个各级CTF竞赛冠亚季军,具备国际CTF竞赛水准,具备丰富的CTF参赛经验。先后获得XCTF联赛总冠军、XNUCA总决赛冠军、CISCN冠军、TCTF/0CTF(Defcon外卡赛)冠军、WCTF世界黑客大师挑战赛季军,连续三年闯进Defcon决赛,Defcon最好成绩第10名。战队开发维护了用于CTF赛事评级的CTFRank网站。
  现在以r3kapig联合战队的方式参赛。
  战队成员挖掘并披露漏洞获得CVE编号上百枚,向各类SRC报备漏洞数百个。战队成员在Geekpwn、天府杯、PWN2OWN等漏洞挖掘类竞赛中也取得了不错的成绩。
  战队主要成员目前就职于阿里巴巴、腾讯、京东等,从事网络安全、漏洞挖掘相关工作。在网络安全竞赛、漏洞挖掘、渗透测试等领域具有非常深厚的经验积累,擅长Web、应用层软件、操作系统、区块链、嵌入式等多领域的漏洞挖掘与利用。
目录
版权信息
前言
第一篇 CTF之Web
第1章 常用工具安装及使用
1.1 Burp Suite
1.2 Sqlmap
1.3 浏览器与插件
1.4 Nmap
第2章 SQL注入攻击
2.1 什么是SQL注入
2.2 可以联合查询的SQL注入
2.3 报错注入
2.4 Bool盲注
2.5 时间盲注
2.6 二次注入
2.7 limit之后的注入
2.8 注入点的位置及发现
2.9 绕过
2.10 SQL读写文件
2.11 小结
第3章 跨站脚本攻击
3.1 概述
3.2 常见XSS漏洞分类
3.3 防护与绕过
3.4 危害与利用技巧
3.5 实例
第4章 服务端请求伪造
4.1 如何形成
4.2 防护绕过
4.3 危害与利用技巧
4.4 实例
第5章 利用特性进行攻击
5.1 PHP语言特性
5.1.1 弱类型
5.1.2 反序列化漏洞
5.1.3 截断
5.1.4 伪协议
5.1.5 变量覆盖
5.1.6 防护绕过
5.2 Windows系统特性
第6章 代码审计
6.1 源码泄露
6.2 代码审计的方法与技巧
第7章 条件竞争
7.1 概述
7.2 条件竞争问题分析及测试
第8章 案例解析
8.1 NSCTF 2015 Web实例
8.2 湖湘杯2016线上选拔赛Web实例
8.3 0CTF 2017 Web实例
8.4 2019 WCTF大师赛赛题剖析:P-door
本篇小结
第二篇 CTF之Reverse
第9章 Reverse概述
9.1 逆向分析的主要方法
9.2 汇编指令体系结构
9.2.1 x86指令体系
9.2.2 x64指令体系
9.3 逆向分析工具介绍
9.3.1 反汇编和反编译工具
9.3.2 调试器
9.3.3 Trace类工具
第10章 Reverse分析
10.1 常规逆向分析流程
10.1.1 关键代码定位
10.1.2 常见加密算法识别
10.1.3 求解flag
10.2 自动化逆向
10.2.1 IDAPython
10.2.2 PythonGdb
10.2.3 pydbg
10.2.4 Angr
10.3 干扰分析技术及破解方法
10.3.1 花指令
10.3.2 反调试
10.3.3 加壳
10.3.4 控制流混淆
10.3.5 双进程保护
10.3.6 虚拟机保护
10.4 脚本语言的逆向
10.4.1 .NET程序逆向
10.4.2 Python程序逆向
10.4.3 Java程序逆向
本篇小结
第三篇 CTF之PWN
第11章 PWN基础
11.1 基本工具
11.2 保护机制
11.3 PWN类型
11.4 常见利用方法
11.5 程序内存布局
11.6 真题解析
第12章 栈相关漏洞
12.1 栈介绍
12.1.1 函数栈的调用机制
12.1.2 函数参数传递
12.2 栈溢出
12.2.1 基本概念
12.2.2 覆盖栈缓冲区的具体用途
12.3 栈的特殊利用
12.4 栈喷射
12.5 线程栈
12.6 真题解析
12.6.1 {ZCTF-2015}guess(PWN100)
12.6.2 {ZCTF-2015}spell(PWN300)
12.6.3 {Codegate-2015}Chess(PWN700)
12.6.4 {RCTF-2015}Welpwn(PWN200)
第13章 堆相关漏洞
13.1 堆介绍
13.1.1 堆基本数据结构chunk
13.1.2 堆空闲块管理结构bin
13.1.3 malloc基本规则
13.1.4 free基本规则
13.1.5 tcache
13.2 漏洞类型
13.3 利用方法
13.3.1 最基本的堆利用
13.3.2 unlink
13.3.3 fastbin attack
13.3.4 forgotten chunk
13.3.5 house of force
13.3.6 house of spirit
13.3.7 house of orange
13.3.8 堆喷射
13.3.9 更多堆利用技巧
13.4 真题解析
第14章 格式化字符串漏洞
14.1 基本概念
14.2 信息泄露与修改
14.3 额外技巧
14.4 真题解析
14.4.1 {CCTF-2016}PWN3(PWN350)
14.4.2 {RCTF-2015}nobug(PWN300)
14.4.3 {LCTF-2016}PWN200
第15章 整型漏洞
15.1 宽度溢出
15.2 符号转换
15.3 数组越界
15.4 真题解析
第16章 逻辑漏洞
16.1 基本概念
16.2 竞态条件漏洞
16.3 真题解析
第17章 Attack&Defense模式
17.1 修补方案
17.1.1 大小修改法
17.1.2 函数替换法
17.1.3 .eh_frame段Patch法
17.1.4 其他方法
17.2 攻防策略
本篇小结
第四篇 CTF之Crypto
第18章 Crypto概述
第19章 编码
19.1 hex
19.2 urlencode
19.3 morsecode
19.4 jsfuck
19.5 uuencode
19.6 base家族
第20章 古典密码
20.1 移位密码
20.1.1 简单移位密码
20.1.2 曲路密码
20.1.3 云影密码
20.1.4 栅栏密码
20.2 替代密码
20.2.1 单表替代密码
20.2.2 多表替代密码
第21章 现代密码
21.1 分组密码和序列密码
21.1.1 DES/AES基本加解密
21.1.2 分组密码CBC bit翻转攻击
21.1.3 分组密码CBC选择密文攻击
21.1.4 分组密码CBC padding oracle攻击
21.1.5 Feistel结构分析
21.1.6 攻击伪随机数发生器
21.2 公钥密码
21.2.1 RSA基础
21.2.2 直接模数分解
21.2.3 费马分解和Pollard_rho分解
21.2.4 公约数模数分解
21.2.5 其他模数分解方式
21.2.6 小指数明文爆破
21.2.7 选择密文攻击
21.2.8 LLL-attack
21.2.9 Wiener Attack&Boneh Durfee Attack
21.2.10 共模攻击
21.2.11 广播攻击
21.2.12 相关消息攻击
21.2.13 DSA
21.3 哈希
21.3.1 哈希碰撞
21.3.2 哈希长度扩展攻击
第22章 真题解析
22.1 SUPEREXPRESS
22.2 VIGENERE
22.3 Revolver
22.4 Railgun
本篇小结
第五篇 CTF之APK
第23章 APK基础
23.1 Android题目类型
23.2 Android基本架构
23.2.1 Android的Dalvik虚拟机
23.2.2 Native层
23.3 ARM架构基础知识
23.3.1 函数调用/跳转指令
23.3.2 出栈入栈指令
23.3.3 保存/恢复寄存器的值
23.4 adb
23.5 APK文件格式
第24章 Dalvik层逆向分析
24.1 Dalvik基础知识
24.1.1 寄存器
24.1.2 类型
24.1.3 方法
24.1.4 指令特点
24.2 静态分析
24.2.1 使用Apktool反编译APK程序
24.2.2 使用dex2jar生成jar文件
24.2.3 使用jd-gui查看反编译的Java代码
24.2.4 使用FernFlower反编译Jar文件
24.2.5 使用Android Killer/jadx/APK Studio逆向分析平台
24.2.6 使用JEB进行静态分析
24.2.7 其他的静态分析软件
24.3 动态调试
24.3.1 使用log调试
24.3.2 smali动态调试
24.3.3 使用Xposed框架Hook进程
24.3.4 使用Frida框架Hook进程
24.4 Dalvik层混淆及加固技术
24.4.1 ProGuard混淆
24.4.2 DEX破坏
24.4.3 APK伪加密
24.4.4 APK增加数据
24.4.5 DEX隐藏
第25章 Native层逆向
25.1 Native层介绍
25.1.1 正向——使用NDK编写Native层应用
25.1.2 JNI调用特征分析
25.2 使用IDA Pro静态分析
25.3 动态调试
25.3.1 使用IDA Pro进行动态调试
25.3.2 使用GDB进行动态调试
25.3.3 使用Frida框架HOOK进程
25.4 OLLVM混淆及加固技术
25.4.1 -fla
25.4.2 -bcf
25.4.3 -sub
本篇小结
第六篇 CTF之IoT
第26章 IoT基础知识
26.1 什么是IoT
26.2 什么是嵌入式系统
26.3 嵌入式系统的基本概念
26.4 CTF中常见的IoT题型归类
第27章 IoT固件逆向工程
27.1 常见IoT架构介绍
27.2 芯片手册的寻找与阅读
27.3 使用IDA手动寻找固件入口点
27.4 寄存器地址和SRAM地址的处理方法
27.5 IDA之CPU高级选项
27.6 动态调试环境搭建
27.7 专业调试工具
27.8 反编译工具
第28章 固件结构分析
28.1 常见固件类型
28.2 Flash文件系统
28.3 固件基地址确定方法
28.4 固件分析工具
第29章 无线信号分析
29.1 无线通信基本理论介绍
29.2 常见调制方式与解调方法
29.3 Matlab在数字信号处理中的应用
第30章 经典赛题讲解
30.1 PCTF2016:Confused ARM
30.2 UCTF2016资格赛:TWI
30.3 UCTF2016决赛:Normandie
30.4 ACTF2016:4G Radio
30.5 UCTF2016资格赛:传感器(1)(2)
30.6 UCTF2016资格赛:Add
本篇小结
前言
  为什么写这本书
  撰写本书的想法起源于我和麦香的一次思想碰撞。每一个CTF战队的发展其实都面临着一个问题,那就是“如何传承”。作为一个联合战队,随着老成员走向工作岗位,如何用良好的机制实现新老更替,是战队管理者需要认真考虑的问题。我们也尝试过公开招募成员,但是从他们实习期的表现来看,这种方式是很难获得优秀血液的。战队在学校也做了很多招新和培养的尝试,很多学生咨询如何学习CTF。我们会耐心地询问他们的情况,然后讲述自己当时是如何学习的,并且推荐一些方法。但是我们发现,很多人并没有耐心和足够的时间学习,而是想一步登天。CTF是一门偏重于实践的学问,仅靠读一本书、一篇论文,或者学一门课远远不够的,它需要足够的兴趣和精力,不停地做题、实战、锻炼,并没有捷径可走。
  道理虽然如此,但是对于初学者来说,缺少入门指引就会感到迷茫,不知道去做什么题,也不知道去学什么。因此我就产生了一个想法—写一本书带领新人入门CTF。我将该想法告诉“猪群”(战队群)中的成员,结果麦香说他也想到了写书的事情(可谓心有灵犀)。于是我们将CTF的知识按照题目类型进行了分类,然后根据战队中每个人的专长,将每一篇交由合适的人来负责撰写,于是本书就诞生了。
  本书特色
  本书主要从Web、Reverse、PWN、Crypto、APK、IoT 6个方面对CTF的入门知识、学习方法和常见题型进行了介绍,并且结合实际题目对相关知识点进行讲解,同时结合线上赛、线下赛对竞赛技巧进行了总结。从定位上来说,本书并不能让读者读完就成为“职业竞技选手”,而是希望读者能够从本书中知道自己对哪些方面感兴趣,要进一步学习哪些方面的知识,达到CTF入门的目的。因此,本书面向的人群是CTF的初学者。当然,如果有经验的读者想要跨领域学习其他类型的题目的解法,也可以从本书中获取一些灵感。
  阅读本书之前,首先建议读者认真思考以后想要深入研究的领域,是成为一名Web选手,还是成为一名PWN选手。如果想要成为一名Web选手,则推荐先从W3CSchool开始学起,再来阅读本书的Web章节,最后学习Crypto章节。如果想要成为一名PWN选手,那么必须先掌握计算机组成原理、操作系统、汇编语言三门课程,然后再来看本书的PWN章节、Reverse章节、APK章节、Crypto章节,最后还应学习IoT章节。
  学习CTF并不是一朝一夕的事情,但也不需要花费三年五载才能入门。大家平时工作、学习的任务也非常繁重,很难静下心来专门抽出大量的时间来刷题,那么每一场CTF竞赛就显得额外关键了。认真参加每一场CTF竞赛就可以得到快速提升,没有必要在平常刻意进行题海锻炼(当然,如果有闲暇时间多做一做会更好)。几乎每周都有一场CTF比赛,大家可积极参与,不一定非要取得名次。通过边学边做的方式可以解答一批题目,至于其他的题目,线下赛一定要多看别人的Writeup,因为对Writeup的学习才是最迅速的提升方式。这样下来,半年之内基本上就可以打进国内的很多决赛了。很多人参赛时不会做题目,也不愿意学习别人的Writeup,那么就失去了参加这场竞赛对这些人来说意义,个人能力也很难得到提升。
  资源获取及反馈
  本书中所列举的题目大部分是战队自己出的,也包括一些国外的题目,并且搭载在汪神的OJ上(https://www.jarvisoj.com)。本书的每一篇均由不同的作者撰写,所以行文风格会有所不同。书中难免会出现错误,如果发现问题可以及时与我们联络:beafb1b1@gmail.com。
  战队介绍
  战队于2014年组建,目前主要以与Eur3ka组成联队r3kapig的方式进行竞赛,战队的主要精力集中在国际赛事和国内优秀赛事上。感谢在战队创立之初一起拼搏的ling、lu、小墨、医生师傅、hu狗,感谢为战队成长和本书撰写做出巨大努力的白师傅、丁满、joker、汪神、pxx、石总、兰斯、muhe、chu牛、bendawang、lowkey、猪头、simple、蛋总、flier、swings、老鼠,感谢麦香使了写书任务完成。
  CTF赛制介绍
  最初的CTF赛制就是Jeopardy赛制(还有若干变种)。这种赛制采用的是解题模式,解出一道题目提交flag就得分。后来出现了AD赛制,在AD(Attack·Defense)赛制中,每支队伍维护一台或若干台gamebox,每支队伍维护的gamebox上都有相同的题目服务。每个服务的启用权限均是题目的权限,选手能拿到的权限略高于题目的权限,则可以进行后门清理等操作,也可以替换题目的bin文件,用于patch。主办方有root的权限。主办方每间隔固定时间(5~20分钟)都会针对每道题目向gamebox推送一个flag。不同题目的权限无法访问相互的flag。选手通过PWN掉服务,获取对应题目的flag值并提交。同一支队伍的flag分每轮都是固定的,如果被多个队伍获取,则均分。主办方会针对每道题编写若干检查器来判断服务是否正常运行。如果题目被判定失效,那么该题也会扣分。通常来说,与题目flag每轮的服务一样,这个分数会被所有没有判定失效的队伍均分,这种计分方式被称为零和赛制。零和赛制下,AD出现了很多弊端,因此社区正在不断地对AD赛制进行更新。Defcon Final作为先行者推出了非零和的计分方法,并通过Git的方式对赛题进行运维,这使得选手只须拿出少量精力放到metagame上,而把更多的精力放到题目本身上。目前来说,社区更倾向于采用单纯的Jeopardy赛制,因为对于CTF来说,题目本身比赛制重要得多。