前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从原理上分析端口扫描技术

从原理上分析端口扫描技术

作者头像
意大利的猫
发布2020-08-20 11:00:22
1.3K0
发布2020-08-20 11:00:22
举报
文章被收录于专栏:漫流砂

现在我们已经知道了目标的IP,下一步就是想办法如何侵入目标系统,如果没有办法物理接触目标,那么我们的方法就只能是线上了,那么入侵的途径就是端口了,只有对方开了端口,我们的数据才能流动过去,所以接下来就讲讲如何对端口开放情况进行扫描

PS:端口扫描的前提是我们已经确认了该主机是存活的!

端口扫描也是分为TCP 和 UDP 两种

UDP

使用ICMP包进行扫描,如果目标给我们返回端口不可达,那么说明端口是关闭状态,如果没有回包就说明端口开放

nmap

nmap –sU 192.168.1.1

端口一共有65535个,nmap 默认选择1000 个常用端口进行扫描

很多时候我们只想对特定的端口进行扫描,比如永恒之蓝爆发的时候我们想扫描445端口,此时我们可以使用 –p 参数

nmap -sU 192.168.1.1 –p445

从图中可以看出来 –p 后面有没有空格都是可以的,不过大多数人还是习惯不带空格

如果我们严格一些进行全端口扫描

nmap –sU 192.168.1.1 –p1-65535

或者

nmap -sU 1.1.1.1 -p-

全端口扫描需要的时间也会变得特别长

NC

之前的文章介绍过nc,不过今天我抓包的时候发现了一件很有趣的事情

nc -vnzu 192.168.1.104 79-81

眼睛尖的应该已经看出来了,UDP扫描模式下,其实夹杂着一个特殊的TCP扫描,而且目标端口也就是哪31337,看到这个我一下就笑了,这作者一定是搞安全的。31337端口是meterpreter 的bindshell方式经常使用的端口,所以nc在测试时候会向这个端口发送请求,如果碰巧这个主机被开放了这种后门就算是中奖了!

UDP协议的扫描相对单一一些,TCP的扫描方式有很多种

TCP

Tcp端口扫描有很多方式:

隐蔽SYN扫描

僵尸扫描

全连接扫描

FIN扫描

圣诞树扫描

空扫描

ACK扫描

窗口扫描

RPC扫描

1. 隐蔽SYN扫描(半开扫描)

向目标端口发送SYN 包,如果端口开放会返回SYN+ACK ,如果不开放就会返回RST

这种扫描并不是建立完整连接,只是在网络层进行扫描,应用日志并不会记录这种扫描行为,所以比较隐蔽

Nmap

nmap –sS 192.168.1.1 –p445,80 --open

hping3

hping3 192.168.1.1 --scan 1-100 -S

使用SYN来扫描,扫描1-100端口

可以看到80端口开放着,并且返回的数据包置位为 SYN+ACK

2. 全连接的端口扫描

全连接的端口扫描其实很容易理解,就是说与目标端口建立完整的三次握手连接,从而确定目标端口的开放情况。

一旦我们与目标建立连接,那么在应用日志中就会记录下这种扫描的行为,如果我们扫描的端口特别多,那么在日志中留下的足迹也是相当的扎眼,所以这种扫描方式也很容易被各种检测系统检测到。

Nmap

nmap -sT 192.168.1.1 -p1-100

Dmitry

dmitry -p 192.168.1.1

特意把抓包分析放在80端口这里,我们可以看到,之前的77,78等端口都是我们向192.168.1.1发送SYN ,目标给我们返回 RST+ACK ,表示这个端口并没有开放

80端口处可以看见完整的三次握手,四次挥手,表示这个端口时开放的。

NC

nc -nv -w 1 -z 192.168.1.1 1-100

-w 超时时间为1s

-z 扫描过程中不发数据

3. 僵尸扫描(IDLE扫描)

僵尸扫描目前我还没有成功过,或许说是情况太过苛刻了,我第一次接触也是看苑老师的演示,当时惊呼原来隐蔽扫描还可以做到这种地步!

需要满足的条件

——可伪造源地址(以前是可以的,随着发展,各大路由厂商都进行防伪造的策略)

——选择僵尸机

——在网络中的闲置主机,什么也不干(没有任何服务和网络连接)

——系统使用递增的IP的id(目前流行的windows和linux的这个id都是随机产生的,早期的xp和2000是递增的)

僵尸扫描的大概过程是这样

我的主机用M代表,僵尸机用Z表示,目标机用T表示

第一环节:

M首先向 Z 发送 SYN/ACK ,之后僵尸机返回RST并且携带的id设为x

第二环节:

M通过伪造源IP,给T 发送SYN包,把来源IP为造成Z,之后如果T上的端口存在,则T 向 Z发送SYN/ACK包,此时Z 会返回给T一个RST,其中携带id为x+1

第三个环节:

M再次向Z发送 SYN/ACK,之后Z 同样返回 RST,携带的id为x+2

此时就可以判断端口是开放的了。

如果此端口并不是开放的,那么 T 会返回给Z 一个RST

之后 M 再向Z发送 SYN/ACK ,之后 Z 向M 返回 RST ,id为x+1

这种扫描方式几乎是不可能被发现我们的IP,已经是做到了极致。

Nmap

nmap -p445 192.168.1.1 --script=ipidseq.nse

这个脚本是判断该主机是否能成为一个好的僵尸

如果返回Incremental 则是可以成为僵尸

如果返回其他的则不可以

可以看到我的路由器可以充当僵尸设备,它的ip id 每次加2递增的,满足条件,今天我就用我的路由器在内网模拟一下这个场景

我开了一台ip为192.168.1.106的win7虚拟机作为目标,192.168.1.1作为僵尸机。

nmap 192.168.1.106 -sI 192.168.1.1 -Pn -p100-200

可能由于时间问题,有两个包的顺序有些问题,不过可以看到最终是成功了。

4. FIN扫描(针对UNIX系统)

向目标发送一个FIN数据包,如果端口是关闭的应该返回一个RST包,通常只对Unix系统有用,

nmap –sF 192.168.1.1

5. 圣诞树扫描(Xmas Tree Scan)

发送一个 FIN、URG、PUSH数据包,如果端口是关闭的,会返回一个RST nmap –sX 192.168.1.1

测试后在windows,mac,linux效果都不好

6. 空扫描

不使用任何的置位,如果端口关闭会给我们返回一个RST,这个之前的hping3采用了。

nmap –sN 192.168.1.1

效果也不是十分理想

7. ACK扫描

主要来测试防火墙规则

如果目标端口开放,则返回一个RST

nmap –sA 192.168.1.1

8. 窗口扫描(Window Scan)

这种技术可以侦测出特定类型的目标系统(如AIX和FreeBSD系统)上的端口的开放情况,不同情况返回的tcp的window字段的长度是不一样的

nmap –sW 192.168.1.1

9. RPC扫描(Unix)

这种扫描只用于unix,用来发现并确认目标系统上的RPC服务端口及其关联的应用程序和版本号

nmap –sR 192.168.1.1

如今-sR已经被整合到-sV


以上便是TCP扫描的各种方式,相比来说前两种比较常用,其他这些有侧重的针对。

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NOP Team 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档