跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透技巧——绕过Windows命令行进程试听

精选回复

发布于

0x00 前言

命令进程审核是Windows的一项功能。当此功能打开时,ID为4688的日志将记录创建进程时的命令行参数。

本文将介绍通过修改进程参数绕过日志记录的方法,测试开源工具SwampThing,分享实现SwampThing的C语言代码,分析利用思路,给出防御建议。

沼泽的地址:

https://github . com/fuzzy security/Sharp-Suite/blob/master/swamp thing

0x01 简介

本文将介绍以下内容:

实现原则

打开命令行进程审计的方法

测试沼泽

用C实现SwampThing

利用理念

辩护建议

0x02 实现原理

方法类似于创建一个傀儡进程,只是该方法只修改新进程的命令行参数。

木偶工艺的技术细节请参考上一篇文章:《傀儡进程的实现与检测》。

实现思路:

通过CreateProcess创建一个进程,传入参数lpCommandLine,传入参数CREATE_SUSPENDED来挂起进程。

修改新进程的命令行参数。

通过ResumeThread唤醒进程,并执行新的命令行参数。

如果新进程没有退出,请恢复命令行参数。

在具体实施中,我们还需要考虑以下问题:

1、进程的选择

启动的进程需要能够加载命令行参数,如cmd.exe、powershell.exe、wmic.exe等。

2、修改远程进程的Commandline参数

通过NtQueryInformationProcess找到远程进程的基址,计算偏移量得到Commandline参数的位置,然后分别通过ReadProcessMemory和WriteProcessMemory读写Commandline参数。

补充:

要修改当前流程的命令行参数,请参考:

https://github . com/3g student/home-of-C-Language/blob/master/masqueradepebtocopyfile . CPP

0x03 开启command line process auditing

官方文件:

https://docs . Microsoft . com/en-us/windows-server/identity/ad-ds/manage/component-updates/命令行-进程-审核

默认情况下,此功能是关闭的,需要手动配置才能打开。

1.执行gpedit.msc以进入组策略。

2.打开流程审计功能。

英语系统:

计算机配置策略Windows设置安全设置高级审核配置详细跟踪审核过程创建

中国系统:

配置计算机策略Windows设置安全设置高级审核配置详细跟踪审核创建过程

3.打开事件日志的附加功能,记录命令行参数。

英语系统:

管理模板系统审核流程创建在流程创建事件中包含命令行

中国系统:

由管理模板系统审计创建的过程包含创建事件过程中的命令行。

打开命令行进程审核后,在Windows日志的安全类别下,ID为4688的日志记录进程会创建信息。

例子如下

2-1.png

通过命令行查询ID为4688的日志的命令如下:

wevtutil QE security/f:text/q:*[System[(event id=4688)]]

0x04 测试SwampThing

地址:

https://github . com/fuzzy security/Sharp-Suite/blob/master/swamp thing

用c#编写

成功编译后需要以下三个文件:

SwampThing.exe

CommandlLine.dll

CommandLine.xml

命令行参数如下:

SwampThing.exe-C:\ Windows \ System32 \ notepad . exe-f C:\ AAA . txt-r C:\ BBB . txt

启动的notepad.exe会加载C:\bbb.txt,但是通过ProcessExplorer查看notepad.exe进程的参数是C: \ AAA.txt

如下图

2-2.png

命令行进程审核启动后,ID为4688的日志记录notepad.exe进程参数为C: \ aaa.txt

成功绕过了命令行进程审核,如下图所示。

2-3.png

SwampThing只针对执行后不自动退出的进程(比如notepad.exe)实现,也就是说,进程被ResumeThread唤醒后,会再次修改进程参数并恢复。

很明显,对于执行后退出的进程(比如cmd.exe/C),进程被ResumeThread唤醒后,不能再修改进程参数,会报错,如下图所示。

2-4.png

0x05 通过c++实现SwampThing

我已经通过C实现了类似于SwampThing的功能,但是在细节上有以下区别:

在进程被ResumeThread唤醒后,进程参数不被恢复,这可以应用到cmd.exe/C.

修改CreateProcess的参数创建流程,指定pStartupInfo-dwFlags和pStartupInfo-wshowindow,隐藏启动流程的界面。

代码下载地址:

https://github . com/3g student/home-of-C-Language/blob/master/processcommandlinepoofing . CPP

该代码实现了以下功能:

命令cmd.exe/c开始calc.exe。

打开命令行进程审核后,ID为4688的日志的进程参数是cmd.exe/c启动notepad.exe。

0x06 利用思路

这种方法可以用来隐藏过程的真实参数。

在使用中,你也可以选择wmic.exe。正如SwampThing提到的,——使用wmic加载一个xsl文件。

关于通过wmic加载xsl文件的方法,可以参考我之前的两篇文章:《Use msxsl to bypass AppLocker》和《利用wmic调用xsl文件的分析与利用》。

当然,在通过wmic加载xsl之前,无论是SwampThing还是我的开源C代码都需要修改。

0x07 防御建议

与创建一个puppet进程相比,该方法不需要使用VirtualAllocEx申请新内存,也不需要通过SetThreadContext设置入口点。

这种方法不能通过比较本地和内存PE文件是否有差异来检测。

您可以尝试在检测时检查该流程的父流程是否可疑。

0x08 小结

介绍了通过修改进程参数绕过命令行进程审计的方法,测试了开源工具SwampThing,分享了实现SwampThing的C语言代码,分析了利用思路,最后给出了一些防御建议。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。