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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
云防火墙,500元 1000GB
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本文讲的是渗透技巧:Windows平台运行Masscan和Nmap,面对内网的复杂环境,虽说网络扫描容易暴露自己,但通过扫描可以发现内网的存活主机、开放端口,运行服务、操作系统等信息,为进一步渗透奠定基础。
本文讲的是 渗透技巧:Windows平台运行Masscan和Nmap

0x00 前言

在内网渗透中,信息搜集尤为重要。 

面对内网的复杂环境,虽说网络扫描容易暴露自己,但通过扫描可以发现内网的存活主机、开放端口,运行服务、操作系统等信息,为进一步渗透奠定基础。 

扫描工具的选取,不仅要考虑功能,更要考虑工具的适用性。 

现实中的跳板通常并不是一台Linux服务器,没有合适的环境安装Nmap、Zmap和Masscan。 

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

那么,能否通过命令行安装WinPcap呢?

0x01 简介

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

1. Windows平台编译Masscan

2. Windows命令行安装WinPcap

3. Masscan使用介绍

4. 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

如下图

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

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[DeviceNPF_{71D19B82-0818-4685-A8E7-A6C7C812F2EA}].init: failed

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

经实际测试,确实如此

0x03 Windows命令行安装WinPcap

测试32位系统:

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

1. 在system32文件夹下释放packet.dll和wpcap.dll

2. 在system32drivers释放npf.sys

3. 安装服务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   : system32driversnpf.sys
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : NetGroup Packet Filter Driver
        DEPENDENCIES       :
        SERVICE_START_NAME :

如下图

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

查看运行状态:

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

如下图

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

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

HKEY_LOCAL_MACHINESYSTEMControlSet001Servicesnpf
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesnpf

如下图

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

如下图

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

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

模拟安装操作如下:

1、释放文件

copy packet.dll %SystemRoot%system32 
copy wpcap.dll %SystemRoot%system32 
copy npf.sys %SystemRoot%system32drivers

2、创建服务

sc create npf binPath= system32driversnpf.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,如下图

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

测试64位系统:

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

1.在system32文件夹下释放64位packet.dll和wpcap.dll

2.在system32drivers释放64位npf.sys

3.在syswow64文件夹下释放32位packet.dll、wpcap.dll和pthreadVC.dll

4.安装服务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位系统,只需要向system32drivers文件夹复制不同版本的npf.sys即可

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

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

@echo off
cd %~dp0
if "%PROCESSOR_ARCHITECTURE%"=="x86" move npf_x86.sys %SystemRoot%system32driversnpf.sys
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" move npf_x64.sys %SystemRoot%system32driversnpf.sys
if exist %SystemRoot%system32driversnpf.sys (echo move success!) else (echo move error!)
sc create npf binPath= system32driversnpf.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

如下图

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

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

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

端口扫描如下图

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

版本检测如下图

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

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

注:

恢复版本检测(-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的方法,同时站在防御的角度提醒大家,内网安全同样重要,要谨慎对待。




原文发布时间为:2017年7月16日
本文作者:3gstudent
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
4天前
|
Windows
Windows平台如何修改监听的服务名称?
【8月更文挑战第15天】在Windows平台上可透过注册表编辑器、命令提示符或第三方工具修改服务的显示名称。首先,通过注册表编辑器找到`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services`下的目标服务,修改其“DisplayName”键值。或者,在命令提示符中使用`sc config`命令来变更服务名称。此外,利用第三方工具如Windows Service Manager也能简化此过程。修改前请确保了解可能的影响并做好备份。
|
4天前
|
芯片 iOS开发 MacOS
Mac上运行windows软件-GPTK
Mac上运行windows软件-GPTK
21 1
|
4天前
|
安全 机器人 程序员
Windows 计划任务每天隔 3 小时运行一次批处理文件详细配置步骤
Windows 计划任务每天隔 3 小时运行一次批处理文件详细配置步骤
|
7天前
|
编解码 开发工具 Android开发
Windows平台RTMP推送|轻量级RTSP服务如何实现摄像头叠加到屏幕输出
大牛直播SDK采用先进的图层概念实现视频叠加,如将摄像头画面实时叠加到屏幕输出,以C#为例展示了具体的配置方法。用户可在推送RTMP或启动RTSP服务前选择“摄像头叠加到屏幕”的选项,并调整位置。SDK还支持摄像头的开启与关闭、水平垂直翻转及旋转等功能。此外,该SDK提供了丰富的特性,包括但不限于视频和音频采集处理、硬编码与软编码支持、多实例推送、水印添加、网络适应性调整等,几乎涵盖了RTMP推送的所有常规需求,并能与播放器协同工作达到毫秒级的低延迟,非常适合无纸化同屏、智慧教室等应用场景。
|
7天前
|
开发工具 数据安全/隐私保护 开发者
Windows平台RTMP推送|轻量级RTSP服务摄像头如何添加动态文字水印
本文介绍了在Windows平台上实现摄像头或屏幕流中动态文字水印的技术方法。通过大牛直播SDK示例,展示了如何从文本获取RGB数据,并将其叠加到视频流上。文中提供了代码片段来说明如何开启文字水印、生成包含实时信息的位图、以及如何更新和控制图层。最终实现了动态显示时间和位置信息的需求。对这一领域的开发者而言,本文提供了实用的参考与指导。
|
7天前
|
编解码 Linux 开发工具
Windows平台RTSP|RTMP播放器如何实现细粒度录像控制
大牛直播SDK为Windows平台提供了细致的RTSP/RTMP直播播放及录像功能。支持多平台(Windows/Linux/Android/iOS)的推送端录像,并具备轻量级RTSP服务及GB28181设备接入能力。其特性包括:拉取RTSP/RTMP流录像、推送端同步录像、录像过程中的实时暂停与恢复、支持中文路径设置、单文件大小限制、纯音频/视频或音视频录制模式、音频转码至AAC、H.265编码支持、URL切换时自动文件分割等功能。此外,还提供丰富的事件回调机制以监测录像状态。通过细粒度的接口设计,满足了多样化的应用场景和技术需求。
|
7天前
|
XML 监控 C#
Windows平台C#版RTSP转RTMP直播推送定制版
前几年我们发布了C++版的多路RTMP/RTSP转RTMP转发官方定制版。在秉承低延迟、灵活稳定、低资源占用的前提下,客户无需关注开发细节,只需图形化配置转发等各类参数,实现产品快速上线目的。如监控类摄像机、NVR等,通过厂商说明或Onvif工具,获取拉流的RTSP地址,图形化配置,完成拉流转发等操作,轻松实现标准RTMP服务器对接。
|
7天前
|
编解码 Linux 开发工具
如何启动Windows平台轻量级RTSP服务生成RTSP拉流URL
为满足内网超低延迟需求,我们开发了轻量级RTSP服务模块,避免用户额外部署服务器。此模块集成于推送端SDK中,支持Windows、Linux、Android及iOS平台,可将本地音视频数据编码后通过RTSP协议提供。具备RTSP鉴权、单播/组播等功能,支持H.264/H.265编码,同时可创建多个服务实例,并查询连接数。实测总延迟约200-300毫秒,兼具稳定与高效。
EMQ
|
1月前
|
物联网 Linux C语言
在 Windows 平台搭建 MQTT 服务
NanoMQ 有着强大的跨平台和可兼容能力,不仅可以用于以 Linux 为基础的各类平台,也为 Windows 平台提供了 MQTT 服务的新选择。
EMQ
81 4
在 Windows 平台搭建 MQTT 服务
|
12天前
|
JavaScript Windows
electron程序运行在某些 windows 上白屏
electron程序运行在某些 windows 上白屏