剑道尘心 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 在渗透测试过程中,Windows日志往往会记录系统上的敏感操作,如添加用户、远程登录等。 对于完整的渗透测试,通常会清除并绕过Windows日志。对于防御者来说,了解常见的绕过方法也有助于更好的保护自己的系统。 因此,本文将介绍常见的清除和绕过Windows日志的方法,分享经验,帮助大家。 0x01 简介 本文将介绍以下内容: Windows日志的常用清除方法 绕过Windows日志的两种方法 0x02 Windows日志 Windows日志包括五个类别: 应用程序 安全的 设置 系统 转发事件 查看方式: 1、通过面板 位置如下: 控制面板\系统和安全-查看事件日志-Windows日志 如下图 2、通过Powershell 常见命令如下: (管理员权限) 查看所有日志: 获得WinEvent 查看应用程序类别下的日志: get-WinEvent-filter hashtable @ { logname=' Application ';} 0x03 Windows日志的常用清除方法 1、wevtutil.exe 操作系统默认包括,支持的系统:Win7及以上 常见命令如下: (1)统计日志列表,查询所有日志信息,包括时间和数量。 wevtutil.exe gli应用程序 操作如下 (2)查看指定类别的日志内容 文本应用程序 操作如下 (3)删除此类日志的所有内容。 wevtutil cl应用程序 操作如下 清除所有应用程序日志,数量为0。 (4)删除一条内容 尚不支持。 2、NSA DanderSpiritz DanderSpritz是NSA的一个界面远程控制工具。 请参考: https://3gstudent.github.io/NSA-DanderSpiritz测试指南-木马生成和测试 常见命令如下: (1)统计日志列表,查询所有日志信息,包括时间和数量。 事件日志查询-日志应用程序 (2)查看指定类别的日志内容 event log filter-日志应用程序-编号10 (3)删除此类日志的所有内容。 事件日志清除-日志应用程序 (4)删除一条内容 事件日志编辑-记录应用程序-记录1 注: 记录序列号可以通过eventlogfilter获得。 0x04 Windows日志的绕过方法 本文中介绍的思想参考了Halil Dalabasmaz@hlldz的文章,地址如下: https://artofpwn.com/phant0m-killing-windows-event-log.html 绕过原理: Windows日志对应于eventlog服务。找到该服务对应的进程svchost.exe,然后筛选出svchost.exe进程中具体实现日志功能的线程。调用TerminateThread结束线程并销毁日志记录功能。 特别的地方: 因为只有实现日志功能的线程已经结束,所以Windows事件日志服务并没有被销毁,它的状态仍然是正在运行。 绕过方法一 1、定位事件日志服务对应进程的svchost.exe的pid 2、在此过程中遍历所有线程 3、判断线程是否满足条件 Windows事件日志服务需要调用wevtsvc.dll,完整路径为% windir % \ system32 \ wevtsvc.dll。 而且,如果线程调用了wevtsvc.dll,就可以判断线程已经实现了日志功能。 4、端螺纹 使用终端线程 注: Halil Dalabasmaz@hlldz使用powershell实现方法一。完整的代码可以参考: https://github.com/hlldz/Invoke-Phant0m 执行powershell脚本后,Windows日志功能失败,无法记录日志。操作如下所示 5、恢复方法 结束流程svchost.exe 要重新启动Windows事件日志服务: 网络启动事件日志 操作如下 绕过方法二 1、定位事件日志服务对应进程的svchost.exe的pid Powershell代码如下: get-wmio object-Class win32 _ service-Filter ' name=' event log ' ' | select-exp ProcessId 在svchost.exe找到的pid是7008,如下所示 2、在此过程中遍历所有线程 使用PsList 下载地址: https://technet.microsoft.com/en-us/sysinternals/bb896682.aspx 具体参数如下: pslist.exe/accept EULA-d 7008 获取进程svchost.exe中的所有线程,如下图所示 3、判断线程是否满足条件 获取线程对应的服务。如果是eventlog,则满足条件。 使用:ScTagQuery 下载地址: http://www.winsiderss.com/tools/sctagquery/sctagqry.zip 具体参数如下: sctagqry.exe-t 7928 根据返回的服务标签,判断线程对应的服务。 找到eventlog对应的线程,如下所示 8136个线程符合条件,依次尝试,直到获得所有符合条件的线程。 注: 使用Process Explorer来简化这一过程。 找到事件日志服务对应的进程svchost.exe。 如下图 右键查看属性,选择线程选项卡,查看线程,可以直接获取线程对应的服务。 如下图 合格的线程TID是: 8136 8052 6708 2316 6356 4、端螺纹 调用TerminateThread 通过C实现,部分代码如下: int main(int argc,char* argv[]) { printf(' terminate thread TID:\ n '); for(int I=1;我 完整的代码已经上传到github,地址如下: https://github . com/3g student/Windwos-event log-Bypass/blob/master/terminateeventlogthread . CPP 控制台支持传入多个参数,有五个tid传入其中:8136 8052 6708 2316 6356。 自动结束相应的线程,日志功能失效。 具体操作如下 注: 我稍后会在github上更新这个bypass方法的完整实现代码,地址如下: https://github.com/3gstudent/Windwos-EventLog-Bypass 0x05 补充 1、安装sysmon可对Windows日志功能进行扩展 相关介绍和绕行思路可以参考; 通过https://3gstudent.github.io/APC的Dll注入-绕过Sysmon监控 2、绕过方法仅针对Windows日志 应用程序和服务日志失败,如Windows Powershell 如下图 0x06 小结 本文介绍了清除和绕过Windows日志的方法,希望对大家有所帮助。接下来分享一下绕过第二种方法的具体程序实现方法。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子