查看單個文章
舊 2006-02-13, 12:56 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 IPC$指令詳解

IPC$指令詳解
一 摘要
二 什麼是ipc$
三 什麼是空會話
四 空會話可以做什麼
五 ipc$所使用的連接阜
六 ipc管道在hack攻擊中的意義
七 ipc$連接失敗的一般原因
八 複製文件失敗的原因
九 關於at指令和xp對ipc$的限制
十 如何開啟目標的IPC$共享以及其他共享
十一 一些需要shell才能完成的指令
十二 入侵中可能會用到的指令
十三 對比過去和現今的ipc$入侵
十四 如何防範ipc$入侵
十五 ipc$入侵問答精選

一 摘要
注意:本文所討論的各種情況均預設發生在win NT/2000環境下,win98將不在此次討論之列。


二 什麼是ipc$
IPC$(Internet Process Connection)是共享"命名管道"的資源,它是為了讓工作間通信而開放的命名管道,通過提供可信任的用戶名和密碼,連接雙方可以建立安全的通道並以此通道進行加密資料的交換,從而實現對遠端電腦的訪問。IPC$是NT/2000的一項新功能,它有一個特點,即在同一時間內,兩個IP之間只允許建立一個連接。NT/2000在提供了ipc$功能的同時,在初次安裝系統時還開啟了預設共享,即所有的邏輯共享(c$,d$,e$……)和系統目錄winnt或windows(admin$)共享。所有的這些,微軟的初衷都是為了方便管理員的管理,但在有意無意中,導致了系 統安全性的降低。
平時我們總能聽到有人在說ipc$漏洞,ipc$漏洞,其實ipc$並不是一個真正意義上的漏洞,我想之所以有人這麼說,一定是指微軟自己安置的那個『後門』:空會話(Null session)。那麼什麼是空會話呢?


三 什麼是空會話
在介紹空會話之前,我們有必要瞭解一下一個安全會話是如何建立的。
在Windows NT 4.0中是使用挑戰回應傳輸協定與遠端機器建立一個會話的,建立成功的會話將成為一個安全隧道,建立雙方通過它互通訊息,這個程序的大致順序如下:
1)會話請求者(客戶)向會話接收者(伺服器)傳送一個資料包,請求安全隧道的建
立;
2)伺服器產生一個隨機的64位數(實現挑戰)傳送回客戶;
3)客戶取得這個由伺服器產生的64位數,用試圖建立會話的帳號的密碼打亂它,將結
果返回到伺服器(實現回應);
4)伺服器接受回應後傳送給本機安全驗證(LSA),LSA通過使用該用戶正確的密碼來核實回應以便驗證請求者身份。如果請求者的帳號是伺服器的本機帳號,核實本機發生;如果請求的帳號是一個域的帳號,回應傳送到域控制器去核實。當對挑戰的回應核實為正確 後,一個訪問令牌產生,然後傳送給客戶。客戶使用這個訪問令牌連線到伺服器上的資源直到建議的會話被終止。
以上是一個安全會話建立的大致程序,那麼空會話又如何呢?

空會話是在沒有信任的情況下與伺服器建立的會話(即未提供用戶名與密碼),但根據WIN2000的訪問控制模型,空會話的建立同樣需要提供一個令牌,可是空會話在建立程序中並沒有經過用戶訊息的認證,所以這個令牌中不包含用戶訊息,因此,這個會話不能讓系 統間傳送加密訊息,但這並不表示空會話的令牌中不包含安全標幟符SID(它標幟了用戶和所屬組),對於一個空會話,LSA提供的令牌的SID是S-1-5-7,這就是空會話的SID,用戶名是:ANONYMOUS LOGON(這個用戶名是可以在用戶列表中看到的,但是是不能在SAM資料庫中找到,屬於系統內裝的帳號),這個訪問令牌包含下面偽裝的組:
Everyone
Network
在安全原則的限制下,這個空會話將被使用權訪問到上面兩個組有權訪問到的一切訊息。那麼建立空會話到底可以作什麼呢?


