【3.A.S.T】网络安全爱好者's Archiver

黑客学习

冰绿茶 发表于 2009-1-31 17:47

学入侵的基本---端口部分指南

学入侵的基本---端口部分指南
内容如下:

TCP / UDP 端口简介:
相关简介:
在应用于计算机网络的 TCP 和 UDP 协议中, 端口是出现在数据包头部的特定号码. 端口的主要作用是: 将数据分配到计算机上运行的特定进程.

让我们来打个形象的比喻: 假设 IP 地址是一栋大楼的地址, 那么端口号就代表着这栋大楼的不同房间. 如果一封信 (数据包) 上的地址仅包含了这栋大楼的地址 (IP) 而没有具体的房间号 (端口号码), 那么没有人知道谁 (计算机服务) 应该去接受它. 为了让邮递成功, 发信人不仅需要写明大楼的地址, 还需要标注具体的收信人门牌号, 这样这封信才能被顺利的交到它应该前往的住所.

这里是一个具体的例子: 一台用来收发电子邮件服务器可能同时提供 SMTP 和 POP3 服务. 这些服务将被不同的服务端进程所处理, 而端口号码则被用来决定数据应该被关联到哪个进程上. 根据计算机惯例, SMTP 服务端将监听 25 端口, POP3 服务则监听 110 端口. 尽管在理论上使用其它端口也是可行的.

不是所有的网络传输层都使用网络端口; 例如, 尽管 UDP 和 TCP 使用端口, ICMP 则不使用.

端口号也许会经常在网站的地址中被看到. 在默认情况下, HTTP 使用 80 端口, HTTPS 则使用 443 端口, 不过像这样的 URL "www.example.com:8000/blah/" 将尝试连接到一个使用 8000 来代替 80 端口进行工作的 HTTP 服务器.

技术细节:
在 TCP (传输控制协议) 和 UDP (用户数据报协议) 中, 每个数据包头部将指定一个源端口 (source port) 和目标端口 (destination port), 它们均为一个 16 位无符号整数 (从 0 至 65535). 指定源地址和目标地址 (IP 号码) 的道理与其类似. 某个进程可能会 "绑定" 一个特定的端口 (也就是接下来两句话中的 "该端口") 来收发数据, 也就是说它会监听目的端口符合该端口号码的入站数据包, 同时还可能会发送源端口设置为该端口的出站数据包. 一个进程也可能同时绑定多个端口.

应用程序对于一般服务的实现通常是通过监听 (被行业惯例定义以及与被给定的协议协同使用的) 指定端口来实现的. 一般来说这些端口号都偏低. 在 Unix 中只有被 superuser (超级用户) 所享有的进程才有权力监听 0 至 1023 端口. 这确保了不被信任的程序无法被充当为系统服务进行工作. 相反的, 客户端连接通常使用范围更大的高端口.

端口号码构成了数据包头部的一部分, 因此不仅是收发机器, 其它的网络底层设备也能够轻易的读取它. 特别是防火墙 (无论是基于硬件或软件) 经常根据数据包的源端口号码和目标端口号码来区分对待它们. 端口映射也是这类应用中的一种.

进程通过套接字实现对 TCP 和 UDP 端口的连接. 套接字是一个传输终端, 进程可以在此被创建并绑定一个套接字地址. 在 TCP 或 UDP 中, 一个套接字地址由一系列的端口和一个 IP 地址组成. 套接字既可以被设定为在一个时间内仅接收或发送数据 (这也称为半双工), 或同时收发数据 (这也称为全双工). 除了 TCP 和 UDP 端口外, 套接字也可以成为单一计算机系统上, 连接网络端口和内部程序的桥梁

如以上所说, 因为不同的服务通常会监听不同的端口, 所以经常会有尝试顺次连接一套计算机上某个范围内的服务的行为, 这也被称为端口扫描. 端口扫描一般是由于某个恶意入侵的企图, 或者寻找系统漏洞以预防入侵的行为. 注意: 端口扫描不等于入侵成功.

端口连接请求对于连接在网络上的计算机来说是很常见的. "port knocking" (也称为 "端口试探", "端口碰撞" 或 "端口检测") 就是用一系列的端口连接请求以期能与服务器进行连接的一种技术.

相关背景:
互联网地址指派机构 (IANA) 负责 DNS 根服务器, IP 地址指派和其它互联网协议资源的全局协调.

端口号被划分为三个范围: 常用端口 (Well Known Ports), 已被注册端口 (Registered Ports), 以及动态/私有端口 (Dynamic and/or Private Ports).

