渗透技巧——Windows 平台运行 Masscan 和 Nmap

发布于 2024-11-20 16:51:28 字数 11046 浏览 0 评论 0

0x00 前言

在内网渗透中,信息搜集尤为重要。 面对内网的复杂环境,虽说网络扫描容易暴露自己,但通过扫描可以发现内网的存活主机、开放端口,运行服务、操作系统等信息,为进一步渗透奠定基础。 扫描工具的选取,不仅要考虑功能,更要考虑工具的适用性。 现实中的跳板通常并不是一台 Linux 服务器,没有合适的环境安装 Nmap、Zmap 和 Masscan。

换句话说,可在 Windows 下直接使用的命令行扫描工具有哪些呢? 知名的开源扫描工具 Nmap、Zmap 和 Masscan,三款工具在功能上各有特色。 在适用性上,Zmap 在 Windows 下使用需要安装 Cygwin,因此不在考虑范围内。 Masscan 支持 Windows 平台的编译,Nmap 提供命令行版本,看起来 Masscan 和 Nmap 符合要求。 但是,Masscan 和 Nmap 的使用均需要 WinPcap 的支持,也就是说,使用前均需要安装 WinPcap。 那么,能否通过命令行安装 WinPcap 呢?

0x01 简介

本文将要要解决以上问题,介绍内容如下:

  • Windows 平台编译 Masscan
  • Windows 命令行安装 WinPcap
  • Masscan 使用介绍
  • Nmap 配置和使用介绍

0x02 Windows 平台编译 Masscan

Masscan 下载地址:https://github.com/robertdavidgraham/masscan/

编译工具: vs2012

编译选项中未添加 vs2012 的编译配置,所以直接编译会报错

解决方法:

在 string_s.h 中添加 vs2012 配置信息

位于 misc-string_s.h,添加代码如下:

#if defined(_MSC_VER) && (_MSC_VER == 1700)
/*Visual Studio 2012*/
# include <stdio.h>
# include <string.h>
# define strcasecmp     _stricmp
# define memcasecmp     _memicmp
# ifndef PRIu64
#  define PRIu64 "llu"
#  define PRId64 "lld"
#  define PRIx64 "llx"
# endif

编译成功,执行 masscan.exe,提示 Packet.dll: not found

如下图

Alt text

Packet.dll 获取方法:

安装 WinPcap 后在 System32 下获得

WinPcap 下载地址:https://www.winpcap.org/install/default.htm

在另一系统安装 WinPcap,在 System32 下找到 Packet.dll 和 Wpcap.dll,复制到测试系统下 masscan.exe 的同级目录,再次运行

程序正常启动,但是无法扫描,报错如下:

FAIL: Error opening adapter: 系统找不到指定的设备。 (20) adapter[\Device\NPF_{71D19B82-0818-4685-A8E7-A6C7C812F2EA}].init: failed

疑问:测试系统也需要安装 WinPcap 才能使用?

经实际测试,确实如此

0x03 Windows 命令行安装 WinPcap

测试 32 位系统:

使用 ProcessMonitor 监控 WinPcap 安装过程(32 位系统),获得如下信息:

  • 在\system32\文件夹下释放 packet.dll 和 wpcap.dll
  • 在\system32\drivers\释放 npf.sys
  • 安装服务 npf

通过 sc 命令获得安装服务 npf 的配置信息:

sc qc npf

获取信息如下:

[SC] QueryServiceConfig 成功

SERVICE_NAME: npf
        TYPE               : 1  KERNEL_DRIVER
        START_TYPE         : 3   DEMAND_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : system32\drivers\npf.sys
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : NetGroup Packet Filter Driver
        DEPENDENCIES       :
        SERVICE_START_NAME :

如下图

Alt text

查看运行状态:

sc query npf

获取信息如下:

SERVICE_NAME: npf
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

如下图

Alt text

对应的注册表会创建键值,表示服务配置信息,位置如下:

  • HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\npf
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\npf

如下图

Alt text

如下图

Alt text

猜测,只要能够模拟上述安装操作,就能够实现 WinPcap 在命令行下的安装

模拟安装操作如下:

1、释放文件

