发新帖
armstrong

扫盲 netcat(网猫)的 N 种用法——从“网络诊断”到“系统入侵”

1楼 armstrong

★引子

  这些年来,俺在博客上写了若干“信息安全教程”,其中不免会涉及到【网络配置】。
  由于读者中有很多是“技术菜鸟”,经常在配置网络的时候卡壳——有些人是因为粗心,还有些是被系统的防火墙干扰了(误导了)。
  今天这篇,一个主要目的就是:教你如何用 netcat 这个牛逼的小工具进行网络诊断、网络配置、系统管理 ......
  此文的另一个目的是:介绍黑客/骇客是如何利用 netcat 这个工具来辅助入侵。所谓【知己知彼】,注重安全防范的同学,也应该稍微了解一些入侵者的手法。

★netcat 是个啥玩意儿?

  netcat 一般简称为 nc,直译为中文就是“网猫”,被誉为——【网络上的瑞士军刀】。
  它诞生于1995年,在网络安全社区的名气很大(就如同 AK47 在军事领域的名气)。长期在安全圈内混的人,应该都知道它。想当年,insecure.org 网站在本世纪初搞过几次“年度投票”,评选优秀的安全工具。每次投票,netcat 都能排进前几名。
  关于 nc 的更多介绍,请参见维基百科的“这个链接”。


★netcat 能干啥?

◇概述

  简而言之,nc 是一个【命令行】工具,能够让你很方便、很灵活地地操纵【传输层协议】(这里所说的“传输层协议”指的是 OSI 模型中的第4层,主要是 TCP & UDP)。
  如果你不明白“传输层协议”是啥?或者你从来没听说过“OSI”,建议先看完如下扫盲教程,再来看本文。
《计算机网络通讯的【系统性】扫盲——从“基本概念”到“OSI 模型”》

◇nc 的变种

  由于 nc 是如此牛逼,而它本身又很小(不但软件很小,源代码也很少)。很容易就衍生出一大堆【变种】。不同的变种,会在原有 nc 的基础上增加一些新功能。
  由于变种之间存在差异。在本文的开头部分,俺有必要先声明一下:这篇教程的内容,主要基于 OpenBSD 社区的变种(也叫“OpenBSD netcat”或“netcat-openbsd”)
  顾名思义,这是由 OpenBSD 社区重写的 netcat,主要增加了对“IPv6、proxy、Unix sockets”等功能的支持。另外,在细节上也有若干完善。
  虽然它出自 OpenBSD 社区,但很多主流 Linux 发行版的官方软件仓库已包含这个变种(比如说:Debian 家族、Arch 家族、openSUSE 家族、Gentoo 家族......)。
  “OpenBSD netcat”官网的帮助页面在“这里”,其官方代码仓库在“这里”。截止俺写本文时,其版本为 1.206,上个月刚更新(看 commit history,更新还挺勤快滴)
  为了打字省力,本文后续部分提到的 nc,除非专门注明,否则都是指:netcat 的 OpenBSD 变种。如果俺要称呼【原始】的那个 netcat,俺会称之为“原版 nc”(洋文叫做“traditional netcat”)。
  另,
  在本文末尾,俺单独开一个章节,简单聊聊 nc 的其它几个变种。


★nc 命令行简介

  要使用 nc,你就需要在【命令行】中与它打交道(它所有的功能,都以命令行的方式呈现给你用)。

◇nc 命令行的常规形式

  一般来说,nc 的命令行包括如下几个部分:
nc 命令选项 主机 端口
  命令选项
  这部分可能包含 0~N 个选项
  (注:这部分最复杂,下一个小节单独聊)
  主机
  这部分可能没有,可能以“点分十进制”形式表示,也可能以“域名”形式表示。
  端口
  这部分可能没有,可能是单个端口,可能是端口范围。
  对于“端口范围”,以两个数字分别表示“开始和结束”,中间以【半角减号】相连。举例:1-1024

◇何为“命令行选项”?

  简单来说,nc 提供了一大堆【命令行选项】,分别对应它提供的功能。每个选项都是“单字母”滴。有些选项需要带【选项值】,有些不需要。
  你要使用的选项都放在 nc 这个命令之后,每个选项前面要有一个【半角减号】,选项之间以空格分开。
  举例:
  在下面这个例子中,分别用到了三个选项(l、p、v),其中 12345 是选项 p 所带的【选项值】。
nc -l -p 12345 -v

  如果你的系统中已经有 nc(且 nc 已添加到【PATH 环境变量】),在命令行中执行如下,就可以看到它支持的全部命令选项的列表。
