打开主菜单

求真百科

从0到1·CTFer成长之路

来自 孔夫子网 的图片

从0到1·CTFer成长之路》,Nu1L战队 著,出版社: 电子工业出版社。

电子工业出版社成立于1982年10月,是工业和信息化部直属的科技与教育出版社[1],享有“全国优秀出版社”、“讲信誉、重服务”的优秀出版社、“全国版权贸易先进单位”、首届中国出版政府奖“先进出版单位”等荣誉称号[2]

目录

内容简介

《从0到1:CTFer成长之路》主要面向CTF入门者,融入了CTF比赛的方方面面,让读者可以进行系统性的学习。本书包括13章内容,技术介绍分为线上赛和线下赛两部分。线上赛包括10章,涵盖Web、PWN、Reverse、APK、Misc、Crypto、区块链、代码审计。线下赛包括2章,分别为AWD和靶场渗透。3章通过Nu1L战队成员的故事和联合战队管理等内容来分享CTF战队组建和管理、运营的经验。

作者介绍

Nu1L战队成员来自于上海科技大学、西华大学、成都信息工程大学、北京理工大学等全国多所高校,早是由两个研究Web的同学创建,队名源于计算机中语言中经常出现的"NULL”。

目录

CTF之线上赛

第1章 Web入门 3

1.1 举足轻重的信息收集 3

1.1.1 信息搜集的重要性 3

1.1.2 信息搜集的分类 3

1.1.2.1 敏感目录泄露 4

1.1.2.2 敏感备份文件 7

1.1.2.3 Banner识别 9

1.1.3 从信息搜集到题目解决 9

1.2 CTF中的SQL注入 12

1.2.1 SQL注入基础 12

1.2.1.1 数字型注入和UNION注入 12

1.2.1.2 字符型注入和布尔盲注 17

1.2.1.3 报错注入 22

1.2.2 注入点 24

1.2.2.1 SELECT注入 24

1.2.2.2 INSERT注入 26

1.2.2.3 UPDATE注入 27

1.2.2.4 DELETE注入 28

1.2.3 注入和防御 29

1.2.3.1 字符替换 29

1.2.3.2 逃逸引号 31

1.2.4 注入的功效 33

1.2.5 SQL注入小结 34

1.3 任意文件读取漏洞 34

1.3.1 文件读取漏洞常见触发点 35

1.3.1.1 Web语言 35

1.4.1.2 中间件/服务器相关 37

1.4.1.3 客户端相关 39

1.3.2 文件读取漏洞常见读取路径 39

1.3.2.1 Linux 39

1.3.2.2 Windows 41

1.3.3 文件读取漏洞例题 41

1.3.3.1 兵者多诡(HCTF 2016) 42

1.3.3.2 PWNHUB - Classroom 43

1.3.3.3 Show me the shell I(TCTF/0CTF 2018 FINAL) 45

1.3.3.4 BabyIntranet I(SCTF 2018) 47

1.3.3.5 SimpleVN(BCTF2018) 48

1.3.3.6 Translate(Google CTF 2018) 50

1.3.3.7 看番就能拿Flag(PWNHUB) 51

1.3.3.8 2013那年(PWNhub) 52

1.3.3.9 Comment(网鼎杯2018线上赛) 57

1.3.3.10 方舟计划(CISCN 2017) 58

1.3.3.11 PrintMD(RealWorldCTF 2018线上赛) 60

1.3.3.12 粗心的佳佳(PWNHUB) 62

1.3.3.13 教育机构(强网杯2018线上赛) 64

1.3.3.14 Magic Tunnel(RealworldCTF 2018线下赛) 65

1.3.3.15 Can you find me?(WHUCTF2019,武汉大学校赛) 67

小结 68

第2章 Web进阶 69

2.1 SSRF漏洞 69

2.1.1 SSRF的原理解析 69

2.1.2 SSRF漏洞的寻找和测试 71

2.1.3 SSRF漏洞攻击方式 72

2.1.3.1 内部服务资产探测 72

2.1.3.2 使用Gopher协议扩展攻击面 72

