溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nmap滲透測試腳本是怎樣的

發(fā)布時間:2021-11-18 13:39:36 來源:億速云 閱讀:134 作者:柒染 欄目:網絡管理

Nmap滲透測試腳本是怎樣的 ,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

01.先行體驗

root@kali:~# nmap -sV -sC scanme.nmap.org


Nmap滲透測試腳本是怎樣的

上一個命令運行帶有操作<font color=#00ffff>  系統(tǒng)檢測 (-O)</font>的SYN掃描,即<font color=#00ffff>  服務檢測(-sV)</font>,最重要的是NSE在(-sC)上。 -sC選項啟用NSE并在默認類別中運行任何腳本。 這組腳本被默認為是安全的,它不會執(zhí)行任何可能會干擾在該服務上運行的服務的目標主機的操作。 但是,某些腳本執(zhí)行可能引發(fā)的操作入侵檢測系統(tǒng)(IDS)和入侵防護系統(tǒng)(IPS)中的警報。

02.深入了解

腳本分類

首先我們得了解腳本的分類信息,這樣我們才能更好地把我們自定義的腳本進行歸類利用。

腳本類別描述
auth與用戶認證相關的NSE腳本
broadcast使用廣播收集網絡信息
brute暴力破解
default默認,執(zhí)行腳本(-sC)
discovery與主機和服務發(fā)現相關的腳本
dos與拒絕服務攻擊有關的腳本
exploit用于利用安全漏洞的腳本
external此類別適用于第三方服務的腳本
fuzzerNSE腳本專注于模糊測試
intrusive入侵腳本
malware與惡意軟件檢測相關的腳本類別
safe在所有情況下默認為是安全的腳本
vuln與檢測和利用安全漏洞相關的腳本
version高級系統(tǒng)腳本
<font color=#FF0000>NSE腳本選擇</font>

Nmap使用<font color=#00ffff> --script</font>選項進行腳本的選擇。 這個選項后面可以是一個腳本名稱,NSE類別,NSE文件的路徑,包含腳本的文件夾,甚至表達式。使用<font color=#00ffff> --script</font>通過腳本名稱或類別進行選擇腳本。Nmap選項會按名稱執(zhí)行腳本。 執(zhí)行時用逗號分隔幾個腳本:

直接加腳本名稱
   

    

  ,

以下屏幕截圖顯示了http-huawei-hg5xx-vuln腳本的輸出。 此腳本利用華為設備中的遠程漏洞進行檢索,檢索的信息包括PPPoE憑證和無線網絡安全配置:


Nmap滲透測試腳本是怎樣的Nmap滲透測試腳本是怎樣的

要選擇整個類別,只需使用類別的名稱(請參閱腳本作為參數。 例如,要運行漏洞類別,
使用以下命令:
   <>

您也可以用逗號分隔它們來運行多個類別:

  , <>

-選項僅僅是默認選項的別名。

按文件名或文件夾選擇

要執(zhí)行腳本文件,請使用以下命令:

   <>

與類別類似,可以通過分離路徑來執(zhí)行多個腳本

用逗號分隔:

  , <>

要執(zhí)行文件夾中包含的所有腳本,只需要傳遞文件夾名稱

舉個栗子:

  <>
<font color=#FF0000>高級腳本選擇與表達式</font>
表達式用于描述一組腳本。
我們可以利用腳本選擇表達式的場景:
?舉個栗子:(未利用表達式將匹配任何腳本)

使用不屬于類別的腳本:
    <>

?或和運算符允許我們構造更復雜的表達式。
以下表達式將匹配不在,或者,或者類別中的任何腳本。

   - <>

?如果我們想要執(zhí)行和中的所有類別腳本。

我們使用:

   < >

?甚至可以使用通配符*:

   <>

?當然,我們可以結合使用通配符和表達式。例如:

讓我們運行名稱以開頭的所有腳本,但排除

,,和腳本:

  
  )

下一個命令將執(zhí)行以開頭的但不在類別中的所有腳本:
 “ * ()”<>
<font color=#FF0000>NSE腳本參數</font>

--script-args 選項用于在NSE腳本中設置參數。

還是舉個栗子,設置http-title腳本的參數useragent,使用這個表達式:

nmap -sV --script http-title --script-args http.useragent =“Mozilla 1337“<target>