常用端口号的范围为 0 至 1023; 已被注册端口的范围为 1024 至 49151. 端口号的注册流程已经在 RFC4340 中的 19.9 节做了解释.

简介:
计算机"端口"是英文port的译义,可以认为是计算机与外界通讯交流的出口。其中硬件领域的端口又称接口,如:USB端口、串行端口等。软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。

在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我们 这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻 辑意义上的端口。
那么TCP/IP协议中的端口指的是什么呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:256×256)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(256×256)。

我们知道,一台拥有IP地址的主机可以提供许多服 务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来 实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区 分不同的服务的。
需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则 可能使用“3457”这样的端口。
按对应的协议类型,端口有两种:TCP端口和UDP端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。

在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据包顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。

本地操作系统会给那些有需求的进程分配协议端口(protocal port,即我们常说的端口),每个协议端口由一个正整数标识,如:80,139,445,等等。当目的主机接收到数据包后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。说到这里,端口的概念似乎仍然抽象,那么继续跟我来,别走开。

端口其实就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。

不光接受数据包的进程需要开启它自己的端口,发送数据包的进程也需要开启端口,这样,数据包中将会标识有源端口,以便接受方能顺利的回传数据包到这个端口。

详解:
在开始讲什么是端口之前,我们先来聊一聊什么是 port 呢?常常在网络上听说『我的主机开了多少的 port ,会不会被入侵呀!?』或者是说『开那个 port 会比较安全?又,我的服务应该对应什么 port 呀!?』呵呵!很神奇吧!怎么一部主机上面有这么多的奇怪的 port 呢?这个 port 有什么作用呢?!

由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理,所以啰,当你的主机同时开启了 FTP 与 WWW 服务的时候,那么别人送来的资料封包,就会依照 TCP 上面的 port 号码来给 FTP 这个服务或者是 WWW 这个服务来处理,当然就不会搞乱啰!(注:嘿嘿!有些很少接触到网络的朋友,常常会问说:『咦!为什么你的计算机同时有 FTP、WWW、E-Mail 这么多服务,但是人家传资料过来,你的计算机怎么知道如何判断?计算机真的都不会误判吗?!』现在知道为什么了吗?!对啦!就是因为 port 不同嘛!你可以这样想啦,有一天,你要去银行存钱,那个银行就可以想成是『主机』,然后,银行当然不可能只有一种业务,里头就有相当多的窗口,那么你一进大门的时候,在门口的服务人员就会问你说:『嗨!你好呀!你要做些什么事?』你跟他说:『我要存钱呀!』,服务员接着就会告诉你:『喝!那么请前往三号窗口!那边的人员会帮您服务!』这个时候你总该不会往其它的窗口跑吧?! ""这些窗口就可以想成是『 port 』啰!所以啦!每一种服务都有特定的 port 在监听!您无须担心计算机会误判的问题呦!)

· 每一个 TCP 联机都必须由一端(通常为 client )发起请求这个 port 通常是随机选择大于 1024 以上的 port 号来进行!其 TCP 封包会将(且只将) SYN 旗标设定起来!这是整个联机的第一个封包;

· 如果另一端(通常为 Server ) 接受这个请求的话(当然啰,特殊的服务需要以特殊的 port 来进行,例如 FTP 的 port 21 ),则会向请求端送回整个联机的第二个封包!其上除了 SYN 旗标之外同时还将 ACK 旗标也设定起来,并同时时在本机端建立资源以待联机之需;

· 然后,请求端获得服务端第一个响应封包之后,必须再响应对方一个确认封包,此时封包只带 ACK 旗标(事实上,后继联机中的所有封包都必须带有 ACK 旗标);

· 只有当服务端收到请求端的确认( ACK )封包(也就是整个联机的第三个封包)之后,两端的联机才能正式建立。这就是所谓的 TCP 联机的'三段式交握( Three-Way Handshake )'的原理。

经过三向交握之后,呵呵!你的 client 端的 port 通常是高于 1024 的随机取得的 port 至于主机端则视当时的服务是开启哪一个 port 而定,例如 WWW 选择 80 而 FTP 则以 21 为正常的联机信道!

总而言之,我们这里所说的端口,不是计算机硬件的I/O端口,而是软件形式上的概念.工具提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。

那么,如果攻击者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了那些服务。我们都知道,提供服务就一定有服务软件的漏洞,根据这些,攻击者可以达到对目标计算机的初步了解。如果计算机的端口打开太多,而管理者不知道,那么,有两种情况:一种是提供了服务而管理者没有注意,比如安装IIS的时候,软件就会自动增加很多服务,而管理员可能没有注意到;一种是服务器被攻击者安装木马,通过特殊的端口进行通信。这两种情况都是很危险的,说到底,就是管理员不了解服务器提供的服务,减小了系统安全系数。