2.1.3.3 自动组装Gopher 80

2.1.4 SSRF的绕过 80

2.1.4.1 IP的限制 80

2.1.4.2 302跳转 82

2.1.4.3 URL的解析问题 83

2.1.4.4 DNS Rebinding 86

2.1.5 CTF中的SSRF 88

2.2 命令执行漏洞 92

2.2.1 命令执行的原理和测试方法 92

2.2.1.1 命令执行原理 93

2.2.1.2 命令执行基础 93

2.2.1.3 命令执行的基本测试 95

2.2.2 命令执行的绕过和技巧 95

2.2.2.1 缺少空格 95

2.2.2.2 黑名单关键字 97

2.2.2.3 执行无回显 98

2.2.3 命令执行真题讲解 100

2.2.3.1 2015 HITCON Babyfirst 100

2.2.3.2 2017 HITCON BabyFirst Revenge 101

2.2.3.3 2017 HITCON BabyFirst Revenge v2 103

2.3 XSS的魔力 104

2.3.1 XSS漏洞类型 104

2.3.2 XSS的tricks 108

2.3.3 XSS过滤和绕过 111

2.3.4 XSS绕过案例 117

2.4 Web文件上传漏洞 121

2.4.1 基础文件上传漏洞 121

2.4.2 截断绕过上传限制 122

2.4.2.1 00截断 122

2.4.2.2 转换字符集造成的截断 125

2.4.3 文件后缀黑名单校验绕过 126

2.4.3.1 上传文件重命名 126

2.4.3.2 上传文件不重命名 127

2.4.4 文件后缀白名单校验绕过 130

2.4.4.1 Web服务器解析漏洞 130

2.4.4.2 APACHE解析漏洞 131

2.4.5 文件禁止访问绕过 132

2.4.5.1 .htaccess禁止脚本文件执行绕过 133

2.4.5.2 文件上传到OSS 134

2.4.5.3 配合文件包含绕过 134

2.4.5.4 一些可被绕过的Web配置 135

2.4.6 绕过图片验证实现代码执行 137

2.4.7 上传生成的临时文件利用 140

2.4.8 使用file_put_contents实现文件上传 142

2.4.9 ZIP上传带来的上传问题 147

小结 156

第3章 Web拓展 157

3.1 反序列化漏洞 157

3.1.1 PHP反序列化 157

3.1.1.1 常见反序列化 158

3.1.1.2 原生类利用 160

3.1.1.3 Phar反序列化 163

3.1.1.4 小技巧 165

3.1.2 经典案例分析 170

3.2 Python的安全问题 172

3.2.1 沙箱逃逸 172

3.2.1.1 关键词过滤 172

3.2.1.2 花样import 173

3.2.1.3 使用继承等寻找对象 174

3.2.1.4 eval类的代码执行 174

3.2.2 格式化字符串 175

3.2.2.1 最原始的% 175

3.2.2.2 format方法相关 175

3.2.2.3 Python 3.6中的f字符串 176

3.2.3 Python模板注入 176

3.2.4 urllib和SSRF 177

3.2.4.1 CVE-2016-5699 177

3.2.4.2 CVE-2019-9740 178

3.2.5 Python反序列化 179

3.2.6 Python XXE 180

3.2.7 sys.audit 182

3.2.8 CTF Python案例 182

3.2.8.1 皇家线上赌场(SWPU 2018) 182

3.2.8.2 mmmmy(2018网鼎杯) 183

3.3 密码学和逆向知识 185

3.3.1 密码学知识 186

3.3.1.1 分组加密 186

3.3.1.2 加密方式的识别 186

3.3.1.3 ECB模式 186

3.3.1.4 CBC模式 188

3.3.1.5 Padding Oracle Attack 191

3.3.1.6 Hash Length Extension 197

3.3.1.7 伪随机数 200

3.3.1.8 密码学小结 202

3.3.2 Web中的逆向工程 202

3.3.2.1 Python 202

3.3.2.2 PHP 203

3.3.2.3 JavaScript 206

3.4 逻辑漏洞 207

3.4.1 常见的逻辑漏洞 207