當然有時你也可以在忽略腳本名稱設置參數(以下兩條表達意思是一致的):

nmap -p80 --script http-trace --script-args path <target>

nmap -p80 --script http-trace --script-args http-trace.path <target>

如果你使用共享參數名稱的腳本,就必須避免參數沖突。例如下面中的uri參數,公用的時候要是需要進行額外的設置時就必須加上完整的腳本名稱,避免參數之間的沖突。

$   ,

  = , = <>

$   ,

  = , =  <>

03.萬事具備

<font color=#FF0000>語言準備</font>

編寫NSE腳本我們需要有l(wèi)ua編程語言的基礎,可以回去自己學習一下。我這里簡單列出編寫腳本之前必須了解的一些語法。其他的就自己回去學習吧。轉載于菜鳥教程:http://www.runoob.com/lua/lua-tutorial.html

Lua 特性
  • 輕量級: 它用標準C語言編寫并以源代碼形式開放,編譯后僅僅一百余K,可以很方便的嵌入別的程序里。

  • 可擴展: Lua提供了非常易于使用的擴展接口和機制:由宿主語言(通常是C或C++)提供這些功能,Lua可以使用它們,就像是本來就內置的功能一樣。

  • 其它特性

    • 支持面向過程(procedure-oriented)編程和函數式編程(functional programming);

    • 自動內存管理;只提供了一種通用類型的表(table),用它可以實現數組,哈希表,集合,對象;

    • 語言內置模式匹配;閉包(closure);函數也可以看做一個值;提供多線程(協(xié)同進程,并非操作系統(tǒng)所支持的線程)支持;

    • 通過閉包和table可以很方便地支持面向對象編程所需要的一些關鍵機制,比如數據抽象,虛函數,繼承和重載等

 
 
 
 
標示符
 標示符用于定義一個變量,函數獲取其他用戶定義的項。標示符以一個字母  到  或  到  或下劃線  開頭后加上個或多個字母,下劃線,數字(到)。
最好不要使用下劃線加大寫字母的標示符,因為的保留字也是這樣的。
 不允許使用特殊字符如 @, $, 和 % 來定義標示符。  是一個區(qū)分大小寫的編程語言。因此在  中  與  是兩個不同的標示符。以下列出了一些正確的標示符:
                        
                         

關鍵詞
以下列出了  的保留關鍵字。保留關鍵字不能作為常量或變量或其他用戶自定義標示符:






一般約定,以下劃線開頭連接一串大寫字母的名字(比如 )被保留用于  內部全局變量

 數據類型
是動態(tài)類型語言,變量不要類型定義,只需要為變量賦值。 值可以存儲在變量中,作為參數傳遞或結果返回。
中有個基本類型分別為:、、、、、、和。
數據類型描述
這個最簡單,只有值屬于該類,表示一個無效值(在條件表達式中相當于)。
包含兩個值:和。
表示雙精度類型的實浮點數
字符串由一對雙引號或單引號來表示
由  或  編寫的函數
表示任意存儲在變量中的數據結構
表示執(zhí)行的獨立線路,用于執(zhí)行協(xié)同程序
 中的表()其實是一個( ),數組的索引可以是數字或者是字符串。在  里, 的創(chuàng)建是通過來完成,最簡單構造表達式是{},用來創(chuàng)建一個空表。

(空)
 類型表示一種沒有任何有效值,它只有一個值 
        
 變量
變量在使用前,必須在代碼中進行聲明,即創(chuàng)建該變量。
編譯程序執(zhí)行代碼之前編譯器需要知道如何給語句變量開辟存儲區(qū),用于存儲變量的值。
 變量有三種類型:全局變量、局部變量、表中的域。
 中的變量全是全局變量,那怕是語句塊或是函數里,除非用  顯式聲明為局部變量。
局部變量的作用域為從聲明位置開始到所在語句塊結束。
變量的默認值均為 。

 =                
  =          

 ()
     =            
      =      


()
(,)          

 
      =      
     =            
    (,);     


(,)      
執(zhí)行以上實例輸出結果為:
$

<font color=#FF0000>了解NSE腳本的編寫規(guī)則</font>

Nmap的目錄結構

我們只需要簡單的了解一下它的結構即可,了解它的目錄結構是為了清楚Nse腳本存放的位置。這里有幾個注意點:

1.編寫的腳本的后綴為nse