作用:
我们知道,一台拥有IP地址的主机可以提供许多服 务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来 实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区 分不同的服务的。

需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则 可能使用“3457”这样的端口。

端口在入侵中的作用
有人曾经把服务器比作房子,而把端口比作通向不同房间(服务)的门,如果不考虑细节的话,这是一个不错的比喻。入侵者要占领这间房子,势必要破门而入(物理入侵另说),那么对于入侵者来说,了解房子开了几扇门,都是什么样的门,门后面有什么东西就显得至关重要。

入侵者通常会用扫描器对目标主机的端口进行扫描,以确定哪些端口是开放的,从开放的端口,入侵者可以知道目标主机大致提供了哪些服务,进而猜测可能存在的漏洞,因此对端口的扫描可以帮助我们更好的了解目标主机,而对于管理员,扫描本机的开放端口也是做好安全防范的第一步。

分类:
软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。

面向连接服务和无连接服务
可以先了解面向连接和无连接协议(Connection-OrientedandConnectionlessProtocols)面向连接服务的主要特点有:面向连接服务要经过三个阶段:数据传数前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。面向连接服务,可确保数据传送的次序和传输的可靠性。无连接服务的特点是:无连接服务只有传输数据阶段。消除了除数据通信外的其它开销。只要发送实体是活跃的,无须接收实体也是活跃的。它的优点是灵活方便、迅速,特别适合于传送少量零星的报文,但无连接服务不能防止报文的丢失、重复或失序。

区分"面向连接服务"和"无连接服务"的概念
区分特别简单、形象的例子是:打电话和写信。两个人如果要通电话,必须先建立连接--拨号,等待应答后才能相互传递信息,最后还要释放连接--挂电话。写信就没有那么复杂了,地址姓名填好以后直接往邮筒一扔,收信人就能收到。TCP/IP协议在网络层是无连接的(数据包只管往网上发,如何传输和到达以及是否到达由网络设备来管理)。而"端口",是传输层的内容,是面向连接的。协议里面低于1024的端口都有确切的定义,它们对应着因特网上常见的一些服务。


这些常见的服务划分
划分为使用TCP端口(面向连接如打电话)和使用UDP端口(无连接如写信)两种。

网络中可以被命名和寻址的通信端口是操作系统的一种可分配资源。由网络OSI(开放系统互联参考模型,OpenSystemInterconnectionReferenceModel)七层协议可知,传输层与网络层最大的区别是传输层提供进程通信能力,网络通信的最终地址不仅包括主机地址,还包括可描述进程的某种标识。所以TCP/IP协议提出的协议端口,可以认为是网络通信进程的一种标识符。

应用程序(调入内存运行后一般称为:进程)通过系统调用与某端口建立连接(binding,绑定)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都从该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写方式访问类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来区别不同的端口。由于TCP/IP传输层的TCP和UDP两个协议是两个完全独立的软件模块,因此各自的端口号也相互独立。如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。端口号有两种基本分配方式:第一种叫全局分配这是一种集中分配方式,由一个公认权威的中央机构根据用户需要进行统一分配,并将结果公布于众,第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来(binding,绑定)。TCP/IP端口号的分配综合了以上两种方式,将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。每一个标准服务器都拥有一个全局公认的端口叫周知口,即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP规定,小于256的端口才能作为保留端口。

按端口号可分为3大类:
(1)公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。

(2)注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

(3)动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

