在中小型網絡中,很多用戶選擇Windows 2000作為網絡OS,利用其簡單的配置和用戶熟悉的圖形界面提供Internet服務,Telnet便是其提供的服務之一。Telnet最基本應用就是 用于Internet的遠程登錄,共享遠程系統中的資源。它可以使用戶坐在已上網的電腦鍵盤前通過網絡進入的另一臺已上網的電腦,并負責把用戶輸入的每個 字符傳遞給主機,再將主機輸出的每個信息回顯在屏幕上。這種連通可以發生在同一房間里面的電腦或是在世界各范圍內已上網的電腦。Telnet服務與其他網 絡應用一樣屬于客戶機/服務器模型,一旦連通后,客戶機可以享有服務器所提供的一切服務。
Windows 2000 默認安裝了 Telnet 服務,但是并沒有默認啟動。通過“開始”“網絡工具”“服務”(或運行tlntsvr.exe程序)就可啟動該服務。在客戶端單擊“開始”按鈕,在彈出的菜單中選擇“運行”命令,然后輸入以下命令建立連接:
telnet[Remote-system][Port-number]
這時候會在屏幕上顯示:
screen.width-500)this.style.width=screen.width-500;">
正常情況下,服務啟動后,鍵入該命令后應該是遠程計算機回送Login和Password信息,提示用戶輸入用戶名和口令。在Linux網絡操作系統下就是這樣:
telnet porky.math.ukans.edu
Trying 129.237.128.11...
Connected to porky.math.ukans.edu.
Escape character is '^]'.
SunOS UNIX(porky)
login:wl
password:xxxxxx
可是仔細看看上面的顯示,根本沒有給你輸入用戶名和密碼的機會,直接斷開連接,這是什么原因呢?原來是 win2000中的telnet的一種驗證身份方式所致:即Windows NT LAN Manager (NTLM)。早期的SMB協議在網絡上明文傳輸口令,后來出現了"LAN Manager Challenge/Response"驗證機制,簡稱LM,它十分簡單以至很容易被破解,微軟隨后提出了WindowsNT挑戰/響應驗證機制,即NTLM。現在已經有了更新的NTLMv2以及Kerberos驗證體系。NTLM工作流程是這樣的:
1、客戶端首先在本地加密當前用戶的密碼成為密碼散列
2、客戶端向服務器發送自己的帳號,這個帳號是沒有經過加密的,明文直接傳輸
3、服務器產生一個16位的隨機數字發送給客戶端,作為一個 challenge(挑戰)
4、客戶端再用加密后的密碼散列來加密這個 challenge ,然后把這個返回給服務器。作為 response(響應)
5、服務器把用戶名、給客戶端的challenge 、客戶端返回的 response 這三個東西,發送域控制器
6、域控制器用這個用戶名在 SAM密碼管理庫中找到這個用戶的密碼散列,然后使用這個密碼散列來加密 challenge。
7、域控制器比較兩次加密的 challenge ,如果一樣,那么認證成功。
從上面的過程我們可以看出,NTLM是以當前用戶的身份向Telnet服務器發送登錄請求的,而不是用你自己的帳戶和密碼登錄,顯然,你的登錄將會失敗。舉個例子來說,你家的機器名為A(本地機器),你登錄的機器名為B(遠地機器),你在A上的帳戶是ABC,密碼是1234,你在B上的帳號是 XYZ,密碼是5678,當你想Telnet到B時,NTLM將自動以當前用戶的帳號和密碼作為登錄的憑據來進行上面的7項操作,即用ABC和1234,而并非用你要登錄帳號XYZ和5678,且這些都是自動完成的,根本不給你動手的機會,因此你的登錄操作將失敗。
NTLM身份驗證選項有三個值。默認是2??梢杂邢旅孢@些值:
0: 不使用 NTLM 身份驗證。
1: 先嘗試 NTLM 身份驗證,如果失敗,再使用用戶名和密碼。
2: 只使用 NTLM 身份驗證。
Telnet服務器使用NTLM的有3選項之一時,客戶機會顯示下面情況中的一種:
(1)身份驗證選項=0時
Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99201.1
login:
password:
NTLM身份驗證選項為0時不使用NTML身份驗證,直接輸入用戶名和密碼,比如你可以輸入自己的登錄帳號密碼XYZ和5678。
(2)身份驗證選項=1時
NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password
Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99201.1
login:
password:
這時先嘗試 NTLM 身份驗證,如果失敗,再使用用戶名和密碼,其實這種方式對于我們來說,與上一種方式沒什么區別。
(3)身份驗證選項=2時,就是我們一開始遇到的現象。
對NTLM身份驗證選項值的改變可以使用Win2000為我們提供Telnet服務器管理程序tlntadmn.exe;其實Win2000同 時為我們提供了Telnet客戶機和服務器程序:Telnet.exe是客戶機程序(Client),tlntsvr.exe是服務器程序 (server),及Telnet服務器管理程序tlntadmn.exe。若我們不需要NTLM身份驗證可以按以下步驟設置:
1、單擊“開始”—>“運行“,鍵入tlntadmn,然后確定
2、在彈出的選項中選擇 Display, 再選擇 Change Registry Settings.
3、選擇 NTLM.
4、改變 NTLM 值為0不使用NTML身份驗證
5、重新啟動Telnet 服務器。
其實也可以使用tlntadmn.exe 對Telnet 服務的其他默認設置來進行配置,配置后需要重新啟動Telnet服務。如下圖 :
screen.width-500)this.style.width=screen.width-500;">
AllowTrustedDomain:是否允許域用戶訪問。默認值是1,允許信任域用戶訪問??梢愿臑?: 不允許域用戶訪問(只允許本地用戶)。
DefaultDomain:可以對與該計算機具有信任關系的任何域設置。默認值是"."。
DefaultShell:顯示 shell 安裝的路徑位置。默認值是: %systemroot%System32Cmd.exe /q /k
MaxFailedLogins:在連接終止之前顯示嘗試登錄失敗的最大次數。默認是3。
LoginScript:顯示 Telnet 服務器登錄腳本的路徑位置。默認的位置就是“%systemroot%System32login.cmd”,你可以更改腳本內容,這樣登錄進Telnet的歡迎屏幕就不一樣了。
TelnetPort:顯示 telnet 服務器偵聽 telnet 請求的端口。默認是:23。你也可以更改為其他端口。
因此NTLM也是Windows 2000的一種重要安全策略,對于入侵者來說,NTLM就是橫在面前的一座大山,哪怕你獲得了管理員帳號和密碼,想簡單通過NTLM也并非易事,況且 win2000中的telnet默認僅以NTLM方式驗證身份,當然道高一尺,魔高一丈,作為網絡管理員,不是說有了NTLM保護,就可以高枕無憂了,對于網絡高手或黑客來說,時刻在撲捉系統漏洞和管理員疏忽,要突破NTLM的封鎖,常見的有以下幾種方法:
1、通過修改遠程注冊表更改telnet服務器配置,將驗證方式從2改為1或0;
2、使用NTLM.exe,上傳后直接運行,可將telnet服務器驗證方式從2改為1;
3、在本地建立掃描到的用戶,以此用戶身份開啟telnet客戶機并進行遠程登錄;
4、使用軟件,比如opentelnet.exe(需要管理員權限且開啟IPC管道)
5、使用腳本,如RTCS,(需要管理員權限但不依賴IPC管道)
基本上是以上的5種,其中后兩種是我們比較常用的開telnet的手法,而且使用方法十分簡單,命令如下:
OpenTelnet.exe server username password NTLMAuthor telnetport
OpenTelnet.exe 服務器地址 管理員用戶名 密碼 驗證方式(填0或1) telnet端口
cscript RTCS.vbe targetIP username password NTLMAuthor telnetport
cscript RTCS.vbe <目標IP> <管理員用戶名> <密碼> <驗證方式> <tlnet端口>