2.編寫之后的NSE腳本存放在script文件夾內,這樣腳本才可以生效

3.必須使用--script選項進行調用Nse腳本


Nmap滲透測試腳本是怎樣的

NSE腳本的編寫流程

在書寫NSE腳本之前我們必須了解它的書寫步驟,為了方便大家理解,我把一個NSE腳本的書寫分為了四步。

1.導入腳本編寫所需庫

2.編寫腳本描述信息

3.確定Rule類型

4.編寫Action

可能此時你還有點蒙,沒關系,我們看一下圖思路就清晰了。

Namp nse 腳本模板結構如圖所示:


Nmap滲透測試腳本是怎樣的

文章看到這里大家肯定想接下來肯定要開始編寫NSE腳本了吧。還不行呢,我們先舉個幾個栗子來說說四個Rule類型的區(qū)別。

Rule的四種類型

Rule:用于描述腳本的觸發(fā)規(guī)則,返回值只有true和false兩種。返回值決定了后面action對應的函數是否執(zhí)行,注意:true(執(zhí)行),flase(不執(zhí)行)。它有四種類型分別是Prerule,Hostrule,Portrule,Postrule。

下面的幾個栗子的環(huán)境為:

1.Window
2.phpstudy
3.nmap-7.6
4.zzcms8.2(對應zzcms.im)

基礎參數擴展

HOSTTABLE類型
host.os操作系統(tǒng)信息
host.iptagret(目標主機)對應的ip,例如下面的127.0.0.1
host.nametagert在命令行對應的名字,例如下面的zzcms.im
host.targetname同上host.name,我個人是這樣認為的
host.directly_connected判斷目標主機是否與本機在同一個子網
host.mac_addrmac地址 (必須是同一子網的設備這個命令才有效)
porttable類型
port.number端口號
port.protocol協(xié)議
port.service服務 http或https
port.version版本信息
port.state端口狀態(tài)

Prerule

Prerule會在Namp沒有掃描之前進行觸發(fā)。

舉個栗子:我們新建一個prerule.nse文件,然后我們把它存放在script文件夾下。只要"RongRi AnQuan NSE script Prerule test"打印在Namp掃描之前,就可以證明Prerule會在Namp沒有掃描之前進行觸發(fā)。

 = 









 = 
 = 
 = {,}

 = (,)
    


 = (, )


Nmap滲透測試腳本是怎樣的


我們都知道在測試階段我們難免會出現錯誤,那假設我們出現了錯誤我們應該如何解決呢。這時我們需要借助Nmap的調試模式進行調試。還是老規(guī)矩舉個栗子:那我這里新建一個preruleDebug.nse文件讓它打印系統(tǒng)信息故意讓其出錯(至于為啥會出錯后面會解釋),然后調試一下給大家看。我們只需要加上-d選項即可進入調試模式,那一般我這邊是-d 3,3代表的是等級,等級越高,越詳細。-d 3打印的調試的信息已經足夠詳細了,所以我習慣選擇-d 3.

 = 










 = 
 = 
 = {,}

 = (,)
    
 


 = (, )

錯誤界面如圖所示:


Nmap滲透測試腳本是怎樣的

調試模式如圖所示:


Nmap滲透測試腳本是怎樣的

我們從圖中可以看到出錯原因是因為prerule threw an error!看到詳細原因是因為attempt to index a nil value (local 'host')意思是說host是個無效值。原因是:我們知道prerule是在Nmap掃描之前觸發(fā)腳本的。那也就是說我們是無法在action中打印出操作系統(tǒng)信息。好了,到這里大家也應該知道如何調試錯誤了。


聽說,對比產生美

我們都知道對比產生美,那我們在這個錯誤的模板上改一下規(guī)則讓它變成hostrule,看看結果如何。

Hostrule

Hostrule會在Namp執(zhí)行主機發(fā)現或探測進行觸發(fā)。

舉個栗子:新建一個hostrule.nse文件。復制上面preruleDebug.nse的代碼,但是做一點改動,就是Rule的類型改為Hostrule。然后運行能否打印我們想要的系統(tǒng)信息(嘻嘻,結果當然是成功打印啦)。

 = 



























 = 
 = 
 = {,}
 = (,)
    
 

 = (, )


Nmap滲透測試腳本是怎樣的Nmap滲透測試腳本是怎樣的

