در برخی مواقع، لازم است بدانید که درخواستهای LDAP در چه زمینهای (context) اجرا میشوند. این موضوع بهویژه پس از اجرای تکنیکهای Pass-the-Ticket و OverPass-the-Hash اهمیت دارد. اگر یک سشن جدید با استفاده از دستور
runas /netonly ایجاد شده باشد، دستور whoami کاربری را که این دستور را اجرا کرده است، نشان میدهد. میتوان با استفاده از دستور klist اطلاعاتی درباره بلیطهای Kerberos مشاهده کرد، اما اگر هیچ درخواست Kerberos وجود نداشته باشد، klist اطلاعاتی درباره بلیطها ارائه نخواهد داد.در این حالت، میتوان از اسکریپت زیر برای بهدست آوردن اطلاعات مفید استفاده کرد:
function Invoke-LDAPWhoami
{
Add-Type -AssemblyName System.DirectoryServices.Protocols -ErrorAction Stop
$connect = new-object System.DirectoryServices.Protocols.LdapConnection("domain.local")
$request = new-object System.DirectoryServices.Protocols.ExtendedRequest('1.3.6.1.4.1.4203.1.11.3')
$result = ([System.Text.Encoding]::ASCII.GetString($connect.SendRequest($request).ResponseValue)).split(":")[1]
Write-Host "Current context is: $result"
}
Invoke-LDAPWhoami
این اسکریپت یک درخواست گسترشیافته LDAP با OID
1.3.6.1.4.1.4203.1.11.3 را اجرا میکند که حساب کاربری را که درخواست را به نمایندگی از آن انجام شده است، برمیگرداند. پارامتر دامنه، در اینجا domain.local، میتواند از محیط $env:USERDNSDOMAIN بهدست آید اگر اسکریپت بر روی یک ماشین دامنه اجرا شود.در این پست، من روشهای جایگزین برای دستور
whoami را ذکر کردهام، بنابراین میتوان این روش را نیز به مجموعه اضافه کرد.@KavehOffSec