copy packet.dll %SystemRoot%\system32\ copy wpcap.dll %SystemRoot%\system32\ copy npf.sys %SystemRoot%\system32\drivers\

2、创建服务

sc create npf binPath= system32\drivers\npf.sys type= kernel start= demand error= normal tag= no DisplayName= "NetGroup Packet Filter Driver"

3、启动服务

sc start npf

测试命令如下:

masscan.exe -p80 192.168.81.143

成功执行 masscan.exe,如下图

Alt text

测试 64 位系统:

使用 ProcessMonitor 监控 WinPcap 安装过程(32 位系统),获得如下信息:

  • 在\system32\文件夹下释放 64 位 packet.dll 和 wpcap.dll
  • 在\system32\drivers\释放 64 位 npf.sys
  • 在\syswow64\文件夹下释放 32 位 packet.dll、wpcap.dll 和 pthreadVC.dll
  • 安装服务 npf

经实际测试和优化,在 64 位环境下执行 32 位的 masscan.exe,不需要 64 位的 packet.dll 和 wpcap.dll,不需要 32 位的 pthreadVC.dll,仅需要安装 64 位驱动 npf.sys

并且,无论是 32 位还是 64 位系统,packet.dll 和 wpcap.dll 放在 masscan.exe 同级目录即可(当然,由于是 vs2012 编译,还需要 msvcr110d.dll)

也就是说,针对 32 位和 64 位系统,只需要向\system32\drivers\文件夹复制不同版本的 npf.sys 即可

接着创建服务 npf 并安装,整个流程结束

将以上过程通过批处理自动实现,一键安装脚本代码如下:

@echo off
cd %~dp0
if "%PROCESSOR_ARCHITECTURE%"=="x86" move npf_x86.sys %SystemRoot%\system32\drivers\npf.sys
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" move npf_x64.sys %SystemRoot%\system32\drivers\npf.sys
if exist %SystemRoot%\system32\drivers\npf.sys (echo move success!) else (echo move error!)
sc create npf binPath= system32\drivers\npf.sys type= kernel start= demand error= normal tag= no DisplayName= "NetGroup Packet Filter Driver"
sc start npf

相关代码和所需 dll 文件已上传至 github,地址如下:

https://github.com/3gstudent/Winpcap_Install

0x04 Masscan 使用介绍

扫描指定网段和端口:

masscan.exe -p80 192.168.81.1/24

找到一台开启 80 端口的服务器,回显如下:

Discovered open port 80/tcp on 192.168.81.143

扫描指定主机所有开放的端口:

masscan.exe -p0-65535 192.168.81.143

如下图

Alt text

扫描指定主机的特定端口:

masscan.exe -p80,443 192.168.81.143

获取 banner:

masscan.exe -p80,443,3306 192.168.81.143 --banners

通过配置文件启动扫描:

将配置信息保存在 1.conf:

masscan.exe -p80,443,3306 192.168.81.143 --banners --echo>1.conf

读取配置信息 1.conf,启动扫描:

masscan.exe -c 1.conf

修改扫描速度为 100,000 包/秒(Windos 下最大为 300,000 包/秒),默认 100 包/秒:

--rate 100000

输出格式:

-oX <filespec> (XML)
-oB <filespec> (Binary)
-oG <filespec> (Grep)
-oJ <filespec> (Json)
-oL <filespec> (List)
-oU <filespec> (Unicornscan format)

补充,默认情况,masscan 开启如下配置:

-sS: this does SYN scan only (currently, will change in the future) -Pn: doesn't ping hosts first, which is fundamental to the async operation -n: no DNS resolution happens --randomize-hosts: scan completely randomized --send-eth: sends using raw libpcap

0x05 Nmap 配置和使用介绍

NmapZip 版下载地址:https://nmap.org/dist/nmap-7.50-win32.zip

使用 Nmap 也要在命令行提前安装 WinPcap

还要添加 vs2013 的 dll:msvcp120.dll 和 msvcr120.dll(Nmap.exe 通过 vs2013 编译)

去掉不相关文件,精简 nmap,最终需要的支持文件列表如下:

  • libeay32.dll
  • msvcp120.dll
  • msvcr120.dll
  • nmap-mac-prefixes
  • nmap-os-db
  • nmap-payloads
  • nmap-services
  • nmap.exe
  • ssleay32.dll

