當前位置:
首頁 > 新聞 > SharpSniper利用分析

SharpSniper利用分析

0x00 前言

SharpSniper用於在域環境中找到指定域用戶的IP地址,需要具有讀取域控制器日誌的許可權,地址:https://github.com/HunnicCyber/SharpSniper

本文將要對SharpSniper的實現原理進行分析,擴展用法,分別介紹如何使用wevtutil.exe和powershell腳本實現相同的功能,分享其中需要注意的細節。

0x01 簡介

本文將要介紹以下內容:

·SharpSniper實現原理

·使用wevtutil實現

·使用powershell實現

0x02 SharpSniper實現原理

通過查詢域控制器上的用戶登錄日誌(Event ID:4624),獲得域用戶使用過的IP地址。

具體實現如下:

1.通過查詢日誌獲得域用戶使用過的IP

XPath查詢條件(以查詢用戶testb為例):

"Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"

對應代碼地址:https://github.com/HunnicCyber/SharpSniper/blob/master/QueryDC.cs#L16

2.通過正則表達式過濾出域用戶使用過的IP

正則表達式:

"\b\d\.\d\.\d\.\d\b"

·\b表示單詞的前或後邊界

·\d表示字元個數在1到3位之間

·.表示匹配字元"."

對應代碼地址:

https://github.com/HunnicCyber/SharpSniper/blob/master/Program.cs#L54

0x03 使用wevtutil實現

1.查詢指定用戶(以查詢用戶testb為例)的登錄日誌

cmd命令如下:

wevtutil qe security /format:text /q:"Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"

包括每條日誌的詳細信息,如下圖:

2.從詳細信息中提取出ip

這裡可以藉助find命令進行篩選。

cmd命令如下:

wevtutil qe security /format:text /q:"Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"|find "Source Network Address"

篩選後的結果如下圖:

從日誌中提取出用戶testb使用過的所有IP地址。

補充:XPath查詢條件的編寫

可以使用Event Viewer自動生成需要的XPath語句。

1.打開Event Viewer

cmd執行:eventvwr.msc

2.選擇Create Custom View..

如下圖:

3.設置查詢條件後選擇XML標籤

如下圖:

自動生成需要的XPath語句,如下圖:

4.使用wevtutil調用查詢語句的兩種方法

(1)按照/q參數的格式進行修改

需要提取自動生成的XPath語句中Select標籤中的內容。

(2)通過讀取文件調用查詢

直接使用自動生成的XPath語句。

將步驟3中的查詢語句保存到文件,例如custom1.xml。

讀取文件調用查詢的命令如下:

wevtutil qe custom1.xml /sq:true /rd:true /f:text

0x04 使用powershell實現

1.查詢指定用戶(以查詢用戶testb為例)的登錄日誌

Get-WinEvent -LogName "security" -

FilterXPath "Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"|Format-List

包括每條日誌的詳細信息,如下圖:

2.從詳細信息中提取出ip的三種方法

(1)使用find命令

Get-WinEvent -LogName "security" -

FilterXPath "Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"|Format-List|find "Source Network Address"

結果如下圖:

(2)通過正則表達式進行過濾

第一種實現方法:

使用SharpSniper中的正則表達式,對應的powershell命令如下:

$events = Get-WinEvent -LogName "security" -FilterXPath "Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"

$i=0

while ($i -lt $events.length) {

$IP=[regex]::matches($events[$i].Message, "\b\d\.\d\.\d\.\d\b")

Write-Host $IP

$i

}

結果如下圖:

第二種實現方法:

搜索關鍵詞"Source Network Address:",對應的powershell命令如下:

$events = Get-WinEvent -LogName "security" -FilterXPath "Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"

$i=0

while ($i -lt $events.length) {

$IP=[regex]::matches($events[$i].Message, "Source Network Address:(. )") | %{$_.Groups[1].Value.Trim()}

Write-Host $IP

$i

}

結果如下圖:

(3)先轉換成xml格式,再進行篩選

在輸出時,只有Message列,無法選擇只輸出"Source Network Address"的內容。

這裡如果將輸出內容轉換為xml格式,"Source Network Address"對應的列為ipaddress。

參考資料:

https://blog.51cto.com/beanxyz/1695288

對應的powershell命令如下:

$Events = Get-WinEvent -LogName "security" -FilterXPath "Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="testb"]]"

ForEach ($Event in $Events) {

$eventXML = [xml]$Event.ToXml()

For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i ) {

Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name $eventXML.Event.EventData.Data[$i].name -Value $eventXML.Event.EventData.Data[$i]."#text"

}

}

$events|select ipaddress

結果如下圖:

補充:使用powershell調用自動生成的XPath查詢條件

參照0x03中的內容,使用Event Viewer自動生成需要的XPath語句。

直接保存在變數$xml中並進行調用,對應的powershell命令如下:

$xml = @"

*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime)

"@

Get-WinEvent -FilterXml $xml

0x05 小結

本文分析了SharpSniper的實現原理,擴展用法,分別介紹如何使用wevtutil.exe和powershell腳本實現相同的功能,可以用來獲取域環境中關鍵用戶使用過的IP。

註:本文為 3gstudent 原創稿件,授權嘶吼獨家發布

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

使用惡意SQLite資料庫獲取代碼執行
信息竊取器概述:如何從瀏覽器竊取百萬數據