四 空會話可以做什麼
對於NT,在預設安全性設定下,借助空連接可以列舉目標主機上的用戶和共享,訪問everyone權限的共享,訪問小部分註冊表等,並沒有什麼太大的利用價值;對2000作用更小,因為在Windows 2000 和以後版本中預設只有管理員和制作備份#作員有權從網路訪問到註冊表,而且實現起來也不方便,需借助工具。
從這些我們可以看到,這種非信任會話並沒有多大的用處,但從一次完整的ipc$入侵來看,空會話是一個不可缺少的跳板,因為我們從它那裡可以得到戶列表,而大多數弱密碼掃瞄工具就是利用這個用戶列表來進行密碼猜解的,成功的匯出用戶列表大大增加了猜解的成 功率,僅從這一點,足以說明空會話所帶來的安全隱患,因此說空會話毫無用處的說法是不正確的。以下是空會話中能夠使用的一些具體指令:


1 首先,我們先建立一個空連接(當然,這需要目標開放ipc$)
指令:net use \\ip\ipc$ "" /user:""
注意:上面的指令包括四個空格,net與use中間有一個空格,use後面一個,密碼左右各一個空格。


2 檢視遠端主機的共享資源
指令:net view \\ip
解釋:前提是建立了空連接後,用此指令可以檢視遠端主機的共享資源,如果它開了共享,可以得到如下面的結果,但此指令不能顯示預設共享。

在 \\*.*.*.*的共享資源
資源共享名 檔案類型 用途 註釋

-----------------------------------------------------------
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
指令成功完成。

3 檢視遠端主機的當前時間
指令: net time \\ip
解釋:用此指令可以得到一個遠端主機的當前時間。


4 得到遠端主機的NetBIOS用戶名列表(需要開啟自己的NBT)
指令:nbtstat -A ip
用此指令可以得到一個遠端主機的NetBIOS用戶名列表,返回如下結果:

Node IpAddress: [*.*.*.*] Scope Id: []

NetBIOS Remote Machine Name Table

Name Type Status
---------------------------------------------
SERVER UNIQUE Registered
OYAMANISHI-H GROUP Registered
OYAMANISHI-H GROUP Registered
SERVER UNIQUE Registered
OYAMANISHI-H UNIQUE Registered
OYAMANISHI-H GROUP Registered
SERVER UNIQUE Registered
OYAMANISHI-H UNIQUE Registered
..__M##ROWSE__. GROUP Registered
INet~Services GROUP Registered
IS~SERVER...... UNIQUE Registered

MAC Address = 00-50-8B-9A-2D-37


以上就是我們經常使用空會話做的事情,好像也能獲得不少東西喲,不過要注意一點:建立IPC$連接的#作會在Event Log中留下記錄,不管你是否登入成功。 好了,那麼下面我們就來看看ipc$所使用的連接阜是什麼?


五 ipc$所使用的連接阜
首先我們來瞭解一些基礎知識:
1 SMB: (Server Message Block) Windows傳輸協定族,用於文件列印共享的服務;
2 NBT: (NETBios Over TCP/IP)使用137(UDP)138(UDP)139(TCP)連接阜實現關於TCP/IP傳輸協定的NETBIOS網路互聯。
3 在WindowsNT中SMB關於NBT實現,即使用139(TCP)連接阜;而在Windows2000中,SMB除了關於NBT實現,還可以直接通過445連接阜實現。

有了這些基礎知識,我們就可以進一步來討論訪問網路共享對連接阜的選項了:

對於win2000客戶端(發起端)來說:
1 如果在允許NBT的情況下連接伺服器時,客戶端會同時嘗試訪問139和445連接阜,如果445連接阜有回應,那麼就傳送RST包給139連接阜中斷連線連接,用455連接阜進行會話,當445連接阜無回應時,才使用139連接阜,如果兩個連接阜都沒有回應,則會話失敗;
2 如果在禁止NBT的情況下連接伺服器時,那麼客戶端只會嘗試訪問445連接阜,如果445連接阜無回應,那麼會話失敗。


對於win2000伺服器端來說:
1 如果允許NBT, 那麼UDP連接阜137, 138, TCP 連接阜 139, 445將開放(LISTENING);
2 如果禁止NBT,那麼只有445連接阜開放。


我們建立的ipc$會話對連接阜的選項同樣遵守以上原則。顯而易見,如果遠端伺服器沒有監聽139或445連接阜,ipc$會話是無法建立的。


