本文主要是介绍log4j2高危漏洞原理分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原理分析
了解2.15版本前log4j2可输出变量
首先新建一个maven项目,加入log4j2的代码,我们用maven方式,只需要引入这两个pom依赖即可
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.12.0</version></dependency>
随便写一段日志打印
当然你也可以写一个变量,将它输出
假如你的系统在登录的时候,用log4j框架记录了用户名,那么,我输入${java:vm},实质上你会打印出java相关的vm信息,而非${java:vm}。
当然黑客比较聪明,他们会通过一些手段抓取你哪些地方有log4j的打印,比如通过不断试错接口,比如采用dnslog方式进行扫描,探测,一旦抓到系统报错,分析可以利用,就可以进行他的下一步动作了。(这里是另外的技术,不展开讲)
通过jndi注入
上边说到log4j2可以输出变量,那么什么变量可以被利用执行远端代码呢,此次发现的黑客利用的注入方式就是jndi注入了。
如果你是一名黑客,想攻击某台含有log4j漏洞服务器的流程如下:
1.构建破坏代码
这段代码当中的命令,是删除/home/data/test/目录下的所有文件。
当然黑客一般会写一些更复杂的脚本,把你的服务器变成他的矿机,不定时重启你的机器等等。
2.构建中间服务器
一般会启动这样一个服务监听,黑客肯定又更高明的写法,这里只是模拟。
这个方法的意思是,打开7008端口监听,如果有访问,则拿到factoryLocation/factory下的RmiTest引用。
3.构建注入语句
以上代码为模拟,实际情况,可能是掉个接口,或者表单直接输入,当然以上的ip也会更换成黑客的服务器ip。
如此依赖便可在你漏洞机器上执行到1当中的脚本,完成一次完整的攻击。
攻击链路总结
黑客找到漏洞,构建自己的破坏脚本和舰艇服务,黑客通过构建jndi解析语句,将自己远程的类执行到你当前的java服务中。
这篇关于log4j2高危漏洞原理分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!