nmap 學習和使用 另外問下大佬們是不是用 nmap -p 1-65535 -T4 -A -v --script=all xxx.xxx.xxx.xxx 命令掃描出來後手動分析就可以了?

难以怀瑾發表於2024-03-21

參考影片 https://www.bilibili.com/video/BV1Ut411K7QJ?p=3&vd_source=13dd0c4a82a579a2d8aef2ac9bf547bc

xsl 樣式參考 https://cloud.tencent.com/developer/article/2201699

1 如何下載

參考此篇文件進行下載安裝 https://blog.csdn.net/lj1521195618/article/details/119866338?spm=1001.2014.3001.5506

2 基本操作

  • 掃描之前關閉 vpn 否則出現下圖

2.1 列舉遠端機器開放埠

  • 埠掃描原理

首先判斷 nmap 輸入的命令列中是否包含域名,如果包含需要利用 DNS 伺服器進行域名解析,然後傳送 ICMP Echo
Request 來探測主機存活性。存活了再繼續掃描。

  • 預設埠掃描 bash nmap scanme.nmap.org

掃描 1000 個常見的埠,需要掃描所有埠則 -p 1-65535

  • 指定 dns 伺服器解析域名

使用 Google 的公共 DNS 伺服器(8.8.8.8)解析目標域名(scanme.nmap.org),然後對解析出的 IP 地址執行 Nmap 掃描。這是為了公司的 dns 伺服器解析不出來域名

nmap --dns-servers 8.8.8.8 scanme.nmap.org
  • 對於禁 Ping 主機使用 使用 -Pn 選項會讓 Nmap 忽略對目標主機的 ping 檢測,直接對所有目標主機執行埠掃描。這在目標主機阻止 ICMP ping 請求或者管理員想要繞過 ping 檢測時非常有用。
nmap -Pn xxx.xxx.xxx.xxx

如政務雲相關伺服器是禁止 ping 的,不加 -Pn就掃描不到遠端機器開放埠

加了 -Pn成功掃描到了遠端機器開放埠

  • 掃描指定埠範圍
nmap -p 1-65535 xxx.xxx.xxx.xxx

-p 1-65535:這是一個選項,用於指定要掃描的埠範圍。在這種情況下,範圍是從埠 1 到埠 65535,表示將掃描目標主機上所有可能的 TCP 和 UDP 埠

標識埠號的變數是 16 位的,2 的 16 次方那麼就是 65536 個,去掉 0 這個特殊埠,剩下 65535 個

  • 掃描一個或某幾個埠 python nmap -p 80,81 xxx.xxx.xxx.xxx
  • 全埠掃描 python nmap -p- xxx.xxx.xxx.xxx
  • 指定協議掃描
    python nmap -p T:43,U:53 xxx.xxx.xxx.xxx -T: tcp 埠 -U:udp 埠 python nmap -p ssh xxx.xxx.xxx.xxx 探測某個協議的埠
  • 埠狀態解釋

在 Nmap 掃描過程中,您可能會遇到不同的埠狀態。下面是一些常見的埠狀態及其含義:
open:埠是開啟的,表示目標主機上執行著一個服務,並且可以接受連線。
closed:埠是關閉的,表示目標主機上未執行該埠的服務,並且主機拒絕連線。
filtered:埠被過濾了,表示 Nmap 無法確定埠的狀態,因為防火牆、網路過濾器或其他裝置阻止了 Nmap 的掃描請求到達目標主機。
unfiltered:埠未被過濾,表示 Nmap 能夠確定埠是開放或關閉的,但無法確定具體是哪一種狀態。
open|filtered:埠可能是開放的,也可能是被過濾的,Nmap 無法確定埠的確切狀態。
closed|filtered:埠可能是關閉的,也可能是被過濾的,Nmap 無法確定埠的確切狀態。

注意事項

  • Nmap 掃描到的 “closed” 埠並不意味著它們是完全隱藏的或者不可見的。相反,它們是在目標主機上存在的,但是沒有執行與之相關聯的服務。因此,儘管這些埠處於關閉狀態,但它們仍然可以被掃描到,並且掃描程式能夠從目標主機獲得拒絕連線的響應。
  • open的埠可能是攻擊者入侵的目標,因此需要特別關注,而 filtered 狀態的埠可能需要進一步的調查,以確定防火牆或過濾器的配置情況。 ### 2.2 識別目標機器服務指紋
  • 識別服務指紋 bash nmap -sV xxx.xxx.xxx.xxx

s服務 V版本

使用 Nmap 對指定的目標 IP 地址進行服務版本檢測掃描,以獲取目標主機上執行的服務的版本資訊。
可以與nmap -sV -p 1-65535 ip 聯合使用檢視所有埠。

nmap -T4 -A -v xxx.xxx.xxx.xxx