六 ipc管道在hack攻擊中的意義
ipc管道本來是微軟為了方便管理員進行遠端管理而設計的,但在入侵者看來,開放ipc管道的主機似乎更容易得手。通過ipc管道,我們可以遠端使用一些系統函數(大多通過工具實現,但需要相應的權限),這往往是入侵成敗的關鍵。如果不考慮這些,僅從傳送 文件這一方面,ipc管道已經給了入侵者莫大的支持,甚至已經成為了最重要的傳輸手段,因此你總能在各大論壇上看到一些朋友因為打不開目標機器的ipc管道而一籌莫展大呼救命。當然,我們也不能忽視權限在ipc管道中扮演的重要角色,想必你一定品嚐過空會 話的尷尬,沒有權限,開啟管道我們也無可奈何。但入侵者一旦獲得了管理員的權限,那麼ipc管道這把雙刃劍將顯示出它猙獰的一面。


七 ipc$連接失敗的一般原因
以下是一些一般的導致ipc$連接失敗的原因:

1 IPC連接是Windows NT及以上系統中特有的功能,由於其需要用到Windows NT中很多DLL函數,所以不能在Windows 9.x/Me系統中執行,也就是說只有nt/2000/xp才可以相互建立ipc$連接,98/me是不能建立ipc$連接的;


2 如果想成功的建立一個ipc$連接,就需要回應方開啟ipc$共享,即使是空連接也是這樣,如果回應方關閉了ipc$共享,將不能建立連接;


3 連接發起方未啟動Lanmanworkstation服務(顯示名為:Workstation):它提供網路鏈結和通訊,沒有它發起方無法發起連接請求;


4 回應方未啟動Lanmanserver服務(顯示名為:Server):它提供了 RPC 支持、文件、列印以及命名管道共享,ipc$依賴於此服務,沒有它主機將無法回應發起方的連接請求,不過沒有它仍可發起ipc$連接;


5 回應方未啟動NetLogon,它支持網路上電腦 pass-through 帳戶登入身份(不過這種情況好像不多);


6 回應方的139,445連接阜未處於監聽狀態或被防火牆遮閉;


7 連接發起方未開啟139,445連接阜;


8 用戶名或者密碼錯誤:如果發生這樣的錯誤,系統將給你類似於''無法更新密碼''這樣的錯誤提示(顯然空會話排除這種錯誤);


9 指令輸入錯誤:可能多了或少了空格,當用戶名和密碼中不包含空格時兩邊的雙引號可以省略,如果密碼為空,可以直接輸入兩個引號""即可;


10 如果在已經建立好連接的情況下對方重啟電腦,那麼ipc$連接將會自動中斷連線,需要重新增立連接。


另外,你也可以根據返回的錯誤號分析原因:

錯誤號5,拒絕訪問:很可能你使用的用戶不是管理員權限的;
錯誤號51,Windows無法找到網路路徑:網路有問題;
錯誤號53,找不到網路路徑:ip位址錯誤;目標未開機;目標lanmanserver服務未啟動;目標有防火牆(連接阜過濾);
錯誤號67,找不到網路名:你的lanmanworkstation服務未啟動或者目標移除了ipc$;
錯誤號1219,提供的憑據與已存在的憑據集衝突:你已經和對方建立了一個ipc$,請移除再連;
錯誤號1326,未知的用戶名或錯誤密碼:原因很明顯了;
錯誤號1792,試圖登入,但是網路登入服務沒有啟動:目標NetLogon服務未啟動;
錯誤號2242,此用戶的密碼已經過期:目標有帳號原則,強制定期要求更改密碼。


八 複製文件失敗的原因
有些朋友雖然成功的建立了ipc$連接,但在copy時卻遇到了這樣那樣的麻煩,無法複製成功,那麼導致複製失敗的一般原因又有哪些呢?


1 對方未開啟共用資料夾
這類錯誤出現的最多,佔到50%以上。許多朋友在ipc$連接建立成功後,甚至都不知道對方是否有共用資料夾,就進行盲目複製,結果導致複製失敗而且鬱悶的很。因此我建議大家在進行複製之前務必用net view \\IP這個指令看一下你想要複製的共用資料夾是否存在(用軟體檢視當然更好),不要認為能建立ipc$連接就一定有共用資料夾存在。


2 向預設共享複製失敗
這類錯誤也是大家經常犯的,主要有兩個小方面:

1)錯誤的認為能建立ipc$連接的主機就一定開啟了預設共享,因而在建立完連接之後馬上向c$,d$,admin$之類的預設共享複製文件,一旦對方未開啟預設共享,將導致複製失敗。ipc$連接成功只能說明對方開啟了ipc$共享,並不能說明預設共享 一定存在。ipc$共享與預設共享是兩碼事,ipc$共享是一個命名管道,並不是哪個實際的資料夾,而預設共享卻是實實在在的共用資料夾;

2)由於net view \\IP 這個指令無法顯示預設共用資料夾(因為預設共享帶$),因此通過這個指令,我們並不能判斷對方是否開啟了預設共享,因此如果對方未開啟預設共享,那麼所有向預設共享進行的#作都不能成功;(不過大部分掃瞄軟體在掃弱密碼的同時,都能掃到預設共享目錄,可以 避免此類錯誤的發生)

要點:請大家一定區分ipc共享,預設共享,普通共享這三者的區別:ipc共享是一個管道,並不是實際的共用資料夾;預設共享是安裝時預設開啟的資料夾;普通共享是我們自己開啟的可以設定權限的共用資料夾。


3用戶權限不夠,包括四種情形:
1)空連接向所有共享(預設共享和普通共享)複製時,權限是不夠的;
2)向預設共享複製時,在Win2000 Pro版中,只有Administrators和Backup Operators組成員才可以,在Win2000 Server版本 Server Operatros組也可以訪問到這些共享目錄;
3)向普通共享複製時,要具有相應權限(即對方管理員事先設定的訪問權限);
4)對方可以通過防火牆或安全軟體的設定,禁止外部訪問共享;

注意:
1 不要認為administrator就一定具有管理員權限,管理員名稱是可以改的
2 管理員可以訪問預設共享的資料夾,但不一定能夠訪問普通的共用資料夾,因為管理員可以對普通的共用資料夾進行訪問權限設定,如圖6,管理員為D碟設定的訪問權限為僅允許名為xinxin的用戶對該檔案夾進行完全訪問,那麼此時即使你擁有管理員權限,你仍然 不能訪問D碟。不過有意思的是,如果此時對方又開啟了D$的預設共享,那麼你卻可以訪問D$,從而繞過了權限限制,有興趣的朋友可以自己做測試。


4被防火牆殺死或在區域網路
還有一種情況,那就是也許你的複製#作已經成功,但當遠端執行時,被防火牆殺掉了,導致找不到文件;或者你把木馬複製到了區域網路內的主機,導致連接失敗(反向連接的木馬不會發生這種情況)。如果你沒有想到這種情況,你會以為是複製上出了問題,但實際你的復 制#作已經成功了,只是執行時出了問題。


哈哈,大家也知道,ipc$連接在實際#作程序中會出現各種各樣的問題,上面我所總結的只是一些一般錯誤,沒說到的,大家可以給我提個醒兒。


九 關於at指令和xp對ipc$的限制
本來還想說一下用at遠端執行程序失敗的原因,但考慮到at的成功率不是很高,問題也很多,在這裡就不提它了(提的越多,用的人就越多),而是推薦大家用p***ec.exe遠端執行程序,假設想要遠端機器執行本機c:\xinxin.exe文件,且管理 員為administrator,密碼為1234,那麼輸入下面的指令:
p***ec \\ip -u administrator -p 1234 -c c:\xinxin.exe
如果已經建立ipc連接,則-u -p這兩個參數不需要,p***ec.exe將自動拷貝文件到遠端機器並執行。

本來xp中的ipc$也不想在這裡討論,想單獨拿出來討論,但看到越來越多的朋友很急切的提問為什麼遇到xp的時候,大部分#作都很難成功。我在這裡就簡單提一下吧,在xp的預設安全性選項中,任何遠端訪問僅被賦予來賓權限,也就是說即使你是用管理員帳戶和 密碼,你所得到的權限也只是Guest,因此大部分#作都會因為權限不夠而失敗,而且到目前為止並沒有一個好的辦法來突破這一限制。所以如果你真的得到了xp的管理員密碼,我建議你盡量避開ipc管道。


十 如何開啟目標的IPC$共享以及其他共享
目標的ipc$不是輕易就能開啟的,否則就要天下打亂了。你需要一個admin權限的shell,比如telnet,木馬,cmd重轉發IP等,然後在shell下執行:
net share ipc$
開放目標的ipc$共享;
net share ipc$ /del
關閉目標的ipc$共享;如果你要給它開共用資料夾,你可以用:
net share xinxin=c:\
這樣就把它的c碟開為共享名為xinxin共用資料夾了。(可是我發現很多人錯誤的認為開共用資料夾的指令是net share c$,還大模大樣的給菜鳥指指點點,真是誤人子弟了)。再次聲明,這些#作都是在shell下才能實現的。

