存在JNDI远程代码执行
log4.core 下面堆栈调用了look up方法
look up是基于jndi,而jndi又支持rmi
漏洞原理
Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行。
修复:
其实如果你了解了这个原理那么解决方式也就一目了然了,
禁用lookup或JNDI服务
罪魁祸首就是lookup和JNDI,那么直接修改配置文件log4j2.formatMsgNoLookups=True或禁用JNDI服务,不过一般产生问题的服务都是线上已经在跑的服务,禁用的时候要注意评估一下是否允许。
升级Apache Log4j
这次产生的影响范围主要是在Apache Log4j 2.x <= 2.14.1,所以直接把Log4j升级即可解决。
log4j
特点: 能够解析 ldap 协议
exploit.java javac ===> exploit.classmarselsec 监听特定的端口 将接收到的请求包转发python3 -m http.server 8181 从而能够让marselsec将对应的请求包转发
Shiro漏洞
用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。只要rememberMe的AES加密密钥泄露,无论shiro是什么版本都会导致反序列化漏洞
环境搭建
# docker pull medicean/vulapps:s_shiro_1
安装完成后运行
# docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
快速判断是否存在Shiro漏洞
查看是否rememberMe=deleteMe
对Cookie中rememberMe=的编码进行base64解码
在攻击机使用ShireExploit工具
双击ShiroExploit.jar打开(依赖Java1.8d的环境)
输入对应的存在Shire漏洞的ip地址
选择dnslog漏洞检测
找到对应的Key值后
进行简便操作 输入对应的ip地址:192.168.21.147:5678 Kali进行监听 nc -lvp 5678