最近,阿里巴巴云团队发现并报告了Log4J2中的漏洞。
因为Log4J2是一个宽阔的基础文库,所以它具有较大的影响范围。影响程度是严重的,这是多么严重?让我们说,这是灾难性的。
引用公共帐户:“ Kobayashi编码”图片:
正常使用log4j2时,可以::可以::
但是,如果您的日志包含“”的开头,则“”的内容将被分开解析和处理。
如果“”的内容被这样包装:它可能会触发此漏洞。
繁殖的具体过程是:
可以看出,我通过spring-boot-starter-log4j2间接引用了log4j2。引入的特定软件包版本是这样:
让我们写一个您要首先执行的程序:
该程序是在我的计算机上打开计算器程序。
注意:请勿在此处编写软件包名称。我在这里浪费了很多时间。编写软件包名称可能会在以后的执行中导致错误。
然后,我们找到一个空目录,复制Java文件并将其编译:
然后我在当前目录中执行:
目的是启动HTTP服务器。当然,您也可以使用NGINX或JAVA程序来执行此操作,只要您可以用作HTTP服务器即可。
启动后,您可以在浏览器中验证:
让我们从本地启动LDAP服务器。
https://github.com/mbechler/marshalsec从此处下载代码,然后执行包装汇编:
包装后,在目标目录中执行:
上述命令的目的是启动LDAP服务器并将我们的程序注册到LDAP服务器。特别是,它在LDAP服务器上注册,并使用HTTP服务器地址(HTTP Server始于Python启动)到LDAP服务器。
正常启动后,LDAP将开始监视端口
最后,我们编写一个记录日志程序:
执行后的效果:
可以看出,我的计算器是对的。您可以执行语句和代码逻辑,然后像可以执行此操作一样!
在上面的程序中,有一系列的代码要注意:
如果将其设置为false或评论,则计算器将不会被调整,也就是说,攻击程序将不会执行。
Java还修复了此利用点,增加了对LDAP参考远程工厂类的加载的限制。在Oracle JDK 11.0.1、8U191、7U201、6U211之后,com.sun.sun.jndap.trusturlcodebase.trusturlcodebase的默认值默认值的默认值与false相对应3149
这是否意味着高版本的JDK不会有漏洞?
不,仍然有一种攻击方法。不要幸运。有关详细信息,请参阅:https://paper.seebug.org/942/ JDK-8U191
临时补救方案经常在互联网上说是修改配置,例如:
原理实际上是相同的,也就是说,Log4j2的查找是禁用的。
目前,官方版本2.15.0已维修。可以升级此版本。使用上述程序修改版本编号后,我发现无法再现漏洞了
当然,您还可以手动编译Log4J2的源代码,然后上传到Maven私人服务器,然后修改公共依赖升级版本。
请注意,编译Log4J2源代码时,您需要是1.9上方JDK的版本,因为它具有这样的东西
