歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> netcat-網絡的瑞士軍刀--高手的不二選擇

netcat-網絡的瑞士軍刀--高手的不二選擇

日期:2017/2/27 14:21:01   编辑:更多Linux
  有關netcat的文章實在是太多了,關於它的強大我就不再復述了.我來說說它在實際中的用途. netcat可以作為類似於telent的客戶端,也可以監聽某個端口作為服務器,還可以作為掃描工具掃描對方主機的端口,還可以用來傳輸文件,不相 信嗎?聽我慢慢道來 首先我們要弄明白netcat的工作原理,其實netcat的原理很簡單,它就是從網絡的一端讀入數據,然後輸出到網絡的另一端,它可以使用tcp和udp 協議.之所以叫做netcat,因為它是網絡上的cat,想象一下cat的功能,讀出一個文件的內容,然後輸出到屏幕上(默認的stdout是屏幕,當然可以重 定向到其他地方).netcat也是如此,它讀取一端的輸入,然後傳送到網絡的另一端,就這麼簡單.但是千萬不要小看了它,netcat可以完成很多任務,,尤其是和其他程序組合時.好了,廢話少說,進入正題吧. 網上有兩種版本的netcat,一個是@stake公司的netcat,http://www.atstake.com/research/too...work_utilities/ 也就是最初的版本,還 有一個是GNU的netcat.http://netcat.sourceforge.net/download.PHP 我個人更傾向於使用GNU的netcat,因為它的功能更多,不過GNU的沒有 windows平台的版本 至於編譯和安裝我想就不用說了,如果這關都過不了,我想也有點太……,看看readme和install文件,一般情況下./configure&&make&&make install就ok了,具體的./configure選項看看幫助。 netcat的命令行程序名字為nc,是netcat的縮寫,安裝完了是找不到netcat這個程序的. root@mail etc #nc -h GNU netcat 0.7.0, a rewrite of the famous networking tool. Basic usages: connect to somewhere: nc [options] hostname port [port] ... listen for inbound: nc -l -p port [options] [hostname] [port] ... tunnel to somewhere: nc -L hostnameort -p port [options] Mandatory arguments to long options are mandatory for short options too. Options: -c, --close close connection on EOF from stdin -e, --exec=PROGRAM program to exec after connect -g, --gateway=LIST source-routing hop point[s], up to 8 -G, --pointer=NUM source-routing pointer: 4, 8, 12, ... -h, --help display this help and exit -i, --interval=SECS delay interval for lines sent, ports scanned -l, --listen listen mode, for inbound connects -L, --tunnel=ADDRESS:PORT forward local port to remote address -n, --dont-resolve numeric-only IP addresses, no DNS -o, --output=FILE output hexdump traffic to FILE (implies -x) -p, --local-port=NUM local port number -r, --randomize randomize local and remote ports -s, --source=ADDRESS local source address (ip or hostname) -t, --tcp TCP mode (default) -T, --telnet answer using TELNET negotiation -u, --udp UDP mode -v, --verbose verbose (use twice to be more verbose) -V, --version output version information and exit -x, --hexdump hexdump incoming and outgoing traffic -w, --wait=SECS timeout for connects and final net reads -z, --zero zero-I/O mode (used for scanning) Remote port number can also be specified as range. Example: '1-1024' 我用的是GNU的netcat,比起@stake公司的netcat多了-c選項,不過這是很有用的一個選項,後面我們會講到.還有GNU的-L,-t ,-T選項和@stake的 -L -t用途是不一樣的,自己琢磨吧. 一.客戶端 這是最簡單的使用方式,nc <hostname> <portnumber>


