Nmap 擴充套件(四)

aa111111發表於2022-03-17

一、HTTP 包的使用


一般情況下,我們掃描一些Web服務的同時需要進行滲透測試、安全評估、漏洞檢測等操作,但是官方並未提供符合我們需求的指令碼,這時候就要自己寫指令碼了。Nmap已經內建了HTTP包,不需要再進行下載和配置。


二、基礎概念鋪墊


首先,先介紹兩個表結構,為了方便我們後續的資料操作,讓讀者先熟悉兩個東西:


響應表

響應表中主要涵蓋了:HTTP狀態碼、HTTP響應頭、HTTP版本、HTTP原始響應頭、Cookies、HTTP響應主體內容(body)等。


|   Response: 

|     status: 200

|     header: 

|       content-length: 0

|       allow: POST,OPTIONS,HEAD,GET

|       connection: close

|       content-type: text/html

|       server: Apache/2.4.29 (Debian)

|       date: Fri, 06 Jul 2018 07:02:13 GMT

|     ssl: false

|     body: 

|     cookies: 

|     status-line: HTTP/1.1 200 OK\x0D

|     rawheader: 

|       Date: Fri, 06 Jul 2018 07:02:13 GMT

|       Server: Apache/2.4.29 (Debian)

|       Allow: POST,OPTIONS,HEAD,GET

|       Content-Length: 0

|       Connection: close

|       Content-Type: text/html

|       

|_    version: 1.1


Options表

Options表主要用於設定HTTP請求時的超時時間、Cookie、請求頭、HTTP認證、頁面快取、地址型別(IPV4/IPV6)、是否驗證重定向。


{

timeout:

header:{"Content-Type":"",...},

cookies:{\{"name","value","path"\},...},

auth:{username:"",password:""},

bypass_cache:true,

no_cache:true,

no_cache_body:true,

any_af:true,

redirect_ok:true

}

三、確定目標主機的 HTTP 服務是否支援 HEAD


引入HTTP包

local http = require "http" 


確認目標主機的HTTP服務是否支援HEAD

 這裡主要使用can_use_head函式,引數有4個,函式原型如下: 


local status,header = can_use_head(host,port,result_404,path) 


引數說明: 


host : host表

port : port表

result_404 : 由identify_404函式確認當前Web伺服器是否設定了404頁面且返回200狀態碼,一般情況下填寫404或者nil。

path : 請求路徑,預設為“/”根目錄

其中status是一個布林值,如果返回true則支援HEAD,返回false則不支援

header是HEAD請求的結果

需求:確認目標主機是否支援HEAD,如果支援則輸出響應頭 


local stdnse = require "stdnse"

local http = require "http"

prerule=function()

end

hostrule=function(host)

return false

end

portrule=function(host,port)

if(port.number == 80) then

return true

end

return false

end

action = function(host,port)

local result

local status = false

status,result = http.can_use_head(host,port,404,"/")

if(status) then

http_info = stdnse.output_table()

http_info.header = result.header

http_info.version = result.version

return http_info

end

end

postrule=function()

end


程式碼解讀:


看完程式碼讀者可能會有疑問,hostrule函式為什麼返回false? 


在hostrule中返回false是因為如果是true會自動呼叫action,此時port的值是nil,所以會丟擲一些錯誤。 


緊接著就是將埠號為80的host和port交給action函式執行,呼叫can_use_head函式,判斷status是否為true,是true則支援HEAD方法請求。最後生成一個output_table,用來將響應內容填入這個表,以便於格式化顯示。 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2871543/,如需轉載,請註明出處,否則將追究法律責任。

相關文章