[THM]Kenobi

发布时间 2023-12-10 23:46:01作者: trymonoly

枚举 Samba 的共享

Samba 是适用于 Linux 和 Unix 的标准 Windows 互操作性程序套件。它允许最终用户访问和使用公司内部网或 Internet 上的文件、打印机和其他常用共享资源。它通常被称为网络文件系统。

Samba 基于服务器消息块 (SMB) 的通用客户端/服务器协议。SMB 仅针对 Windows 开发,如果没有 Samba,其他计算机平台将与 Windows 机器隔离,即使它们属于同一网络。

使用 nmap,我们可以枚举 SMB 共享的计算机。

Nmap 能够运行以自动执行各种网络任务。有一个脚本可以枚举份额!

nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.82.153

SMB 有两个端口:445 和 139。

Samba监听端口有:TCP和UDP------tcp端口相对应的服务是smbd服务,其作用是提供对服务器中文件、打印资源的共享访问;udp端口相对应的服务是nmbd服务,其作用是提供基于NetBIOS主机名称的解析。

 

在大多数 Linux 发行版上,已经安装了 smbclient。让我们检查其中一个股票。

smbclient //10.10.82.153/Anonymous

使用计算机连接到计算机网络共享。

 你可以使用smbget命令,通过匿名用户 递归地下载整个SMB 共享,共享系统中的文件将会被下载到本地

smbget -R smb://10.10.54.34/anonymous   #此ip为目标机的ip 不需要输入密码 按回车键即可

 查看log.txt

 

查看来自共享系统的log.txt文件内容,我们可以获取两个信息:

  • 为Kenobi用户生成 SSH 密钥时的信息--Kenobi用户的ssh密钥--保存在/home/kenobi/.ssh路径下
  • 有关 ProFTPD 服务器的信息( 运行FTP服务的用户是 Kenobi)

 

您之前的 nmap 端口扫描将显示运行 rpcbind 服务的端口 111。这只是一个将远程过程调用 (RPC) 程序号转换为通用地址的服务器。当 RPC 服务启动时,它会告诉 rpcbind 它正在侦听的地址以及它准备服务的 RPC 程序编号。

在我们的例子中,端口 111 是对网络文件系统的访问。让我们使用 nmap 来枚举它。

nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.82.153

 通过 ProFtpd 获得初始访问权限

ProFtpd 是一个免费的开源 FTP 服务器,兼容 Unix 和 Windows 系统。在过去的软件版本中,它也容易受到攻击。

查看21端口的proftpd的版本

 

我们可以使用 searchsploit 来查找特定软件版本的漏洞。

Searchsploit 基本上只是一个用于 exploit-db.com 的命令行搜索工具。

 

您应该已经从 ProFtpd 的 mod_copy 模块中发现了漏洞。

mod_copy模块实现了SITE CPFR 和 SITE CPTO 命令(类似于 RNFR 和 RNTO) ,这些命令可以用来将文件/目录从服务器上的一个地方复制到另一个地方,而无需将数据传输到客户端并等待返回(无身份验证),该模块包含在 ProFTPD 1.3.x 的 mod_copy.c 文件中,默认情况下不进行编译。

也就是说:任何未经身份验证的客户机都可以利用SITE CPFR 和 SITE CPTO 命令,将文件从FTP服务器的文件系统的任何位置复制到选定的位置。

由之前的信息我们知道:Kenobi是运行FTP服务的用户、Kenobi用户的ssh密钥保存路径。

现在我们将使用 SITE CPFR 和 SITE CPTO 命令复制Kenobi的ssh私钥,我们将私钥复制到NFS所挂载的目录下,后继我们就能获取到这个私钥文件:

#连接目标机的FTP服务器,FTP运行在21端口
nc 10.10.54.34 21
SITE CPFR /home/kenobi/.ssh/id_rsa
SITE CPTO /var/tmp/id_rsa  #将密钥复制到NFS所挂载的/var目录下

 将nfs挂载到攻击机上把文件盗走,用ssh连接

 使用路径变量操作进行权限提升

 

权限                        在文件上                                            在目录上
SUID Bit             用户使用文件所有者的权限执行文件                               -
SGID Bit             用户在组所有者的权限下执行该文件                          在目录中创建的文件获取相同的组所有者。
Sticky Bit           无意义                                                阻止用户删除其他用户目录下的文件

SUID位是很不安全的,一些二进制文件确实需要提高权限来运行才被赋予SUID位(如/usr/bin/passwd,因为你需要使用它以便在系统上重置个人密码),但是其他具有 SUID 位的自定义文件可能会导致各种各样的问题。

要在目标机系统中搜索SUID/SGID类型的文件,请在目标机上运行以下命令:

find / -perm -u=s -type f 2>/dev/null

 看见不寻常的menu,执行一下

 用strings检查这个二进制文件

观察上图可以得知:当我们执行/usr/bin/menu 时,选择选项1其实是在执行一个curl命令,选择选项2其实是在执行uname -r命令。

这表明二进制文件curl和uname,是在没有完整路径的情况下运行的(例如没有使用/usr/bin/curl 或/usr/bin/uname运行文件)。

我们已经知道/usr/bin/menu文件是一个SUID文件,它在执行时会暂时具有root 用户权限,我们可以尝试自定义创建一个curl文件(并写入/bin/bash,意思是打开一个bash shell),然后我们再给自定义的curl文件附加可执行权限(+x),接着将自定义的curl文件所在的路径添加到PATH变量中(这样能够保证我们自定义的curl文件能够被首先找到)。

完成以上操作之后,执行SUID文件/usr/bin/menu,产生的效果是:以root权限打开一个bash shell-----这将获得root shell