Nmap流量特征修改


0x01 前言

nmap是滲透中嘗嘗用到的工具之一,在信息收集階段經常用到,現在主流的流量分析設備也將其流量加入了特征庫,

為了防止在探測階段IP就被封掉,對其的流量特征做一些簡單的修改有點用的。

由於沒有廠商設備檢測,故以下只是學習記錄一下思路。具體效果還待驗證。

參考鏈接

如何修改nmap, 重新編譯,bypass emergingthreats 的公開ids規則:

https://xz.aliyun.com/t/6002

nmap端口掃描技術:

https://nmap.org/man/zh/man-port-scanning-techniques.html

NmapbypassIDS:

https://github.com/al0ne/Nmap_Bypass_IDS

0x02 環境

VM虛擬機:

192.168.1.113 開放135,3389 防火牆禁止445入站

ubuntu:

編譯安裝nmap用,kali下編譯安裝存在點問題,坑太多了,以后有時間再去踩。

0x03 nmap探測的常用幾種方式

-sS (SYN掃描)

nmap默認端口掃描方式,執行半開掃描,不完成TCP握手流程。只向目標端口發送一個SYN報文,然后等待響應。

SYN/ACK表示端口在監聽 (開放),而 RST (復位)表示沒有監聽者。

如果多次重發后仍沒響應, 該端口就被標記為被過濾。

使用抓包工具可以完整的看到探測過程。

-sT (TCP掃描)

一般不推薦使用,因為會留下連接日志。

另外在調用一些高級掃描時(如HTTP),會調用這種連接方式。

使用抓包工具看其探測過程

1600245394_5f61ce927c86548174248.png!small

-sU(UDP掃描)

DNS,SNMP,和DHCP是常常開放UDP的幾個服務,有些情況下會使用到。

由於UDP是無連接的,所以會面臨響應探測問題,探測時的端口是否開放還是被過濾的判斷,會讓Nmap超時然后再探測,以防探測幀或者響應丟失,導致探測時間增長。

關閉的端口常常是更大的問題。它們一般發回一個ICMP端口無法到達錯誤。

但是不像TCP發送的RST報文,許多主機在默認情況下限制ICMP端口不可到達消息。

如:Linux 2.4.20內核限制一秒鍾只發送一條目標不可到達消息。

抓包看一下,當只看到兩個UDP無內容包時,懵了一下。

查了一下發現除了某些特定端口會有響應返回,如137 用的NBNS,其他的全部都是沒有返回,原因是因為這台機器禁PING了,就是ICMP的返回包過不來。

所以沒法判斷端口是否關閉。

1600245422_5f61ceaeb6398ed33981f.png!small

修改防火牆設置。

允許文件和打印機共享后確實可以ping主機了,但是ICMP回包還是有問題。

后來索性把防火牆關掉。

就可以明顯看到其是通過返回包來進行判斷的。

1600245445_5f61cec51dbafd4bd2fcf.png!small

-sN;-sF;-sX (TCP Null,FIN,and Xmas掃描)

這個還是挺有意思的,首先這個不適用掃描windows、Cisco、bsdi、IBM的一些服務器,因為並不是完全遵守RFC 793這個協議。

這個協議會存在這種情況,當端口關閉時,任何不包含SYN,RST,或者ACK位的報文會導致 一個RST返回,而當端口開放時,應該沒有任何響應。

所以只要不包含SYN,RST,或者ACK, 任何其它三種(FIN,PSH,and URG)的組合都行。

而剛剛上面說的那些他們並不遵守這個,他們不管端口開放或關閉,都返回一個RST,導致Nmap判斷錯誤。

-sN 不設置任何標志位

-sF 只設置FIN標志位

-sX 設置FIN,PSH,和URG標志位

看一下探測過程,如果沒加參數,默認會先發送ICMP請求。

640?wx_fmt=png

-sA(ACK 掃描)

用於探測防火牆狀態。ACK掃描探測報文只設置ACK標志位。

