如何在Windows 2003中得到登陸密碼
1.hook了winlogon中幾個(gè)函數(shù),網(wǎng)上也有這類型的程序,叫winlogonhijack的項(xiàng)目在rootkit.com中有提供,不過(guò)那個(gè)項(xiàng)目只對(duì)本地登陸用戶有效,遠(yuǎn)程登陸用戶無(wú)效。
2.使用Gina和winlogon進(jìn)行套接,只要對(duì)某些函數(shù)執(zhí)行自己的記錄密碼的代碼,就可以將密碼記錄下來(lái),穩(wěn)定性高,而且對(duì)本地或遠(yuǎn)程登陸都有效,不過(guò)現(xiàn)存的gina后門程序在XP或2003中都有些函數(shù)沒(méi)有被導(dǎo)出過(guò),主要因?yàn)閤p和2003等在winlogon中加入了新的函數(shù)。
3.直接讀取內(nèi)存數(shù)據(jù)得到明文密碼。在NT 4.0/2K中,早就有程序findpass可以直接讀到winlogon進(jìn)程中的內(nèi)存數(shù)據(jù)而直接得到登陸用戶密碼,因?yàn)樵贜T4.0和2K中,帳號(hào)的信息,包括域名,帳號(hào)和密碼都是有規(guī)律地在winlogon內(nèi)存中的特定地址中,所以可以很簡(jiǎn)單就得到。但在XP和2003系統(tǒng)中,這樣方法是無(wú)效的了,似乎我們是沒(méi)有辦法直接讀出明文地址了。下面我們就來(lái)談?wù)勅绾蜗骹indpass在NT 4.0和2K在,在server 2003中得到登陸用戶的密碼。
雖然XP和2003是不象以前的NT系統(tǒng)那樣將登陸用戶信息保存在winlogon進(jìn)程的內(nèi)存地址內(nèi),但是基Lsass進(jìn)程對(duì)于要處理些信息時(shí),需要得到明文的登陸用戶密碼,所以登陸用戶的密碼會(huì)在Lsass進(jìn)程中出現(xiàn)(微軟沒(méi)有將密碼在Lsass進(jìn)程中進(jìn)行加密,微軟的說(shuō)法是因?yàn)長(zhǎng)sass需要得到明文的密碼,就算將密碼加密,也都只能用可逆的方法加密,只要跟蹤lsass的操作,一樣可以得到明文密碼,所以微軟使用了比較懶惰的方法,可能也是為了加快響應(yīng)速度,所以將明文密碼更是放在lsass進(jìn)程內(nèi)存內(nèi))。說(shuō)到這里,大家心里都清楚了,登陸用戶的密碼是在lsass進(jìn)程的內(nèi)存中。對(duì),就是這么一回事,但是要得到這個(gè)明文密碼,真是象使用NT 4.0和2K下的findpass那樣容易嗎?事實(shí)上并不是那么容易,因?yàn)橐韵聨讉(gè)原因:
A.密碼存放在lsass進(jìn)程中的內(nèi)存地址是沒(méi)有規(guī)律的
B.密碼有可能被最后登陸的用戶復(fù)蓋(例如管理員abc從本地登陸,然后管理員bbb從遠(yuǎn)程登陸,然后管理員bbb注銷終端,存放在lsass.exe進(jìn)程內(nèi)存中的密碼,還是管理員bbb的密碼),又或者用戶登陸后,然后注銷了,那么我們就算得到了密碼,也不知道是哪個(gè)用戶的密碼。
C.密碼前后的數(shù)據(jù)也是沒(méi)有規(guī)律的,如果有規(guī)律,例如密碼前的數(shù)據(jù),一定是有一段全是01字符的數(shù)據(jù)段,那么定位密碼就簡(jiǎn)單。
原因A和C都給我們帶來(lái)定位密碼的困難,原B就帶來(lái)不能確定密碼和帳號(hào)對(duì)應(yīng)的問(wèn)題.看來(lái)微軟在新的系統(tǒng)還是做過(guò)點(diǎn)功夫。不過(guò)我們是不會(huì)放棄的,就算是碰碰運(yùn)氣,也看能不能得到密碼,反正就算失敗,也沒(méi)什么關(guān)系。
最后的代碼,是我寫(xiě)來(lái)測(cè)試是不是能在2003的系統(tǒng)中得到登際用戶的密碼,結(jié)果也正好象我們上面的分析一樣(當(dāng)然了,上面的結(jié)果是用這程序測(cè)測(cè)得到的)。成功率當(dāng)然不高,因?yàn)槭芴嘣蛩绊懀ㄎ幻艽a上的困難或者無(wú)法定位,或者得到不是密碼的信息等等的原因,都令失敗率顯得相當(dāng)高,不過(guò)總還是一種方法,或者將來(lái)有人可以準(zhǔn)確定位到,那就是令人高興了。雖然說(shuō)失敗率高,但在一種情況下,成功率卻是很高的,那就是管理員只是在本地或終端中登陸了,以后再?zèng)]有用戶從本地或終端登陸過(guò),而且管理員也沒(méi)有鎖上過(guò)系統(tǒng),那么成功率就會(huì)是相當(dāng)高的了。
提高成功率的兩種做法:
1.程序直接寫(xiě)成服務(wù),定時(shí)檢查本地或遠(yuǎn)程登陸(其實(shí)沒(méi)什么分別),當(dāng)檢測(cè)到登陸后,去搜索lsass進(jìn)程內(nèi)存,嘗試得到密碼。
2.程序模擬一個(gè)登陸(使用LogonUser()就能搞定),因?yàn)槭褂肔ogonUser()這個(gè)API,你要提供帳號(hào)名和對(duì)應(yīng)的正確的密碼,才可以成功,然后你就可以去搜索lsass進(jìn)程內(nèi)存。因?yàn)橹烂艽a是什么,我們就能定位到密碼是保存在什么地方。因?yàn)榈顷懹脩舻拿艽a都是保存在同一個(gè)地址或相離不遠(yuǎn)的地址中,模擬登陸和搜索,可以先定位以后登陸的用戶的密碼會(huì)大約保存在什么位置。
無(wú)論怎說(shuō),三種方法中,最穩(wěn)定,最安全的方法還是使用Gina那種方法.Hijack了winlogn一些API的方法,畢竟是改動(dòng)了系統(tǒng)的東西,對(duì)系統(tǒng)的穩(wěn)定性來(lái)說(shuō),會(huì)有考驗(yàn),直接搜索lsass進(jìn)程內(nèi)存的方法呢,雖說(shuō)也是困難,但準(zhǔn)確性,成功率卻又是低。
下面的代碼使用的是很笨,而且很原始的搜索方法,主要是搜索Lsass內(nèi)存中"LocalSystem Remote Procedure"這個(gè)字符串,因?yàn)樵谙喈?dāng)多的測(cè)試中,密碼都是保存在有這個(gè)字符串的地址后一點(diǎn)的位置中,當(dāng)然了,很多系統(tǒng)并沒(méi)有這個(gè)字符串,或者就算有,我們得到的都是錯(cuò)誤的密碼。
代碼: //********************************************************************************
// Version: V1.0
// Coder: WinEggDrop
// Date Release: 12/15/2004
// Purpose: To Demonstrate Searching Logon User Password On 2003 Box,T
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無(wú)AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解