3.4.2 CTF中的逻辑漏洞 211

3.4.3 逻辑漏洞小结 212

小结 212

第4章 APK 213

4.1 Android开发基础 213

4.1.1 Android四大组件 213

4.1.2 APK文件结构 214

4.1.3 DEX文件格式 214

4.1.4 Android API 215

4.1.5 Android示例代码 216

4.2 APK逆向工具 217

4.2.1 JEB 217

4.2.2 IDA 219

4.2.3 Xposed Hook 220

4.2.4 Frida Hook 222

4.3 APK逆向之反调试 224

4.4 APK逆向之脱壳 224

4.4.1 注入进程Dump内存 224

4.4.2 修改源码脱壳 225

4.4.3 类重载和DEX重组 227

4.5 APK真题解析 227

4.5.1 Ollvm混淆Native App逆向(NJCTF 2017) 227

4.5.2 反调试及虚拟机检测(XDCTF 2016) 230

小结 232

第5章 逆向工程 233

5.1 逆向工程基础 233

5.1.1 逆向工程概述 233

5.1.2 可执行文件 233

5.1.3 汇编语言基本知识 234

5.1.4 常用工具介绍 239

5.2 静态分析 243

5.2.1 IDA使用入门 243

5.2.2 HexRays反编译器入门 249

5.2.3 IDA和HexRays进阶 254

5.3 动态调试和分析 258

5.3.1 调试的基本原理 258

5.3.2 OllyDBG和x64DBG调试 258

5.3.3 GDB调试 264

5.3.4 IDA调试器 265

5.4 常见算法识别 273

5.4.1 特征值识别 273

5.4.2 特征运算识别 274

5.4.3 第三方库识别 274

5.5 二进制代码保护和混淆 276

5.5.1 抵御静态分析 277

5.5.2 加密 280

5.5.3 反调试 289

5.5.4 浅谈ollvm 296

5.6 高级语言逆向 297

5.6.1 Rust和Go 298

5.6.2 C#和Python 301

5.6.3 C++ MFC 302

5.7 现代逆向工程技巧 303

5.7.1 符号执行 303

5.7.1.1 符号执行概述 303

5.7.1.2 angr 304

5.7.1.3 angr小结 313

5.7.2 二进制插桩 313

5.7.3 Pin 314

5.7.3.1 环境配置 314

5.7.3.2 Pintool使用 317

5.7.3.3 Pintool基本框架 317

5.7.3.4 CTF实战:记录执行指令数 319

5.7.3.5 CTF实战:记录指令轨迹 322

5.7.3.6 CTF实战:记录指令执行信息与修改内存 325

5.7.3.7 Pin小结 330

5.8 逆向中的技巧 331

5.8.1 Hook 331

5.8.2 巧妙利用程序已有代码 331

5.8.3 Dump内存 332

小结 333

第6章 PWN 335

6.1 PWN基础 335

6.1.1 什么是PWN 335

6.1.2 如何学习PWN 335

6.1.3 Linux基础知识 336

6.1.3.1 Linux中的系统与函数调用 336

6.1.3.2 ELF文件结构 337

6.1.3.3 Linux下的漏洞缓解措施 338

6.1.3.4 GOT和PLT的作用 339

6.2 整数溢出 340

6.2.1 整数的运算 340

6.2.2 整数溢出如何利用 341

6.3 栈溢出 341

6.4 返回导向编程 346

6.5 格式化字符串漏洞 350

6.5.1 格式化字符串漏洞基本原理 350

6.5.2 格式化字符串漏洞基本利用方式 352

6.5.3 格式化字符串不在栈上的利用方式 354

6.5.4 格式化字符串的一些特殊用法 357

6.5.5 格式化字符串小结 358

6.6 堆利用 358

6.6.1 什么是堆 358

6.6.2 简单的堆溢出 359

6.6.3 堆内存破坏漏洞利用 360

6.6.3.1 Glibc调试环境搭建 360

6.3.6.2 Fast Bin Attack 361

6.6.3.3 Unsorted Bin List 367

6.6.3.4 Unlink攻击 371

