【轉】Windows平臺執行Masscan和Nmap

tiny丶發表於2019-03-27

作者:3gstudent,如若轉載,請註明出處:http://www.mottoin.com/tools/110701.html

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

疑問:測試系統也需要安裝WinPcap才能使用?

經實際測試,確實如此

0x03 Windows命令列安裝WinPcap

測試32位系統:

使用ProcessMonitor監控WinPcap安裝過程(32位系統),獲得如下資訊:

  • 在system32資料夾下釋放packet.dll和wpcap.dll
  • 在system32drivers釋放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   : system32driversnpf.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_MACHINESYSTEMControlSet001Servicesnpf
  • HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesnpf

如下圖

 

Alt text

如下圖

 

Alt text

猜測,只要能夠模擬上述安裝操作,就能夠實現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,如下圖

 

Alt text

測試64位系統:

使用ProcessMonitor監控WinPcap安裝過程(32位系統),獲得如下資訊:

  • 在system32資料夾下釋放64位packet.dll和wpcap.dll
  • 在system32drivers釋放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位系統,只需要向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

如下圖

 

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的方法,同時站在防禦的角度提醒大家,內網安全同樣重要,要謹慎對待。

相關文章