nc -h

  顺便说一下:在上述命令的输出中,如果第一行包含 OpenBSD 这个单词,就说明你当前用的“网猫”是 OpenBSD 变种。

◇【常用的】命令行选项

  由于上述命令显示的帮助是洋文。为了照顾新手,俺稍作解释(只列出【常用的】那些)。
选项    是否有“选项值”    说明
h    NO    输出 nc 的帮助
v    NO    在网络通讯时,显示详细的输出信息
注:建议新手多用该选项,出错时帮你诊断问题
n    NO    对命令行中的“主机”,【不】进行域名解析
注:如果“主机”是“点分格式”的 IP 地址,需要用该选项;
如果“主机”是“域名”形式,【不能】用该选项
p    YES    指定“端口号”
l    NO    开启“监听模式”,nc 作为【服务端】
注:如不加该选项,nc 默认作为客户端
u    NO    使用 UDP 协议
注:如不加该选项,默认是 TCP 协议
w    YES    设置连接的超时间隔(N 秒)
q    YES    让 nc 延时(N 秒)再退出
z    NO    开启“zero-I/O 模式”
注:该选项仅用于“端口扫描”,后面会聊到
k    NO    配合 -l 选项使用,可以重复接受客户端连接。
注:“原版 nc”的该选项用来开启“TCP keepalive”
这是“原版 nc”与“OpenBSD 变种”之间的差异之一
X    YES    指定代理的类型(具体用法,后面会聊到)
注:“原版 nc”【没有】该选项。这是“原版 nc”与“OpenBSD 变种”之间的差异之一
x    YES    以 IP:port 的格式指定代理的位置。
注:“原版 nc”【没有】该选项。这是“原版 nc”与“OpenBSD 变种”之间的差异之一
e    YES    启动某个进程,把该进程的“标准输入输出”与网络通讯【对接】
注:通常用该选项开启一个网络后门
“OpenBSD 变种”基于安全考虑,已去掉该选项,
但还是能用间接的方式达到同样的效果 :)

  汇总上述表格,只是用来【速查】。俺会在后续章节具体介绍每个命令选项的详细用法。

◇命令行选项的【合写】形式

  有时候要同时用到多个选项,可以“合写在一起”,在前面共用一个【半角减号】。
  还拿刚才俺举的例子,以下几种写法是【等价】滴。
nc -lp 12345 -v
nc -l -v -p 12345
nc -lv -p 12345
nc -lvp 12345

◇如何强行终止 nc?

  一般来说,在命令行环境下,你可以用【Ctrl C】这个组合键来强行终止当前运行的进程。
  对 nc,你同样可以这么干。


 


1楼 发布于:7月前   |   查看数:87   |   回复数:16
armstrong
2楼 armstrong

,隐藏内容需要回复后才能查看。


2楼 发布于:7月前
armstrong
3楼 armstrong

,隐藏内容需要回复后才能查看。


3楼 发布于:7月前
armstrong
4楼 armstrong

,隐藏内容需要回复后才能查看。


4楼 发布于:7月前
armstrong
5楼 armstrong

,隐藏内容需要回复后才能查看。


5楼 发布于:7月前
armstrong
6楼 armstrong

,隐藏内容需要回复后才能查看。


6楼 发布于:7月前
armstrong
7楼 armstrong

,隐藏内容需要回复后才能查看。


7楼 发布于:7月前
armstrong
8楼 armstrong

,隐藏内容需要回复后才能查看。


8楼 发布于:7月前
armstrong
9楼 armstrong

,隐藏内容需要回复后才能查看。


9楼 发布于:7月前
armstrong
10楼 armstrong

,隐藏内容需要回复后才能查看。


10楼 发布于:7月前
armstrong
11楼 armstrong

,隐藏内容需要回复后才能查看。


11楼 发布于:7月前
armstrong
12楼 armstrong

,隐藏内容需要回复后才能查看。


12楼 发布于:7月前
armstrong
13楼 armstrong

,隐藏内容需要回复后才能查看。


13楼 发布于:7月前
eureka
14楼 eureka
学习下
14楼 发布于:7月前
Alpha
15楼 Alpha
来看看。
15楼 发布于:6月前
kyoto
16楼 kyoto
我看看
16楼 发布于:6月前
文刀漂洋
17楼 文刀漂洋
来学习
17楼 发布于:6月前
社区游客

本站声明

坛友们发表的内容,版权归原作者所有,本站对坛友所发表的内容持中立态度。

您所发表的内容应符合中国和美国的法律,不以攻击、破坏、滋扰为目的,请勿在帖子中包含他人的个人身份及联系信息。