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

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

    TheHackerWorld官方

渗透技巧——删除Windows单一日志


KaiWn

推荐的帖子

0x00 前言

之前的文章《渗透技巧——Windows日志的删除与绕过》介绍了清除和绕过Windows日志的常用方法,但没有提到清除单个日志。

本次结合刚刚完成的关于清除Windows XML事件日志(EVTX)单条日志的系列文章,介绍了渗透测试中清除Windows XML事件日志(EVTX)单条日志的具体使用方法,并基于利用思路给出了一些防御建议。

Windows事件日志(evtx)单一日志清除系列文章的地址:

Windows事件日志(evtx)单一日志清除(一)——删除思路和示例

Windows事件日志(evtx)单日志清除(II) ——程序删除EVTX文件的单日志记录

Windows事件日志(EVTX)单一日志清除(III) ——通过删除文件占用来删除当前系统的单一日志记录

Windows事件日志(EVTX)单日志清除(IV) ——通过注入日志文件句柄删除当前系统的单日志记录。

Windows事件日志(evtx)单条日志清除(5) ——通过DuplicateHandle获取日志文件句柄,删除当前系统的单条日志记录。

0x01 简介

本文将介绍以下内容:

通过命令行获取日志信息。

通过命令行导出日志文件

用修改后的日志文件覆盖原始系统文件。

细节和注意事项

辩护建议

0x02 通过命令行获得日志信息

1、获得Security的最近十条日志

wevtutil.exe量化宽松证券/f:text /rd:true /c:10

2、获得Security的前十条Security日志:

wevtutil.exe量化宽松证券/f:text /c:10

注:

文本视图不输出EventRecordID。

您可以通过查看xml格式来获取日志的相应EventRecordID。

wevtutil.exe QE安全/f:xml /rd:true /c:10

注:

默认视图是xml,因此该命令可以缩写为:

wevtutil.exe量化宽松证券/rd:true /c:10

参考的官方文件:

https://docs . Microsoft . com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-和-2012/cc732848(v=ws.11)

0x03 通过命令行导出日志文件

导出的日志文件可以下载并在本地打开,后缀为evtx。

1、导出Security所有日志并保存为1.evtx

wevtutil.exe EPL安全1.evtx

2、过滤日志并保存

(1)删除单条日志并保存

在Security (EventRecordID=1112)下删除一个日志,并将其另存为1.evtx

wevtutil EPL Security 1 . evtx '/q:*[System[(event recordid!=1112)]]'

(2)删除多条并保存

1. 根据EventRecordID筛选

删除Security下的几个日志(EventRecordID为13030、13031、13032),结果保存为1.evtx

wevtutil EPL Security 1 . evtx '/q:*[System[(event recordid 13032)或(EventRecordID13030)]]'

2. 根据SystemTime筛选

注:

时间系统Time需要考虑时区的影响。

通过wevtutil查询日志信息。当输出格式为文本时,时间不考虑时区。

通过Windows界面查看日志信息,显示的时间不考虑时区。

日志信息通过wevtutil查询,输出格式为xml时,系统时间考虑时区。

示例:

通过wevtutil查询最新日志的时间,输出格式为文本,如下图所示

2-1.png

日期是2018-08-09T20: 22: 20.558。

通过Windows界面查看上次日志的时间,如下图所示

2-2.png

时间是2018-08-09T20:22:20.558。

通过wevtutil查询最新日志的时间,输出格式为xml,如下图所示

2-3.png

时间是system time=' 2018-08-10t 03:22:20:200 z '

相隔七个小时。

因此,在删除指定日期的日志时,需要检查xml格式并获取SystemTime。

删除SystemTime在2018-08-10T03:20:00和2018-08-10T03:21:00之间的日志,并将结果保存为1.evtx。

wevtutil EPL Security 1 . evtx '/q:*[System[time created[@ System time ' 2018-08-10t 03:21:00 '或@ System time ' 2018-08-10t 03:20:00 ']]'

0x04 将修改后的日志文件覆盖系统原文件

删除一个或一些日志后,您需要用修改后的日志文件覆盖原始系统文件。

可以使用以下三种方法

1、通过解除文件占用

详情请咨询《Windows XML Event Log (EVTX)单条日志清除(三)——通过解除文件占用删除当前系统单条日志记录》。

实现思路如下:

结束日志进程

释放日志文件句柄

替换日志文件

重新启动日志服务

本文中的代码需要稍加修改。修改后的代码可以参考:

https://github . com/3g student/home-of-C-Language/blob/master/DeleteRecordbyTerminateProcess(replace file)。卡片打印处理机(Card Print Processor的缩写)

代码实现了结束日志进程,释放日志文件句柄,替换指定的日志文件,最后重新启动日志服务。

2、通过注入

详情请咨询《Windows XML Event Log (EVTX)单条日志清除(四)——通过注入获取日志文件句柄删除当前系统单条日志记录》。

实现思路如下:

(1)Loader

将dll注入日志进程

创建三个内存映射,将日志文件的句柄、新日志文件的长度和新日志文件的内容传递给dll。

释放Dll

关闭内存映射

可供参考的代码:

https://github.com/3gstudent/Eventlogedit-evtx-Evolution/blob/master/Loader-evtexportlog . CPP

(2)Dll

从内存映射中读取内容,以获得日志文件的句柄和新日志文件的内容。

调用MapViewOfFile()函数将文件数据映射到进程的地址空间。

修改内存数据并用新日志文件的内容覆盖它。

调用函数FlushViewOfFile()将内存数据写入磁盘。

关闭日志文件的内存映射。

可供参考的代码:

https://github.com/3gstudent/Eventlogedit-evtx-Evolution/blob/master/Dll-evtexportlog . CPP

3、通过DuplicateHandle

详情请咨询《Windows XML Event Log (EVTX)单条日志清除(五)——通过DuplicateHandle获取日志文件句柄删除当前系统单条日志记录》。

实现思路如下:

枚举所有进程以获取指定的文件句柄。

通过DuplicateHandle复制句柄。

调用MapViewOfFile()函数将文件数据映射到进程的地址空间。

修改内存数据并用新日志文件的内容覆盖它。

调用函数FlushViewOfFile()将内存数据写入磁盘。

关闭日志文件的内存映射。

可供参考的代码:

https://github.com/3gstudent/Eventlogedit-evtx-Evolution/blob/master/deleterecordbygethandleex . CPP

0x05 完整实现流程

1、挂起日志线程,使当前系统不再记录日志

可供参考的代码:

https://github.com/3gstudent/Eventlogedit-evtx-Evolution/blob/master/suspendorresumetid . CPP

该代码支持三种操作,即挂起、恢复和终止。

2、过滤日志并保存

两种方法

(1)通过筛选条件删除指定的日志

方法可以参考0x03。

优势:

简单高效

缺点:

删除指定的日志后,后续日志的事件记录id不会更新。如果逐个比较日志的event recordids,可以发现被删除日志的数量和时间范围。

(2)自己实现

可供参考的代码:

https://github.com/3gstudent/Eventlogedit-evtx-进化/blob/master/deleterecordoffile . CPP

好处是不留痕迹。

缺点是实现起来比较麻烦,在各种情况下需要考虑多个组块。

3、覆盖系统原日志文件

三种方法:

(1)通过解除文件占用

在某些情况下,关闭Eventlog进程并重新启动服务Eventlog会生成日志文件,这些文件位于系统下,事件id为7034和7036。

您可以选择在日志重新启动后立即挂起线程,以避免日志被记录。参考代码:

https://github.com/3gstudent/Eventlogedit-evtx-Evolution/blob/master/suspendorresumetidex . CPP

当日志进程不存在时,程序将一直等待。

(2)通过注入

存在注入失败或拦截的情况。

存在导致删除失败的竞争条件。

(3)通过DuplicateHandle

存在导致删除失败的竞争条件。

综上,共介绍了2*3=6种删除单条日志的方法。

补充:

缺省配置powershell v5.0或更低版本将在启动powershell时生成日志,该日志位于% systemroot % \ system32 \ wine vt \ logs \ windows powershell . evtx中

该日志不记录具体的脚本内容,但包括powershell.exe的启动时间。

挂起日志线程不会阻止日志的生成。

可以用一种方法清除日志。

powershell更高版本的日志旁路可以参考文章:

https://www . MD sec . co . uk/2018/06/exploring-powershell-amsi-and-logging-evasion/

4、恢复日志线程,恢复日志记录功能

可供参考的代码:

https://github.com/3gstudent/Eventlogedit-evtx-Evolution/blob/master/suspendorresumetid . CPP

0x06 防御建议

当攻击者获得系统的完全权限时,系统的登录功能也会失效,可以关闭和修改。

因此,在取证中,日志不再可信,可以选择定期将日志备份到远程服务器。

0x07 小结

介绍了Windows XML事件日志(EVTX)在渗透测试中的具体使用,并基于使用思路给出了一些防御建议。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...