使用 Nmap 對指定的目標 IP 地址進行掃描,設定掃描速度為正常模式,並啟用全面掃描(會啟用 NSE 所有指令碼進行破解)功能,同時列印出更詳細的掃描資訊如版本號,加密演算法方式等。

-T4:這是一個選項,用於設定掃描的速度和對目標系統的影響。-T4 表示設定掃描速度為正常(Normal)模式,即快速掃描。k 可以設定為 1-5
-A:這是一個選項,用於執行 “全面掃描”。-A 選項將啟用作業系統檢測、服務版本檢測、指令碼掃描和 traceroute 等功能,以提供更詳細的關於目標主機的資訊。
-v:這是一個選項,用於設定掃描的詳細程度。-v 表示啟用詳細模式,即更多的資訊將被列印出來

2.3 nse

nmap --script auth 

將執行所有屬於 auth 類別的指令碼來對目標進行掃描

nmap --script <script-name> <target>

執行特定的指令碼,可以指定指令碼的名稱

auth:
負責處理鑑權證書(繞開鑑權)的指令碼

broadcast:
在區域網內探查更多服務開啟狀況,如 dhcp/dns/sqlserver 等服務

brute:
提供暴力破解方式,針對常見的應用如 http/snmp 等

default:
使用-sC 或-A 選項掃描時候預設的指令碼,提供基本指令碼掃描能力

discovery:
對網路進行更多的資訊,如 SMB 列舉、SNMP 查詢等

dos: 用於進行拒絕服務攻擊

exploit: 利用已知的漏洞入侵系統
external: 利用第三方的資料庫或資源,例如進行 whois 解析

fuzzer:
模糊測試的指令碼,傳送異常的包到目標機,探測出潛在漏洞 intrusive: 入侵性的指令碼,此類指令碼可能引發對方的 IDS/IPS 的記錄或遮蔽
malware: 探測目標機是否感染了病毒、開啟了後門等資訊 safe: 此類與 intrusive 相反,屬於安全性指令碼

version: 負責增強服務與版本掃描(Version Detection)功能的指令碼

vuln:
負責檢查目標機是否有常見的漏洞(Vulnerability),如是否有 MS08_067

  • 列舉所有 mysql 使用者 nmap -p3306 --script=mysql-users.nse --script-args=mysqluser=root xxx.xxx.xxx.xxx
  • 掃描 mysql 相關的指令碼 nmap --script=mysql* xxx.xxx.xxx.xxx

2.4 調式模式

-d引數即可開啟除錯模式
nmap -d xxx.xxx.xxx.xxx

-d 引數用於增加除錯輸出。當使用-d 引數時,nmap 將輸出更多的除錯資訊,以幫助使用者瞭解掃描過程中發生的情況

總結

nmap -p 1-65535 -T4 -A -v xxx.xxx.xxx.xxx
使用 Nmap 對指定的目標 IP 地址的所有埠進行掃描,設定掃描速度為正常模式,並啟用全面掃描(會啟用 NSE 所有指令碼進行破解)功能,同時列印出更詳細的掃描資訊如版本號,加密演算法方式等
nmap -A 命令將啟用一些 Nmap 的主要指令碼,並進行更全面的掃描,但不會啟用所有 NSE 指令碼。具體來說,-A 選項會啟用以下操作:

主機發現(Ping 掃描):檢測目標主機是否線上。
作業系統檢測:嘗試識別目標主機執行的作業系統。
版本檢測:嘗試確定目標主機上執行的服務的版本資訊。
指令碼掃描:執行一些常見的 Nmap 指令碼,如漏洞檢測、服務發現等。
雖然-A 選項會啟用一些 NSE 指令碼,但不會啟用所有的指令碼。要啟用所有的 NSE 指令碼,您需要使用--script=all 選項。
-A 選項是-T4、-O、-Pn、-sC 和--script=default 選項的組合。

因此我會使用 nmap -p 1-65535 -T4 -A -v --script=all xxx.xxx.xxx.xxx進行掃描

3 結果分析

掃描完成後,有大量的日誌輸出需要去分析日誌

  • 開放埠是否存在問題 重點分析 open 狀態的埠
    是不是有的埠可以直接訪問到檔案
    是不是有的埠可以沒有鑑權直接返回了一些資料
    是不是有點埠直接就下載了檔案等

  • 是否存在漏洞
    檢視 nse 是否發現漏洞

  • 將 xml 轉化為 如下的 html 報告(好向領導彙報需要替換文件的樣式)

from lxml import etree

# 讀取生成報告的XML檔案
tree = etree.parse(r'D:\nmap\zt.xml')

# 讀取XSL樣式表檔案
xslt = etree.parse(r'D:\nmap\new_template2.xsl')

# 建立轉換器並應用樣式表
transform = etree.XSLT(xslt)
result = transform(tree)

# 將轉換結果寫入HTML檔案
with open('output2.html', 'wb') as f:
    f.write(result)

相關文章