.net程序测试java项目log4j2是否存在远程代码执行漏洞(代码片段)

dotNET跨平台 dotNET跨平台     2023-02-27     262

关键词:

最近两天被朋友圈的“Apache Log4j2 远程代码执行漏洞”刷屏了,主要是因为组件存在 Java JNDI 注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发 Apache Log4j2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。

影响范围

Apache Log4j 2.x <= 2.14.1

JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目录接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java EE的重要部分,需要注意的是它并不只是包含了DataSource(JDBC 数据源),JNDI可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA,摘自百度百科。

网上很多文章说如何修复漏洞和漏洞截图,几乎没有说如何测试项目是否存在该漏洞。Java 使用 Log4j2 主要测试代码如下:

1

2

log.info("$jndi:rmi://127.0.0.1:8100/Main");

log.info("$jndi:ldap://127.0.0.1:8100/Main");

 简单来说就是 Log4j2 会通过 rmi 或者 ldap 协议访问后面的地址,根据协议的内容解析,有可能执行已经恶意构造的代码。

网上几乎都是通过打开 Windows 系统的计算器来证明漏洞的存在,代码如下:

既然 log4j2 会使用 rmi 或者 ldap 协议访问攻击者的服务器,rmi 和 ldap 协议都是基于 TCP 传输的,那么我们可以直接使用 .NET 监听一个 TCP 端口,如果调用 log4j2 打印日志会访问 .NET 的监听的端口,就证明可能存在漏洞,如果没有访问,就证明安全。

.NET 生成的测试程序非常小 6kb,代码如下:

尝试使用 log4j 组件 2.14.0 版本执行打印,效果图如下:

 尝试将 log4j 组件升级成 2.15.0 版本,再次执行,效果图如下:

升级版本后,发现调用打印日志后,Java 程序没有再访问外部端口。

有兴趣的朋友,可以参考如下链接复现漏洞,调起计算器。

https://github.com/ilsubyeega/log4j2-exploits
https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce

快速修复log4j2远程代码执行漏洞步骤(代码片段)

...y,将log4j2修复的版本包安装到Nexus修改项目中的pom.xml测试验证ApacheLog4j2远程代码执行漏洞修复步骤漏洞说明ApacheLog4j2是一个基于Java的日志记录工具。由于ApacheLog4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求... 查看详情

是否可以从 .NET 测试 COM 公开的程序集?

】是否可以从.NET测试COM公开的程序集?【英文标题】:IsitpossibletotestaCOM-exposedassemblyfrom.NET?【发布时间】:2010-09-2622:46:53【问题描述】:我有一个通过tlb文件向COM公开的.NET程序集,以及一个注册tlb的安装程序。我已手动检查安... 查看详情

java示例代码_我如何在Java中测试特定索引中是否存在对象

java示例代码_我如何在Java中测试特定索引中是否存在对象 查看详情

使用 Perl Net::OpenSSH 来 sudo 测试文件是不是存在,使用命令连接

】使用PerlNet::OpenSSH来sudo测试文件是不是存在,使用命令连接【英文标题】:UsingPerlNet::OpenSSHtosudotestifafileexists,usingcommandconcatenation使用PerlNet::OpenSSH来sudo测试文件是否存在,使用命令连接【发布时间】:2013-09-1908:45:32【问题描述... 查看详情

使用黑盒测试,测试个人项目——第三周作业

...过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程... 查看详情

springboot项目测试时出现程序包org.junit.runner不存在

SpringBoot项目测试时出现程序包org.junit.runner不存在 报错如下:解决方法:  查看详情

通过 Internet 连接 MySQL 和 .net 应用程序是不是存在危险?

】通过Internet连接MySQL和.net应用程序是不是存在危险?【英文标题】:IsconnectingMySQLand.netapplicationviaInternetahazard?通过Internet连接MySQL和.net应用程序是否存在危险?【发布时间】:2013-02-0622:47:21【问题描述】:对于一个小型项目,... 查看详情