6.6.3.5 Large Bin Attack(0CTF heapstormII) 375

6.6.3.6 Make Life Easier:tcache 379

6.6.3.7 Glibc 2.29的tcache 380

6.7 Linux内核PWN 381

6.7.1 运行一个内核 381

6.7.2 网络配置 381

6.7.3 文件系统 382

6.7.4 初始化脚本 382

6.7.5 内核调试 383

6.7.6 分析程序 383

6.7.7 漏洞利用 384

6.7.8 PWN Linux小结 387

6.7.9 Linux内核PWN源代码 387

6.8 Windows系统的PWN 389

6.8.1 Windows的权限管理 390

6.8.2 Windows的调用约定 390

6.8.3 Windows的漏洞缓解机制 391

6.8.4 Windows的PWN技巧 393

6.9 Windows内核PWN 394

6.9.1 关于Windows操作系统 394

6.9.1.1 80386和保护模式 394

6.9.1.2 Windows操作系统寻址 395

6.9.1.3 Windows操作系统架构 403

6.9.1.4 Windows内核调试环境 404

6.9.2 Windows内核漏洞 407

6.9.2.1 简单的Windows驱动开发入门 408

6.9.2.2 编写栈溢出示例 411

6.9.2.3 编写任意地址写示例 413

6.9.2.4 加载内核驱动程序 414

6.9.2.5 Windows 7内核漏洞利用 416

6.9.2.6 内核缓解措施与读写原语 426

6.9.3 参考与引用 431

6.10 从CTF到现实世界的PWN 431

小结 433

第7章 Crypto 435

7.1 编码 435

7.1.1 编码的概念 435

7.1.2 Base编码 436

7.1.3 其他编码 437

7.1.4 编码小结 438

7.2 古典密码 438

7.2.1 线性映射 438

7.2.2 固定替换 439

7.2.3 移位密码 440

7.2.4 古典密码小结 440

7.3 分组密码 441

7.3.1 分组密码常见工作模式 441

7.3.1.1 ECB 441

7.3.1.2 CBC 441

7.3.1.3 OFB 442

7.3.1.4 CFB 443

7.3.1.5 CTR 443

7.3.2 费斯妥密码和DES 444

7.3.2.1 费斯妥密码 444

7.3.2.2 DES 445

7.3.2.3 例题 447

7.3.3 AES 449

7.3.3.1 有限域 449

7.3.3.2 Rijndael密钥生成 451

7.3.3.3 AES步骤 452

7.3.3.4 常见攻击 453

7.4 流密码 457

7.4.1 线性同余生成器(LCG) 457

7.4.1.1 由已知序列破译LCG 458

7.4.1.2 攻破Linux Glibc的rand( )函数-1 460

7.4.2 线性反馈移位寄存器(LFSR) 460

7.4.2.1 由已知序列破译LFSR 461

7.4.2.2 攻破Linux glibc的rand( )函数-2 461

7.4.3 RC4 463

7.5 公钥密码 464

7.5.1 公钥密码简介 464

7.5.2 RSA 464

7.5.2.1 RSA简介 464

7.5.2.2 RSA的常见攻击 465

7.5.3 离散对数相关密码学 470

7.5.3.1 ElGamal和ECC 470

7.5.3.2 离散对数的计算 470

7.6 其他常见密码学应用 472

7.6.1 Diffie-Hellman密钥交换 472

7.6.2 Hash长度扩展攻击 473

7.6.3 Shamir门限方案 474

小结 475

第8章 智能合约 476

8.1 智能合约概述 476

8.1.1 智能合约介绍 476

8.1.2 环境和工具 476

8.2 以太坊智能合约题目实例 477

8.2.1 “薅羊毛” 477

8.2.2 Remix的使用 482

8.2.3 深入理解以太坊区块链 484

小结 488

第9章 Misc 489

9.1 隐写术 490

9.1.1 直接附加 490

9.1.2 EXIF 492

9.1.3 LSB 494

9.1.4 盲水印 497

9.1.5 隐写术小结 498

9.2 压缩包加密 498

9.3 取证技术 499

