渗透技巧——Windows 中 net session 的利用

发布于 2025-01-20 05:26:17 字数 5829 浏览 1 评论 0

0x00 前言

在 Windows 系统中,使用 net use 命令能够实现远程连接网络中其他计算机的共享资源,连接建立后会创建一个 net session。 在渗透测试中,如果我们获得了一台 Windows 主机的权限,在上面发现了 net session,就可以利用这个 net session,使用 net session 的 token 创建进程。

0x01 简介

本文将要介绍以下内容:

  • 查看 net session 的方法
  • net session 的利用
  • net session 的清除
  • 利用思路
  • 防御建议

0x02 测试环境

COMPUTER01:

  • Win7 x64
  • 域内一台主机
  • 192.168.10.2
  • 使用帐号 test1 登录

DC:

  • Server2008 R2x64
  • 域控服务器
  • 192.168.10.1

在 DC 上使用域管理员帐号 Administrator 通过 net use 远程连接 COMPUTER01,如下图

Alt text

0x03 查看 net session 的方法

1、cmd 命令

net session

如下图

Alt text

2、LogonSessions

下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/logonsessions

如下图

Alt text

可以发现,net session 的 Logon type 为 Network

3、c++实现

首先通过 Windows API LsaEnumerateLogonSessions() 枚举当前的 Logon Session

接着使用 LsaGetLogonSessionData() 获得每个 Logon Session 的具体信息

在程序编写上需要注意无法直接显示 sid 和时间,需要对格式进行转换

开源代码地址:https://github.com/3gstudent/Homework-of-C-Language/blob/master/ListLogonSessions.cpp

代码按照 LogonSessions 的格式输出结果

4、mimikatz

privilege::debug
token::list

如下图

Alt text

TEST\Administrator 对应的 ID 为 6919466

补充 mimikatz 的命令

查看当前 token:

token::whoami

恢复进程 token:

token::revert

假冒成 system:

token::elevate

假冒成 domain admin:

token::elevate /domainadmin

假冒成 enterprise admin:

token::elevate /enterpriseadmin

假冒成 admin:

token::elevate /admin

假冒成 id 为 123456 的 token:

token::elevate /id:123456

0x04 net session 的利用

net session 的 token 保存在 lsass 进程中,如下图

Alt text

在利用上,net session 等同于对其 token 的利用

1、mimikatz

假冒成 id 为 6919466 的 token:

token::elevate /id:6919466

如下图

Alt text

注:上述操作只改变了 Thread Token,Windows 下有两种 token:Primary Token 和 Impersonation Token

Primary Token 对应 Process Token,每个进程都有唯一的 Primary Token

Impersonation Token 对应 Thread Token,可以被修改

接下来,使用该 token 创建进程 cmd.exe:

process::start cmd.exe

但是该命令不会使用新的 Thread Token,也就是说进程 cmd.exe 并没有以 TEST\Administrator 启动

原因如下:https://github.com/gentilkiwi/mimikatz/blob/110a831ebe7b529c5dd3010f9e7fced0d3e3a46c/mimikatz/modules/kuhl_m_process.c

如下图

Alt text

https://github.com/gentilkiwi/mimikatz/blob/110a831ebe7b529c5dd3010f9e7fced0d3e3a46c/modules/kull_m_process.c

如下图

Alt text

mimikatz 在执行 process::start 命令时,使用 CreateProcess 创建进程,并没有传入 token

解决方法:

修改 mimikatz 的源码,使用 CreateProcessAsUser() 创建进程,能够传入 Token

当然,我们还可以使用其他工具来实现这个过程

2、使用 incognito

源代码开源地址:https://github.com/fdiskyou/incognito2

注:在之前的文章 《渗透技巧——Token 窃取与利用》 曾介绍过 incognito 的用法

列出当前 token:

incognito.exe list_tokens -u

以"TEST\Administrator"启动 cmd.exe:

incognito.exe execute -c "TEST\Administrator" cmd.exe

如下图

Alt text

net session 利用成功,以用户"TEST\Administrator"启动进程 cmd.exe,如下图

Alt text

0x05 net session 的清除

1、cmd 命令

net session /delete /y

2、删除 net use 连接

net use 的发起方删除连接:

net use * /del /y

0x06 利用思路

1、本地提权

如果尚未获得本地管理员权限,但获得了 SeImpersonate 或者 SeAssignPrimaryToken 权限,就能利用 net session 中的 token 创建新进程,实现提权

注:之前的文章 《Windows 本地提权工具 Juicy Potato 测试分析》 和 《渗透技巧——Windows 九种权限的利用》 提到过这个方法

2、域内渗透

取决于 net session 的权限,新创建的进程能够继承 net session 的 token

0x07 防御建议

1、域环境内限制用户权限,尽量避免使用域管理员帐户远程连接 2、使用 net use 远程连接后记得及时清除

0x08 小结

本文介绍了利用 net session 的 token 创建进程的方法,分析利用思路,给出防御建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

安穩

暂无简介

文章
评论
25 人气
更多

推荐作者

迎风吟唱

文章 0 评论 0

qq_hXErI

文章 0 评论 0

茶底世界

文章 0 评论 0

捎一片雪花

文章 0 评论 0

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文