springboot2.0基础案例(02):配置log4j2,实现不同环境日志打印

...的API,要使用对应的框架就要使用其对应的API,增加应用程序代码和日志框架的耦合性。《阿里巴巴Java开发手册》,其中有一条规范做了『强制』要求:SLF4J日志APIJava简易日志门面(SimpleLoggingFacadeforJava,缩写SLF4J),是一套包... 查看详情

java——程序包不存在三种解决方法

...法三:设置配置三、结语一、问题描述报错:xxx程序包不存在二、解决方案 方法一:maven包管理的clean方法1、把项目的MavenProject打开2、点击clean,再点击run,即可运行分析其原因:之前点击了clean,再... 查看详情

登录vpn后,java程序无法访问远数据库或远程服务(微服务或webservice服务)

...程办公,使用vpn访问公司微服务,浏览器能正常访问,但java程序发起的请求不能解决方法:加入java启动参数:-Djava.net.preferIPv4Stack=true如果使用的是tomcat则在tomcat启动参数里面添加-Djava.net.preferIPv4Stack=true如果使用的是springboot则https:/... 查看详情

如何找出 C# / .NET 中是不是存在文件?

...【发布时间】:2010-09-0712:38:24【问题描述】:我想在C#中测试包含文件路径的字符串是否存在该文件(类似于Perl中的-e测试或Python中的os.path.exists())。【问题讨论】:【参考方案1】:用途:File.Exists(path)MSDN: 查看详情

git如何删除远端不存在的本地分支?

...息。使用gitremotepruneorigin删除所有远端已经删除本地仍然存在的分支 参考:https://blog.csdn.net/LJFPHP/article/details/81741931https://blog.csdn.net/qq_16885135/article/details/52777871 查看详情

如何检查 vb .net 项目的 sql server 中是不是存在数据库和表?

】如何检查vb.net项目的sqlserver中是不是存在数据库和表?【英文标题】:Howtocheckifadatabaseandtablesexistinsqlserverinavb.netproject?如何检查vb.net项目的sqlserver中是否存在数据库和表?【发布时间】:2014-08-0614:19:27【问题描述】:谁能告诉... 查看详情

用于检查项目是不是存在的 UI 测试在 Swift 中不起作用

】用于检查项目是不是存在的UI测试在Swift中不起作用【英文标题】:UITesttocheckifanitemexistsisnotworkinginSwift用于检查项目是否存在的UI测试在Swift中不起作用【发布时间】:2020-01-2912:00:54【问题描述】:我浏览了十几个不同的教程、... 查看详情

java判断一段网络资源是否存在

packagecn.ycmedia.common.utils;importjava.io.InputStream;importjava.net.URL;importjava.net.URLConnection;/***@authorzhuliangxing*判断网络资源是否存在**/publicclassResourceUrlutil{/***判断网络资源是否存在*@paramurlName*@r 查看详情

快速修复log4j2远程代码执行漏洞步骤(代码片段)

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇作者丨飞一站原文链接:https://blog.csdn.net/weixin_48990070/article/details/121861553/ApacheLog4j2远程代码执行漏洞修复步骤漏洞说明ApacheLog4j2是一个基于Java的... 查看详情

使用 .net 4.0 测试程序集测试 .net 3.5 程序集时的风险有多大

】使用.net4.0测试程序集测试.net3.5程序集时的风险有多大【英文标题】:Howbigistheriskwhentestinga.net3.5Assemblyusinga.net4.0testassembly【发布时间】:2012-01-3112:30:18【问题描述】:我意识到VisualStudio2010sp1现在允许测试项目以3.5为目标。然... 查看详情

java判断socket远程端是否断开连接

...isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,在测试时发现,这些方法都是本地端的状态,无法判断远端是否已经断开连接。  其实在so 查看详情