nc www.apache.org 80 get / http/1.1 HTTP/1.1 400 Bad Request Date: Mon, 08 Dec 2003 06:23:31 GMT Server: Apache/2.0.48-dev (Unix) Content-Length: 310 Connection: close Content-Type: text/Html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr /> <address>Apache/2.0.48-dev (Unix) Server at www.apache.org Port 80</address> </body></html> 呵呵,看到了什麼,我什麼也沒說哦 二.簡單服務器 nc -l -p <portnumber> //這裡-l參數表明nc處於監聽模式,-p指定端口號. nc -l -p 1234[假設這台主機ip為192.168.0.1] 然後從客戶端輸入,nc 192.168.0.1 1234 然後你從任一端輸入的數據就會顯示在另一端了.其實netcat的server和client的區別並不大,區別僅 僅在於誰執行了-l來監聽端口,一旦連接建立以後,就沒有什麼區別了.從這裡我們也可以了解netcat的工作原理了,通過網絡鏈接讀寫數據.[It is a simple Unix utility which reads and writes data across network connections, using TCP or UDP protocol]--@stake主頁是這麼說的. 三.telnet服務器 nc有一個-e的選項,用來指定在連接後執行的程序. 在windows平台上可以指定-e cmd.exe[winXP,win2000,]如果是98就指定command.exe.Linux則指定-e bash,或者任何你喜歡的shell,或者是你 自己編寫的程序,通常是做為後門 指定-e的效果是由你指定的程序代替了nc自己來接受另一端的輸入,並把輸入(命令)後反饋的結果顯示到另一端. server: nc -l -p 1234 -e bash client: nc 192.168.0.1 1234 就可以遠程登陸server了 其實我們不一定非要在server端指定-e,也可以在client端指定. server: nc -l -p 1234 client: nc -e 192.168.0.1 1234 .這樣,就相當於在server上遠程登陸client了.我前面說過,有關client和server的區分是沒有什麼意義的. 誰做為telnet server的標准只有一個,誰執行了-e [shell]. 四.FTP服務器 nc可以從任何地方接受輸入,不僅僅是-e指定的程序,還可以是文件;nc可以將輸入重定向到任何地方,不僅僅是默認的屏幕.指定的方法很簡單, 使用 > 和 < 重定向符號. 例1; server: nc -l -c -p 1234 </etc/passwd [這是很危險的,不要放在公網上,如果被我看到了,哼哼……] client: nc 192.168.0.1 1234 >somefile 例2; server: nc -l -c -p 1234 >somefile client: nc 192.168.0.1 1234 </etc/passwd 其中,-c選項指定在文件傳輸結束的時候關閉鏈接,這是GNU netcat特有的選項.不指定-c或者你使用@stake的netcat的話,你要在文件傳輸結束 是按Ctrl+c關閉鏈接. 五.掃描端口 nc -z -w 2 -v -v www.somewhere.com port[,port[,port-port]] -z 指定zero-I/O 模式,它讓netcat禁止任何來自源系統的I/O,如果不指定它,netcat會無限期的掛起端口.所以在網絡掃描時要指定-z選項. -w 指定超時時間,單位為秒 -v 詳細模式 例: nc -z -w 2 -v -v www.somewhere.com 20-30,80,100-112,443 不過我不贊成使用netcat來掃描,因為我覺得它的速度不夠快,而且得到的信息不夠全,而且更重要的是不夠隱蔽.nmap倒是個上好的選擇,如果有

時間,我會在另一篇文章裡討論nmap的超酷功能.[做做廣告先] 六.綜合應用 unix的強大不在於其某個程序自身,而在於多個簡單工具的組合,只要發揮你的想象力,你會發現unix的世界是多麼美好. 例1.[背景]有一台主機被懷疑遭到入侵並被安裝了rootkit,現在要和另一台干淨的主機做一下比較. 被入侵主機: find /etc -type fxargs md5sumnc -l -p 1234 -c 干淨主機: nc 192.168.0.1 1234md5sum -c -grep -v OK //md5sum -c 表示檢查給定列表的md5sum. 後跟文件名,這裡指定-,即標准輸入. //當文件的md5sum匹配是顯示OK,我們過濾掉這些行,顯示不匹配的行 例2.檢查被入侵的主機上的suid和sgid程序. 被入侵主機: find / -xdev -type f -user root \( -perm -4000 -o -perm -2000 \)xargs md5sum nc -l -c -p 1234 遠程主機: nc 192.168.0.33 1234md5sum -c -grep -v OK 例3. 遠程對被入侵主機做鏡像. 被入侵主機: dd if=/dev/hda1 bs=1024nc -l -p 1234 -c 遠程主機: nc 192.168.0.1 1234 >/check/host.disk1 然後,可以利用linux內核的loopback特性,把host.disk以只讀的方式mount上,然後就可以做取證分析了. [如果真的做取證分析,一定不要在原始的受害主機硬盤上find和類似的操作,因為這會修改時間標記而破壞原始的證據] 例4. 將文件壓縮後再傳送. 如果你的文件很大,何不先壓縮它呢,利用管道,我們甚至不用生成壓縮後的中間文件! 源主機: tar czf - worknc -l -c -p 1234 目的主機: nc 192.168.0.1 1234tar xzvf - [tar打包時最好不要使用絕對路徑,雖然GNU的tar能把它轉換成相對路徑,但不是所有的平台都能做到,所以如果不想把你的文件系統搞亂的話, 就使用相對路徑吧!] ………… 這裡的server和client的組合是可以互換的,以第六節中例1來說明: 你也可以這樣: 干淨主機: nc -l -p 1234 -c md5sum -c -grep -v OK 被入侵主機:find /etc -type fxargs md5sumnc 192.168.0.2 1234 其實,這些都不是固定的程式,根據你的實際需要,你可以想出更多的使用方法。因為,你是在使用UNIX,這就是UNIX。 that's all.拋磚引玉,寫到這裡吧,這就是"瑞士軍刀",覺得怎麼樣?其實netcat還有許多許多其他的用法,唯一限制就是你的想象力,把你知道的 告訴我,OK? 當然還有些方面我沒有寫出來,比如,netcat中繼的問題.某些黑客就拿netcat中繼功能用做跳板來躲避追蹤的 這方面沒有怎麼研究過,再者也沒有時間,如果哪位高手知道,請告訴我.





Copyright © Linux教程網 All Rights Reserved