当前位置:Linux教程 - Linux综合 - netcat-网络的瑞士军刀--高手的不二选择

netcat-网络的瑞士军刀--高手的不二选择

  有关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>
[1] [2] [3] 下一页 

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倒是个上好的选择,如果有
上一页 [1] [2] [3] 下一页 

时间,我会在另一篇文章里讨论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中继功能用做跳板来躲避追踪的 这方面没有怎么研究过,再者也没有时间,如果哪位高手知道,请告诉我.

(出处:http://www.sheup.com)


上一页 [1] [2] [3] 

(出处:http://www.sheup.com)


上一页 [1] [2] [3] [4]