系统管理员可以"重定向"端口:
一种常见的技术是把一个端口重定向到另一个地址。例如默认的HTTP端口是80,不少人将它重定向到另一个端口,如8080。如果是这样改了,要访问本文就应改用这个地[url=http://wwd.3322.net:8080/net/port.htm]http://wwd.3322.net:8080/net/port.htm[/url](当然,这仅仅是理论上的举例)。实现重定向是为了隐藏公认的默认端口,降低受破坏率。这样如果有人要对一个公认的默认端口进行攻击则必须先进行端口扫描。大多数端口重定向与原端口有相似之处,例如多数HTTP端口由80变化而来:81,88,8000,8080,8888。同样POP的端口原来在110,也常被重定向到1100。也有不少情况是选取统计上有特别意义的数,象1234,23456,34567等。许多人有其它原因选择奇怪的数,42,69,666,31337。近来,越来越多的远程控制木马(RemoteAccessTrojans,RATs)采用相同的默认端口。如NetBus的默认端口是12345。BlakeR.Swopes指出使用重定向端口还有一个原因,在UNIX系统上,如果你想侦听1024以下的端口需要有root权限。如果你没有root权限而又想开web服务,你就需要将其安装在较高的端口。此外,一些ISP的防火墙将阻挡低端口的通讯,这样的话即使你拥有整个机器你还是得重定向端口。

按对应的协议类型端口有两种:
TCP端口和UDP端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。

1.周知端口(Well Known Ports)
周知端口是众所周知的端口号,范围从0到1023,其中80端口分配给W WW服务,21端口分配给FTP服务等。我们在IE的地址栏里输入一个网址的时候( 比如[url=http://www.cce.com.cn]www.cce.com.cn[/url])是不必指定端口号的,因为在默认情况下WWW服务的端口 号是“80”。

网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在 地址栏上指定端口号,方法是在地址后面加上冒号“:”(半角),再加上端口 号。比如使用“8080”作为WWW服务的端口,则需要在地址栏里输入“[url=http://www.cce.com.cn:8080]www.cce.com.cn:8080[/url]”。

但是有些系统协议使用固定的端口号,它是不能被改变的,比如139 端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。

2.动态端口(Dynamic Ports)
动态端口的范围是从1024到65535。之所以称为动态端口,是因为它 一般不固定分配某种服务,而是动态分配。动态分配是指当一个系统进程或应用 程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配 一个供它使用。当这个进程关闭时,同时也就释放了所占用的端口号。

================端口查看================


1. 通过命令或工具
这里介绍 netstat.
netstat 是查看自己所开放端口的最方便方法:
开始 > 运行 > 输入 cmd, 回车
在新开的命令行窗口中输入:
netstat -an

输出结果应该与下面的示例类似

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:44080          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:44110          0.0.0.0:0              LISTENING
  TCP    127.0.0.1:1026         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:9666         0.0.0.0:0              LISTENING
  TCP    169.254.163.82:139     0.0.0.0:0              LISTENING
  TCP    201.16.1.41:2829   119.13.200.201:443      CLOSE_WAIT
  TCP    201.16.1.41:3488   119.13.60.243:8000    ESTABLISHED
  UDP    0.0.0.0:445            *:*                    
  UDP    0.0.0.0:500            *:*                    
  UDP    0.0.0.0:2164           *:*                    
  UDP    0.0.0.0:4000           *:*                    
  UDP    0.0.0.0:4001           *:*                    
  UDP    0.0.0.0:4500           *:*                    
  UDP    0.0.0.0:6000           *:*                    
  UDP    0.0.0.0:6002           *:*                    
  UDP    0.0.0.0:6003           *:*                    
  UDP    0.0.0.0:21871          *:*                    
  UDP    0.0.0.0:60594          *:*                    

其中:
TCP / UDP 是指的协议类型.
LISTENING 是指的正在监听的端口
CLOSE_WAIT 指正在关闭的端口
ESTABLISHED 指的是已经建立连接的端口

这里附带讲一下检查可疑程序的思路, 一般我们需要重点观察 LISTENING 和 ESTABLISHED 状态的端口. 前者可能是恶意程序在等待入侵者的信息, 而后者则可能是恶意程序正在跟目标主机 (也就是入侵者主机) 进行通信. 当然, 一般情况下有着这两种状态的端口也有很多, 大家注意不要过于敏感.

除此之外, 大家可以用端口扫描器来检查自己的机器. 比如 X-Scan 等. 需要注意的是端口扫描器最好不要在需要进行检测的计算机上运行.

2. 通过端口检测网站
比较常用的是
[url=http://pfw.sky.net.cn/detect/portscan.php]http://pfw.sky.net.cn/detect/portscan.php[/url]
[url=http://security.symantec.com/sscv6/default.asp?langid=cs&venid=sym]http://security.symantec.com/ssc ... id=cs&venid=sym[/url]
[url=http://www.pcflank.com/scanner1.htm]http://www.pcflank.com/scanner1.htm[/url]

3. 通过本机防火墙
一般的防火墙都会提供本机端口的信息

df001 发表于 2009-1-31 17:47

支持了。感谢。一定要深入了解。
'Cause you will hate yourself in the end.

likun1005 发表于 2009-1-31 17:47

支持下,一定好好学习,

aihq5201314 发表于 2009-2-1 16:32

收下,一定要看看。

战神 发表于 2009-2-13 14:03

找了很久终于找到一篇了。太感谢了!以后还能发表这类帖子吗?

379246434 发表于 2009-2-14 06:38

学习了,期望更多的精彩的内容!!

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.