暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

端口扫描

生有可恋 2022-04-21
9612

无论是服务器安全自查,还是网络资产梳理,端口扫描都是不可或缺的手段。

端口扫描都依赖工具,工具既有简单的又有复杂的,我们梳理一下。

方法 1:telnet

传统方式,使用 telnet <ip> <端口> 方式来测试端口是否开放。

当提示 ^] 时说明端口是开放的,ctrl + c 可以退出 telnet,如果端口是关闭状态,telnet 将直接退出。

方法 2:使用 curl 、wget

我们可以使用 curl 或 wget 访问相应端口,因为 curl 或 wget 发出的是 web 请求,所以有些端口不会正常返回。我们的目的只是测试通或不通,通过返回信息的不同可以判断端口是否开放。

这种方法是在终端上没有 telnet 的情况下的替代方案,目的为了说明 curl 和 wget 也可以用来测试端口是否开放。

    bash$ curl localhost:22
    curl: (1) Received HTTP/0.9 when not allowed

    bash$ curl localhost:110
    curl: (7) Failed to connect to \
    localhost port 110 after 0 ms: Connection refused

    使用 curl 测试端口不通时,会提示请求被拒绝。

    这里我再增加一点使用背景,曾经在一台服务器上排查防火墙端口映射,防火墙上的NAT映射都做好了,但在服务器上一直测试不通。合作的公司说,在服务器上通过 telnet 测试过,端口不通。我在其它主机上进行端口扫描是通的,但在该出故障的服务器上使用 telnet 测试端口就是不同。后来查看 telnet 工具发现它是一个软链接,指向的是 busybox,最后还是怀疑 telnet 有问题,改用 curl 和 wget 测试端口发现是通的。

    如果主机上的 telnet 被人动过手脚或者功能不完善,比如是 busybox 版的,此时就不能依赖 telnet 了。

    方法 3:nmap

    nmap 是比较重型的工具了,有时扫描速度会非常慢。命令:

      nmap -p 1-65535 192.168.1.1

      nmap 能扫描出被目的服务器拒绝的端口,状态为 filtered,说明端口是存活的,只是被防火墙过滤了。

      方法 4:第三方工具,脚本等

      以上工具都能找到 Windows 版,下面介绍的就有点危险了,建议在扫描之前在自己的公司做一下报备,不然会被识别为入侵。这款工具之前介绍过,在红蓝对抗中被对方遗留在现场。

      工具名叫 fscan,基于 go 语言开发的,有各平台编译好的版本,在 Release 页面可以下载最新版。项目地址:

      • https://github.com/shadow1ng/fscan

      fscan工具特性:

      • 端口扫描

      • 爆破功能

      • 漏洞扫描

      • Web探测

      一定要注意,不要拿来做违法的事,fscan除了做端口扫描,资产梳理,也可作为弱口令检测工具,具有一定的威胁。

      最后再贴一个网上收集的Python版简易端口扫描器,代码出处找不到了,非常遗憾。

        import socket
        import argparse
        import sys
        import time

        parser = argparse.ArgumentParser()
        parser.add_argument('host')
        args = parser.parse_args()
        start = time.time()

        try:
        for port in range(1, 65536):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(1)
        result = sock.connect_ex((args.host, port))
        if result == 0:
        print("Port: {} Open".format(port))
        sock.close()
        except KeyboardInterrupt:
        sys.exit()

        end = time.time()
        print(f"Scanning completed in: {end-start:.3f}s")

        代码很短,但很精悍,扫描速度很快,执行如下:

        执行完成后,会打印出总耗费的时间。

        Windows 下我使用的扫描工具也是在网上找的,当前也找不到出处了,自己通过杀毒软件杀过,会被火绒识别为黑客工具,但平时使用没有发现大的问题,有需要的可以通过网盘下载。

        ScanPort程序只有46K,很小巧。对于这款工具的安全性,我也在犹豫是否贴出来,我自己测试是没有问题的,一直在用,大家可以持保留意见。毕竟开源代码可以进行评估,如果没有代码,直接提供二进制可执行文件,还是存在一定的安全风险。

        网盘下载地址:

        链接: https://pan.baidu.com/s/16BJ0ezT7-u8LqGQswnL_Fg 

        提取码: n4hq

        文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论