當掃描未被過濾的系統時, open(開放的)和 closed(關閉的) 端口 都會返回RST報文。

Nmap把它們標記為 unfiltered(未被過濾的),無返回或者返回ICMP錯誤響應時標記為filtered。

防火牆關閉狀態下。返回unfiltered

防火牆開啟狀態下。返回filtered

1600245525_5f61cf157a5c7d721ff7e.png!small

-scanflags (自定義掃描)

可以使用 URG, ACK, PSH, RST, SYN,and FIN的任何組合,進行發包。詳細可以自己組合定制

-sI(Idlescan)

高級隱藏掃描。利用僵屍網絡執行掃描。詳細可看文章

(文章鏈接:https://nmap.org/book/idlescan.html)

-sV (版本檢測)-O (系統檢測)

可以看到在探測的時候會有標志和固定長度字符串問題。

IDS識別nmap掃描一般都是根據UDP data區域填充的'C'字符串,ICMP填充的是0(正常windows下是a-z,Linux下是0-9。

莫慌,接下就學習一下怎么去改這些個文件。

1600245549_5f61cf2dc7f7233ae62f2.png!small

0x04 nmap的流量特征修改

Win值修改

通過觀察可以發現nmap在使用SYN掃描時Windows的窗口值值固定是1024。

(PS :window 關鍵字用於檢查特定的TCP窗口大小)

下面是正常連接3389時,發送的數據包。可以看到win值明顯不一樣。

修改tcpip.cc文件中tcp->th_win的值,查詢TCP中win這個值的信息發現,

默認最大為65535。

所以應該在此范圍內都可以。

但是要考慮已公開的規則,如之前大佬寫的bypass emergingthreats這篇,這個就過濾了2048 1024 3072 4096。

后來因某些原因,把nmap編譯到了雲服務器上,抓包的話就需要tcpdump了。

tcpdump -i eth0 -t -s 0 -c 100 host IP

關鍵詞修改

根據規則,一個一個去修改文件即可。nmap,nm,nm@p,OR sqlspider等等,

主要的就是SIP文件和一些常用的腳本文件。

這些個就是從emergingthreats的規則中提取的。

UDP探測時填充值修改

osscan2.cc

static u8 patternbyte = 0x43; /* character 'C' /

替換為 static u8 patternbyte = 0x46; / character 'F' */

重新編譯后再去掃描,內容已經換了,長度應該也是可以調整。

u8 packet[328]; /* 20 IP hdr + 8 UDP hdr + 300 data */

這里還沒測試,感興趣可以自己去定義,看會不會有什么問題。

0x05 nmap編譯安裝

nmap編譯時可能會遇到如下錯誤,幾乎都是缺少特定的庫導致的,

所以編譯安裝時需要安裝以下庫。

編譯環境是基於Ubuntu的,其他環境庫的名字可能不同,遇到編譯報錯可百度找對應解決方法即可。

apt install flex bison libssl-dev./configure --without-zenmapmake && make install

0x06 總結

可修改文件及修改處

6.1、修改namp默認win窗口值。

tcpip.cc

tcp->th_win = hosts(1-65535)

6.2、修改nmap-service-probes文件中關鍵詞

nmap,nm@nm,nm2@nm2,nm@p,nm,0PT10NS sip

這些值酌情替換。

6.3、修改腳本中的值

  • nselib/http.lua

USERAGENT = stdnse.getscript_args('http.useragent')

  • nselib/mssql.lua

搜索Nmap NSE然后替換

  • nselib/sip.lua

搜索Nmap NSE然后替換

  • scripts/http-sql-injection.nse

搜索sqlspider然后替換

  • scripts/ssl-heartbleed.nse

搜索Nmap ssl-heartbleed替換

  • nselib/rdp.lua

local cookie = "mstshash=nmap"

6.4、修改使用-O參數發包填充內容

osscan2.cc

static u8 patternbyte = 0x43; /* character 'C' /

替換為 static u8 patternbyte = 0x46; / character 'F' */


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM