一 前言 網上關於ipc$入侵的文章可謂多如牛毛
而且也不乏優秀之作
攻擊步驟甚至可以說已經成為經典的模式
因此也沒人願意再把這已經成為定式的東西拿出來擺弄
不過話雖這樣說
但我個人認為這些文章講解的並不詳細
對於第一次接觸ipc$的菜鳥來說
簡單的羅列步驟並不能解答他們的種種迷惑(你隨便找一個hack論壇搜一下ipc$
看看存在的疑惑有多少)
因此我參考了網上的一些資料
教程以及論壇帖子
寫了這篇總結性質的文章
想把一些容易混淆
容易迷惑人的問題說清楚
讓大家不要總徘徊在原地!
注意
本文所討論的各種情況均默認發生在win NT/
環境下
win
將不在此次討論之列
而鑒於win Xp在安全設置上有所提高
個別操作並不適用
有機會將單獨討論
二 什麼是ipc$ IPC$(Internet Process Connection)是共享
命名管道
的資源
它是為了讓進程間通信而開放的命名管道
通過提供可信任的用戶名和口令
連接雙方可以建立安全的通道並以此通道進行加密數據的交換
從而實現對遠程計算機的訪問
IPC$是NT/
的一項新功能
它有一個特點
即在同一時間內
兩個IP之間只允許建立一個連接
NT/
在提供了ipc$功能的同時
在初次安裝系統時還打開了默認共享
即所有的邏輯共享(c$
d$
e$……)和系統目錄winnt或windows(admin$)共享
所有的這些
微軟的初衷都是為了方便管理員的管理
但在有意無意中
導致了系統安全性的降低
平時我們總能聽到有人在說ipc$漏洞
ipc$漏洞
其實ipc$並不是一個真正意義上的漏洞
我想之所以有人這麼說
一定是指微軟自己安置的那個
後門
空會話(Null session)
那麼什麼是空會話呢?
三 什麼是空會話 在介紹空會話之前
我們有必要了解一下一個安全會話是如何建立的
在Windows NT
中是使用挑戰響應協議與遠程機器建立一個會話的
建立成功的會話將成為一個安全隧道
建立雙方通過它互通信息
這個過程的大致順序如下
)會話請求者(客戶)向會話接收者(服務器)傳送一個數據包
請求安全隧道的建立
)服務器產生一個隨機的
位數(實現挑戰)傳送回客戶
)客戶取得這個由服務器產生的
位數
用試圖建立會話的帳號的口令打亂它
將結果返回到服務器(實現響應)
)服務器接受響應後發送給本地安全驗證(LSA)
LSA通過使用該用戶正確的口令來核實響應以便確認請求者身份
如果請求者的帳號是服務器的本地帳號
核實本地發生
如果請求的帳號是一個域的帳號
響應傳送到域控制器去核實
當對挑戰的響應核實為正確後
一個訪問令牌產生
然後傳送給客戶
客戶使用這個訪問令牌連接到服務器上的資源直到建議的會話被終止
以上是一個安全會話建立的大致過程
那麼空會話又如何呢?
空會話是在沒有信任的情況下與服務器建立的會話(即未提供用戶名與密碼)
但根據WIN
的訪問控制模型
空會話的建立同樣需要提供一個令牌
可是空會話在建立過程中並沒有經過用戶信息的認證
所以這個令牌中不包含用戶信息
因此
這個會話不能讓系統間發送加密信息
但這並不表示空會話的令牌中不包含安全標識符SID(它標識了用戶和所屬組)
對於一個空會話
LSA提供的令牌的SID是S
這就是空會話的SID
用戶名是
ANONYMOUS LOGON(這個用戶名是可以在用戶列表中看到的
但是是不能在SAM數據庫中找到
屬於系統內置的帳號)
這個訪問令牌包含下面偽裝的組
Everyone
Network
在安全策略的限制下
這個空會話將被授權訪問到上面兩個組有權訪問到的一切信息
那麼建立空會話到底可以作什麼呢?
四 空會話可以做什麼 對於NT
在默認安全設置下
借助空連接可以列舉目標主機上的用戶和共享
訪問everyone權限的共享
訪問小部分注冊表等
並沒有什麼太大的利用價值
對
作用更小
因為在Windows
和以後版本中默認只有管理員和備份操作員有權從網絡訪問到注冊表
而且實現起來也不方便
需借助工具
從這些我們可以看到
這種非信任會話並沒有多大的用處
但從一次完整的ipc$入侵來看
空會話是一個不可缺少的跳板
因為我們從它那裡可以得到戶列表
這對於一個老練的黑客已經足夠了
以下是空會話中能夠使用的具體命令
首先
我們先建立一個空會話(需要目標開放ipc$)
命令
net use \\ip\ipc$
/user:
注意
上面的命令包括四個空格
net與use中間有一個空格
use後面一個
密碼左右各一個空格
查看遠程主機的共享資源
命令
net view \\IP
解釋
建立了空連接後
用此命令可以查看遠程主機的共享資源
如果它開了共享
可以得到如下類似類似結果
在 \\*
*
*
*的共享資源
資源共享名 類型 用途 注釋
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
命令成功完成
查看遠程主機的當前時間
命令
net time \\IP
解釋
用此命令可以得到一個遠程主機的當前時間
得到遠程主機的NetBIOS用戶名列表(需要打開自己的NBT)
nbtstat
A IP
用此命令可以得到一個遠程主機的NetBIOS用戶名列表(需要你的netbios支持)
返回如下結果
Node IpAddress: [*
*
*
*] Scope Id: []
NetBIOS Remote Machine Name Table
Name Type Status
SERVER <00> UNIQUE Registered
OYAMANISHI
H <00> GROUP Registered
OYAMANISHI
H <1C> GROUP Registered
SERVER <20> UNIQUE Registered
OYAMANISHI
H <1B> UNIQUE Registered
OYAMANISHI
H <1E> GROUP Registered
SERVER <03> UNIQUE Registered
OYAMANISHI
H <1D> UNIQUE Registered
__MSBROWSE__
<01> GROUP Registered
INet~Services <1C> GROUP Registered
IS~SERVER
<00> UNIQUE Registered
MAC Address =
B
A
D
以上就是我們經常使用空會話做的事情
好像也能獲得不少東西喲
不過要注意一點
建立IPC$連接的操作會在EventLog中留下記錄
不管你是否登錄成功
好了
那麼下面我們就來看看ipc$所使用的端口是什麼?
五 ipc$所使用的端口 首先我們來了解一些基礎知識
SMB:(Server Message Block) Windows協議族
用於文件打印共享的服務
NBT:(NETBios Over TCP/IP)使用
(UDP)
(UDP)
(TCP)端口實現基於TCP/IP協議的NETBIOS網絡互聯
在WindowsNT中SMB基於NBT實現
而在Windows
中
SMB除了基於NBT實現
還可以直接通過
端口實現
有了這些基礎知識
我們就可以進一步來討論訪問網絡共享對端口的選擇了
對於win
客戶端來說
如果在允許NBT的情況下連接服務器時
客戶端會同時嘗試訪問
和
端口
如果
端口有響應
那麼就發送RST包給
端口斷開連接
用
端口進行會話
當
端口無響應時
才使用
端口
如果兩個端口都沒有響應
則會話失敗
如果在禁止NBT的情況下連接服務器時
那麼客戶端只會嘗試訪問
端口
如果
端口無響應
那麼會話失敗
由此可見
禁止了NBT後的win
對win NT的共享訪問將會失敗
對於win
服務器端來說
如果允許NBT
那麼UDP端口
TCP 端口
將開放
如果禁止NBT
那麼只有
端口開放
我們建立的ipc$會話對端口的選擇同樣遵守以上原則
顯而易見
如果遠程服務器沒有監聽
或
端口
ipc$會話是無法建立的
六 ipc$連接在hack攻擊中的意義 就像上面所說的
即使你建立了一個空的連接
你也可以獲得不少的信息(而這些信息往往是入侵中必不可少的)
如果你能夠以某一個具有一定權限的用戶身份登陸的話
那麼你就會得到相應的權限
顯然
如果你以管理員身份登陸
嘿嘿
那你可就了不得了
基本上可以為所欲為了
不過你也不要高興的太早
因為管理員的密碼不是那麼好搞到的
雖然會有一些粗心的管理員存在弱口令
但這畢竟是少數
而且現在不比從前了
隨著人們安全意識的提高
管理員們也愈加小心了
得到管理員密碼將會越來越難的
因此今後你最大的可能就是以極小的權限甚至是沒有權限進行連接
甚至在主機不開啟ipc$共享時
你根本就無法連接
你會慢慢的發現ipc$連接並不是萬能的
所以不要奢望每次連接都能成功
那是不現實的
是不是有些灰心?倒也不用
關鍵是我們要擺正心態
不要把ipc$入侵當作終極武器
不要認為它戰無不勝
它只是很多入侵方法中的一種
你有可能利用它一擊必殺
也有可能一無所獲
這些都是正常的
在黑客的世界裡
不是每條大路都能通往羅馬
但總有一條路會通往羅馬
耐心的尋找吧!
七 ipc$連接失敗的常見原因 以下是一些常見的導致ipc$連接失敗的原因
IPC連接是Windows NT及以上系統中特有的功能
由於其需要用到Windows NT中很多DLL函數
所以不能在Windows
x/Me系統中運行
也就是說只有nt/
/xp才可以相互建立ipc$連接
From:http://tw.wingwit.com/Article/Common/201311/4880.html