检查你的工具
在域渗透测试中,许多人使用一行式密码喷洒脚本来检测域用户是否使用了弱密码(如LetMeIn!或Winter2015)。该脚本从文件中读取用户列表和密码列表(或单个密码,以避免账户锁定),并尝试连接到域控制器的IPC共享。
与大多数一行式脚本一样,在替换客户特定部分时容易出错。因此,在针对整个域运行之前,最好先在自己的用户账户上测试。如果脚本找到了你提供的密码,则语法正确,也能找到其他密码。
但在最近的一次测试中,情况并非如此。即使测试账户的密码在尝试文件中,完整性检查也未能找到。随后进行了手动阅读和问题排查,教训是关注细节并理解工作原理。
故障排除的第一步是清晰描述问题,然后将测试案例缩小到最少的变量。
问题:使用有效凭据测试失败
完整命令如下:
|
|
为了更易读,可以分解为:
@FOR /F %p in (password.txt) DO@FOR /F %n in (users.txt) DO@net use \\dc1\IPC$ %p /user:CORP\%n 1>NUL 2>&1&& echo [*] %n:%p&& @net use /delete \\dc1\IPC$ > NUL
流程是:对password.txt中的每一行设置变量%p,对每个%p从users.txt中设置变量%n,尝试连接到域控制器的IPC$共享并忽略输出。如果连接成功,则输出用户名和密码,然后断开。
为了缩小范围,从读取测试文件并输出到stdout开始,以确保文件读取正确。可能的问题包括行结束序列、字符编码或命令行文件名传递。
快速发现问题是只获取了行的第一个单词,而不是整行。本以为按行读取,但实际是解析成零个或多个令牌,默认分隔符是制表符和空格。
通过指定分隔符(如"delims=")来解决,但需确保密码中不包含所选分隔符。测试了加号和空字符,最终使用空字符串有效。
知道了空格导致的问题后,下一个问题是需要在命令行中引用包含空格的项。懒惰的黑客通常避免在文件名中使用空格以避免引用。测试发现,在脚本中输出%p时需要引用。
修正后的更健壮的密码喷洒一行命令为:
|
|
建议保存此命令以备后用。