Portrule

Portrule會在Namp執(zhí)行端口掃描時觸發(fā)腳本。

舉個栗子:新建portrule.nse文件,代碼如下,然后我們掃描幾個端口然后看看是否在掃描端口的時候打印出“Hongri Anquan yumu”和host.ip。

  =  
  =  


 = 












 = 
 = 
 = {,}
 = (,)
     ==    == 






 (,)
  = {}
  = 
(,)
(,(, ))
 (, )

結果如下:


Nmap滲透測試腳本是怎樣的


再舉一個栗子:小試牛刀,我們寫一個Nse腳本來獲取zzcms8.2網站上的客服電話號碼。


Nmap滲透測試腳本是怎樣的

參數知識擴展

HTTP
get()發(fā)起get請求,請求結果以一個table的形式返回
host要請求的主機
path要檢索的路徑
options可選,允許調用者控制socket,請求頭的table
port要檢索的端口


post()發(fā)起post請求,請求結果以一個table的形式返回
ignored向后兼用,一般填寫nil,忽略即可
postdatapost數據,字符串或者table格式
host要請求的主機
path要檢索的路徑
options可選,允許調用者控制socket,請求頭,超時時間的table
port要檢索的端口

注意小細節(jié)


-- 1.方法解釋
-- string.match(str, pattern, init)
-- string.match()只尋找源字串str中的第一個配對. 參數init可選, 指定搜尋過程的起點, 默認為1。
-- 在成功配對時, 函數將返回配對表達式中的所有捕獲結果; 如果沒有設置捕獲標記, 則返回整個配對字符串. 當沒有---- 成功的配對時, 返回nil。
-- 2.亂碼問題解決方法
-- 打印的response.body(響應體)在cmder可能會顯示亂碼。解決方法如下:
-- cmd命令行窗口字符編碼切換為UTF-8,命令行中執(zhí)行:chcp 65001
  =  
  =  
  =  
  =  
  =  

 = 











 = 
 = 
 = {,}

 = 

 (,)
 ,
 = 
 = (,,)
 = (,)
   ~= 

 ..


Nmap滲透測試腳本是怎樣的


Postrule

Portrule會在Namp結束時觸發(fā)腳本,通常用于掃描結果的數據提取和整理。

舉個栗子:  觸發(fā)時候打印"Hongri Anquan test postrule"

 = 












 = 
 = 
 = {,}

 = (,)
    
 


 = (, )


Nmap滲透測試腳本是怎樣的


初出茅廬,實戰(zhàn)編寫腳本探測zzcms8.2 反射型XSS

需要詳細zzcms8.2代碼審計的內容請到:https://bbs.ichunqiu.com/thread-36147-1-1.html

那我這里本地搭建了環(huán)境,然后我先簡單使用火狐測試一下是否存在反射型xss。廢話不說,打字累人,看操作。


Nmap滲透測試腳本是怎樣的Nmap滲透測試腳本是怎樣的

Nmap滲透測試腳本是怎樣的

嗯,只要玩過web滲透的都應該知道此時源碼當中肯定插入了<script>alert(1)</script>,這點必須清楚,因為這是我們后面編寫Nse腳本思路。


Nmap滲透測試腳本是怎樣的


Nmap滲透測試腳本是怎樣的

好。我們來看看圖,確定編寫思路。


Nmap滲透測試腳本是怎樣的

看完四步的你應該很清晰如何編寫我們的腳本了,那就開干吧。我這里新建一個zzcmsxss.nse,代碼如下:

  =  
  =  
  =  
  =  
  =  

 = 






















 = 
 = 
 = {,,,}

 = (,)
     ==    == 


  = 
 = (, )

   (,)
   (,)

     = {}
     = 
     = 
     = ( .. )  

    ={ = {
   []=,
   []=,
   []=,
   [] = ,
   [] = ,
   []=..  ..,
   []=,
   []=,
   []=,
   []=,
   } }

     = {
[]=,
[]=,
[]=
   }

    = (,,,,,)  
       
   

  ==   (,) ~=   

      (,(,))
 (, )

      (,(,))
 (, )

結果如下(保存有xml的輸出格式):


Nmap滲透測試腳本是怎樣的


Nmap滲透測試腳本是怎樣的

看完上述內容,你們掌握Nmap滲透測試腳本是怎樣的 的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI