一个用于针对 Active Directory 联合身份验证服务 (ADFS) 测试凭据的脚本,可自动计算组织的 ADFS URL,并支持密码喷洒或暴力破解攻击。
主要思路是:在每次测试之间加入随机且较长的时间延迟,并使用代理列表或 Tor 来增加蓝队检测难度,从而实施密码喷洒攻击。同时也支持暴力破解,或测试 用户名:密码 格式的凭据(例如来自 Pwndb 的数据)。已测试过的登录信息会存储在日志文件中,避免重复测试。
./adfsbrute.py -t TARGET [-u USER] [-U USER_LIST] [-p PASSWORD] [-P PASSWORD_LIST] [-UL userpassword_list]
[-m MIN_TIME] [-M MAX_TIME] [-tp TOR_PASSWORD] [-pl PROXY_LIST] [-n NUMBER_OF_REQUESTS_PER_IP]
[-s STOP_ON_SUCCESS] [-r RANDOM_COMBINATIONS] [-d DEBUG] [-l LOG_FILE]
攻击参数说明:
* -t:目标域名。例如:test.com
* -u:单个用户名。例如:[email protected]
* -U:包含用户名列表的文件。例如:users.txt
* -p:单个密码。例如:Company123
* -P:包含密码列表的文件。例如:passwords.txt
* -UP:包含"用户名:密码"格式凭据列表的文件。例如:userpass.txt
* -m:每次测试之间随机等待时间的最小值(秒)。默认值:30
* -M:每次测试之间随机等待时间的最大值(秒)。默认值:60
* -tp:Tor 密码(通过 Tor 更换 IP 地址)
* -pl:使用代理列表(通过代理 IP 列表更换 IP 地址)
* -n:更换 IP 地址之前的请求次数(与 -tp 或 -pl 配合使用)。默认值:1
* -s:找到正确的凭据后即停止。默认值:False
* -r:随机化用户和密码的组合。默认值:True
* -d:显示调试信息。默认值:True
* -l:已测试凭据的日志文件路径。默认值:tested.txt
使用密码 "Company123" 进行密码喷洒,Tor 密码为 "test123",每 3 次请求更换一次 IP:
python3 adfsbrute.py -t company.com -U users.txt -p Company123 -tp test123 -n 3
使用密码 "Company123" 进行密码喷洒,Tor 密码为 "test123",每次请求更换 IP,随机延迟时间在 10 到 20 秒之间,不随机化用户顺序:
python3 adfsbrute.py -t company.com -U users.txt -p Company123 -tp test123 -m 10 -M 20 -r False
查找 ADFS URL:
python3 adfsbrute.py -t company.com
若要通过 Tor 为每次请求更换 IP,需先对密码进行哈希处理:
tor --hash-password test123
在文件 /etc/tor/torrc 中,取消注释变量 ControlPort 和 HashedControlPassword,并在后者中添加哈希值:
ControlPort 9051
HashedControlPassword 16:7F314CAB402A81F860B3EE449B743AEC0DED9F27FA41831737E2F08F87
重启 Tor 服务,并将该密码作为脚本参数("-tp test123" 或 "--tor_password 123"):
service tor restart
本脚本用于安全审计测试,未经 ADFS 所属公司的适当授权,请勿使用,否则将导致账户被锁定。