十一 一些需要shell才能完成的指令
看到很多教學這方面寫的十分不準確,一些需要shell才能完成指令就簡簡單單的在ipc$連接下執行了,起了誤導作用。那麼下面我總結一下需要在shell才能完成的指令:

1 向遠端主機建立用戶,啟動用戶,修改用戶密碼,加入管理組的#作需要在shell下完成;

2 開啟遠端主機的ipc$共享,預設共享,普通共享的#作需要在shell下完成;

3 執行/關閉遠端主機的服務,需要在shell下完成;

4 啟動/殺掉遠端主機的工作,也需要在shell下完成(用軟體的情況下除外,如pskill)。


十二 入侵中可能會用到的指令
為了這份教學的完整性,我列出了ipc$入侵中的一些常用指令,如果你已經掌握了這些指令,你可以跳過這一部分看下面的內容。請注意這些指令是適用於本機還是遠端,如果只適用於本機,你只能在獲得遠端主機的shell(如cmd,telnet等)後,才能 向遠端主機執行。


1 建立/移除ipc$連接的指令

1)建立空連接:
net use \\127.0.0.1\ipc$ "" /user:""

2)建立非空連接:
net use \\127.0.0.1\ipc$ "密碼" /user:"用戶名"

3)移除連接:
net use \\127.0.0.1\ipc$ /del


2 在ipc$連接中對遠端主機的#作指令

1) 檢視遠端主機的共享資源(看不到預設共享):
net view \\127.0.0.1

2) 檢視遠端主機的當前時間:
net time \\127.0.0.1

3) 得到遠端主機的netbios用戶名列表:
nbtstat -A 127.0.0.1

4)映射/移除遠端共享:
net use z: \\127.0.0.1\c
此指令將共享名為c的共享資源映射為本機z盤

net use z: /del
移除映射的z盤,其他盤類推

5)向遠端主機複製文件:
copy 路徑\檔案名 \\IP\共享目錄名,如:
copy c:\xinxin.exe \\127.0.0.1\c$ 即將c碟下的xinxin.exe複製到對方c碟內
當然,你也可以把遠端主機上的文件複製到自己的機器裡:
copy \\127.0.0.1\c$\xinxin.exe c:\

6)遠端增加計劃工作:
at \\IP 時間 程式名稱 如:
at \\127.0.0.0 11:00 xinxin.exe
注意:時間盡量使用24小時制;如果你打算執行的程序在系統預設搜尋路徑(比如system32/)下則不用加路徑,否則必須加全路徑


3 本機指令

1)檢視本機主機的共享資源(可以看到本機的預設共享)
net share

2)得到本機主機的用戶列表
net user

3)顯示本機某用戶的帳戶訊息
net user 帳戶名

4)顯示本機主機當前啟動的服務
net start

5)啟動/關閉本機服務
net start 服務名
net stop 服務名

6)在本機增加帳戶
net user 帳戶名 密碼 /add

7)啟動禁用的用戶
net uesr 帳戶名 /active:yes

8)加入管理員組
net localgroup administrators 帳戶名 /add

很顯然的是,雖然這些都是本機指令,但如果你在遠端主機的shell中輸入,比如你telnet成功後輸入上面這些指令,那麼這些本機輸入將作用在遠端主機上。


4 其他一些指令
1)telnet
telnet IP 連接阜
telnet 127.0.0.0 23

2)用opentelnet.exe開啟遠端主機的telnet
OpenTelnet.exe \\ip 管理員帳號 密碼 NTLM的認證方式 port
OpenTelnet.exe \\127.0.0.1 administrator "" 1 90
不過這個小工具需要滿足四個要求:
1)目標開啟了ipc$共享
2)你要擁有管理員密碼和帳號
3)目標開啟RemoteRegistry服務,用戶就可以更改ntlm認證
4)對僅WIN2K/XP有效

3)用p***ec.exe一步獲得shell,需要ipc管道支持
p***ec.exe \\IP -u 管理員帳號 -p 密碼 cmd
p***ec.exe \\127.0.0.1 -u administrator -p "" cmd
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次