扫描指定网段和端口:

nmap.exe -p80 192.168.81.1-255

或者

nmap.exe -p80 192.168.81.1/24

扫描 IP 地址列表:

nmap.exe iL IP.txt

扫描指定主机所有开放的端口:

nmap.exe 192.168.81.143

扫描指定主机的特定端口:

nmap.exe -p80,443 192.168.81.143

操作系统探测(-O):

nmap.exe -O 192.168.81.143

端口上运行的服务版本探测(-sV):

nmap.exe -sV 192.168.81.143

端口扫描如下图

Alt text

版本检测如下图

Alt text

通过对比可知版本检测能够识别端口上的服务版本

注:恢复版本检测(-sV) 需要添加以下文件:

  • nse_main.lua
  • nmap-service-probes
  • nselib 文件夹及文件夹内的文件
  • scripts 文件夹及文件夹内的文件

路由信息探测(--traceroute)

nmap.exe --traceroute 192.168.81.143

综合探测(-A)

包括操作系统、服务版本和路由信息,也就是以上三者的集合

nmap.exe -A 192.168.81.143

扫描方式支持如下参数:

-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans -sU: UDP Scan -sN/sF/sX: TCP Null, FIN, and Xmas scans --scanflags <flags>: Customize TCP scan flags -sI <zombie host[:probeport]>: Idle scan -sY/sZ: SCTP INIT/COOKIE-ECHO scans -sO: IP protocol scan -b <FTP relay host>: FTP bounce scan

常用扫描方式介绍:

TCP SYN Scan(-sS)

  • 半开放扫描(half-open scanning),没有建立三次握手连接,速度很快
  • nmap 默认扫描方式

TCP connect scan(-sT)

  • 完成三次握手过程(SYN,SYN/ACK,ACK),当然,速度会降低
  • 容易被检测

Udp scan(-sU)

  • 扫描 UDP 端口

TCP Null/FIN/Xmas scan(-sN/-sF/-sX)

  • 用来判断端口是否开放
  • 能够绕过一些无状态防火墙

Null scan (-sN)

  • 不设置任何标志位(tcp 标志头是 0)

FIN scan (-sF)

  • 只设置 TCP FIN 标志位

Xmas scan (-sX)

  • 设置 FIN,PSH,和 URG 标志位

TCP ACK scan(-sA)

  • 不用于确定端口是否开放
  • 用于发现防火墙规则,确定防火墙规则是有状态的还是无状态的,哪些端口是被过滤的
  • 只设置 ACK 标志位

Custom TCP scan(--scanflags)

  • 手动指定任意 TCP 标志位来设计自定义扫描
  • 可用于绕过入侵检测系统
  • 需要对通信协议有深入的理解

Idle scan(-sI)

  • 伪造扫描源地址

注:该源地址主机必须在线

也可伪造源端口,默认为 80 端口

伪造源端口格式如下:

<zombie host[:probeport]>

实例:

nmap.exe -sI 192.168.81.1:1234 192.168.81.143

PING Scan(-sP)

  • 使用 ping 来扫描主机是否在线

No PING Scan(-PN)

  • 不用 ping 进行扫描

注:PN 两个字母大写

输出格式:

-oN <filespec> (标准)
-oX <filespec> (XML)
-oS <filespec> (ScRipT KIdd|3 oUTpuT)
nmap 默认输出均为大写格式,使用-oS 会随机改写字母大小写
-oG <filespec> (Grep)
-oA <basename> (输出至所有格式)
设置文件名称,一次性输出标准(.nmap)、XML(.xml) 和 Grep(.gnmap) 三种格式的文件

注:https://nmap.org/book/ 可获得更多 Nmap 使用介绍

0x06 小结

本文介绍了 Windows 平台下命令行使用 Masscan 和 Nmap 的方法,同时站在防御的角度提醒大家,内网安全同样重要,要谨慎对待。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

慵挽

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

有深☉意

文章 0 评论 0

硪扪都還晓

文章 0 评论 0

DS

文章 0 评论 0

我也只是我

文章 0 评论 0

TangBin

文章 0 评论 0

橪书

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文