9.3.1 流量分析 500

9.3.1.1 Wireshark和Tshark 500

9.3.1.2 流量分析常见操作 501

9.3.1.3 特殊种类的流量包分析 504

9.3.1.4 流量包分析小结 505

9.3.2 内存镜像取证 505

9.3.2.1 内存取证介绍 505

9.3.2.2 内存取证常见操作 505

9.3.2.3 内存取证小结 507

9.3.3 磁盘镜像取证 507

9.3.3.1 磁盘镜像介绍 507

9.3.3.2 磁盘取证常见操作 507

9.3.3.3 磁盘取证小结 509

小结 509

第10章 代码审计 510

10.1 PHP代码审计 510

10.1.1 环境搭建 510

10.1.2 审计流程 517

10.1.3 案例 527

10.2 Java代码审计 536

10.2.1 学习经验 536

10.2.2 环境搭建 538

10.2.3 反编译工具 540

10.2.4 Servlet简介 541

10.2.5 Serializable简介 542

10.2.6 反序列化漏洞 545

10.2.6.1 漏洞概述 545

10.2.6.2 漏洞利用形式 546

10.2.7 表达式注入 552

10.2.7.1 表达式注入概述 552

10.2.7.2 表达式注入漏洞特征 552

10.2.7.3 表达式结构概述 553

10.2.7.5 S2-045简要分析 555

10.2.7.6 表达式注入小结 558

10.2.8 Java Web漏洞利用方式 558

10.2.8.1 JNDI注入 558

10.2.8.2 反序列化利用工具ysoserial/marshalsec 563

10.2.8.3 Java Web漏洞利用方式小结 566

小结 566

CTF之线下赛

第11章 AWD 571

11.1 比赛前期准备 571

11.2 比赛技巧 573

11.2.1 如何快速反应 573

11.2.2 如何优雅、持续地拿flag 574

11.2.3 优势和劣势 577

11.3 流量分析 578

11.4 漏洞修复 578

小结 579

第12章 靶场渗透 580

12.1 打造渗透环境 580

12.1.1 Linux下Metasploit的安装和使用 580

12.1.2 Linux下Nmap的安装和使用 584

12.1.3 Linux下Proxychains的安装和使用 586

12.1.4 Linux下Hydra的安装和使用 587

12.1.5 Windows下PentestBox的安装 588

12.1.6 Windows下Proxifier的安装 588

12.2 端口转发和代理 589

12.2.1 端口转发 592

12.2.2 Socks代理 597

12.3 常见漏洞利用方式 598

12.3.1 ms08-067 598

12.3.2 ms14-068 599

12.3.3 ms17-010 600

12.4 获取认证凭证 601

12.4.1 获取明文身份凭证 602

12.4.1.1 LSA Secrets 602

12.4.1.2 LSASS Process 604

12.4.1.3 LSASS Protection bypass 605

12.4.1.4 Credential Manager 606

12.4.1.5 在用户文件中寻找身份凭证Lazange 607

12.4.2 获取Hash身份凭证 607

12.4.2.1 通过SAM数据库获取本地用户Hash凭证 607

12.4.2.2 通过域控制器的NTDS.dit文件 609

12.5 横向移动 611

12.5.1 Hash传递 611

12.5.2 票据传递 613

12.5.2.1 Kerberos认证 613

12.5.2.2 金票据 614

12.5.2.3 银票据 615

12.6 靶场渗透案例 618

12.6.1 第13届CUIT校赛渗透题目 618

12.6.2 Defcon China靶场题 625

12.6.3 PWNHUB深入敌后 632

小结 636

CTF之团队建设

第13章 我们的战队 641

13.1 无中生有,有生无穷 641

13.2 上下而求索 642

13.3 多面发展的Nu1L战队 643

13.3.1 承办比赛 643

13.3.2 空指针社区 643

13.3.3 安全会议演讲 644

13.4 人生的选择 644

13.5 战队队长的话 646

小结 647

参考文献

  1. 我国出版社的等级划分和分类标准,知网出书,2021-03-01
  2. 关于我们,电子工业出版社