【轉】Windows平臺執行Masscan和Nmap
作者: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
如下圖
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 :
如下圖
檢視執行狀態:
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
如下圖
對應的登錄檔會建立鍵值,表示服務配置資訊,位置如下:
- HKEY_LOCAL_MACHINESYSTEMControlSet001Servicesnpf
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesnpf
如下圖
如下圖
猜測,只要能夠模擬上述安裝操作,就能夠實現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,如下圖
測試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
如下圖
掃描指定主機的特定埠:
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
埠掃描如下圖
版本檢測如下圖
通過對比可知版本檢測能夠識別埠上的服務版本
注:
恢復版本檢測(-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的方法,同時站在防禦的角度提醒大家,內網安全同樣重要,要謹慎對待。
相關文章
- 執行緒同步(windows平臺):事件執行緒Windows事件
- 執行緒同步(windows平臺):互斥物件執行緒Windows物件
- 執行緒同步(windows平臺):臨界區執行緒Windows
- 執行緒同步(windows平臺):訊號量執行緒Windows
- 編寫可以在所有WINDOWS平臺上執行的應用軟體 (轉)Windows
- windows redis 後臺執行WindowsRedis
- 動態執行緒池在轉轉平臺的實踐執行緒
- windows的nohup後臺執行Windows
- Linux/Unix平臺可執行檔案格式分析(轉)Linux
- 在 SAP 雲平臺上部署和執行 Docker 應用Docker
- WINDOWS XP 執行命令(轉載)Windows
- Java/.Net雙平臺核心,Jvm和CLR執行異同點JavaJVM
- 開源GTKSystem.Windows.Forms框架讓C# winform支援跨平臺執行WindowsORM框架C#
- python用什麼平臺執行Python
- 智慧綜合交通執行監測平臺
- .NET 使用 .NET Core 跨平臺執行
- Windows “執行”的七種秘籍(轉)Windows
- postgresql在windows平臺下的安裝 (轉)SQLWindows
- 使用Windows API和多執行緒進行串列埠通訊[1] (轉)WindowsAPI執行緒串列埠
- SAP雲平臺執行環境Cloud Foundry和Neo的區別Cloud
- flutter 寫後臺系統,執行到windowsFlutterWindows
- API服務平臺,可進行分散式執行API分散式
- Windows平臺,Oracle Database和Client並存方式WindowsOracleDatabaseclient
- Apache Hop新執行資訊記錄平臺Apache
- 高可用Hadoop平臺-執行MapReduce程式Hadoop
- 跨平臺執行ASP.NET Core 1.0ASP.NET
- 關於SaaS平臺中crontab建立、儲存和執行的考慮
- windows bat指令碼 後臺執行目標exeWindowsBAT指令碼
- windows和linnux 平臺如何啟用 Large page?WindowsUX
- windows平臺Oracle 8i DataGuard 建立和管理WindowsOracle
- 測試平臺系列(97) 完善執行case部分
- Roadrush跨平臺執行(2千字)
- Windows中OnTimer和執行緒Windows執行緒
- 使用docker建立和執行跨平臺的容器化的mssql資料庫DockerSQL資料庫
- 工信部網路安全威脅和漏洞資訊共享平臺正式上線執行
- Windows平臺下建立asmWindowsASM
- 一臺windows主機上執行2個tomcatWindowsTomcat
- windows和unix平臺下Oracle冷備份指令碼WindowsOracle指令碼