nikto—Start hook
在目標和枚舉以及掃描開始之間調用Start hook。無論Nikto遇到多少目標,它都只會被調用一次。它只會在稍后執行的插件上運行。
這使得它成為為插件設置任何所需變量、分配變量或加載數據庫的理想位置,以用于插件以響應以后的hook。
沒有為參數傳遞start方法,并且不返回任何內容。
void start_method(void) ;
void;
偵聽階段
在每次掃描開始時對每個目標執行偵聽階段。
每個這樣的偵聽方法都希望使用 markhash引用。它應該不返回任何內容。
void recon_method(mark,parameters);
hashref mark
hashref parameters;
偵聽階段旨在用于獲取有關Web服務器的信息,以供插件或其他插件以后使用。不建議在此階段報告漏洞。
偵聽階段的示例用途是對站點進行爬網,檢查已知應用程序等。
掃描階段
掃描階段是插件生命的關鍵,在偵聽階段之后立即針對每個目標運行該掃描階段。
每次掃描應檢查其知道的漏洞,并在發現漏洞時進行報告。
void scan_method(mark,parameters);
hashref mark;
hashref parameters;
Prefetch hook
在對目標發出任何請求之前,將執行預取hook。它旨在允許插件在請求之前更改libwhisker hash。
在正常執行中,預取hook不應報告漏洞。
hashref request, hashref response prefetch_method(mark,parameters,request,result);
hashref mark;
hashref parameters;
hashref request;
hashref result;
Postfetch hook
postfetch hook是在對目標發出任何請求之后執行的。它旨在允許插件檢查響應問題,例如易受攻擊的標題或內容。
在正常執行中,postfetch hook應報告發現的任何漏洞。
hashref request, hashref response postfetch_method(mark,parameters,request,result);
hashref mark;
hashref parameters;
hashref request;
hashref result;
報告階段
這可能是最復雜的階段,因為它有多個掛鉤可用于掃描生命周期的每個部分。
hook是:
報告頭
在目標獲取之后和偵察階段之前立即調用此掛鉤。它旨在允許報告插件打開報告,并確保正確編寫任何標題。
handle report_head(文件名) ;
string filename;
該filename參數有點用詞不當;它是傳遞給-output交換機的字符串的副本, 并且可能表示例如數據庫名稱。
的handle是,將傳遞給此插件的其他報告函數的句柄,因此應該是內部一致的。
報告主機啟動
對于每個目標,在偵聽階段之前立即調用此掛鉤。它旨在允許報告插件寫入任何主機特定信息。
void report_host_start(rhandle,mark);
handle rhandle;
hashref mark;
該rhandle參數是插件的Report Head函數的輸出。
該mark參數是用于目標信息的hashref(如下所述)。
報告主機端
在每個目標的掃描階段結束后立即調用此掛鉤。它旨在允許報告插件關閉任何主機特定信息。
void report_host_end(rhandle,mark);
handle rhandle;
hashref mark;
該rhandle參數是插件的Report Head函數的輸出。
該mark參數是用于目標信息的hashref(如下所述)。
該vulnerability參數是針對漏洞信息的哈希引用(如下所述)。
報告項目
對于在目標上找到的每個漏洞,將調用一次此掛鉤。這應該報告有關該漏洞的詳細信息。
void report_item(rhandle,mark,vulnerbility);
handle rhandle;
hashref mark
hashref vulnerbility
該rhandle參數是插件的Report Head函數的輸出。
該mark參數是用于目標信息的hashref(如下所述)。
該vulnerability參數是針對漏洞信息的hashref引用(如下所述)。
報告關閉
掃描完所有目標之后,將立即調用此hook。它旨在允許報告插件優雅地關閉報告。
void report_close(rhandle);
handle rhandle;
該rhandle參數是插件的Report Head函數的輸出。
數據結構
以下數據結構用于在各種插件方法之間進行通信。除非另有說明,否則它們都是帶有詳細成員的標準perl hash引用。
標記
標記hash包含有關目標的所有信息。它包含以下成員。它應該是只讀的。
表8.2.漏洞結構的成員

參量
參數hash包含所有通過hook之一直接傳遞給插件的參數。
hash具有參數名稱的鍵和傳遞的參數的值。值的實現和完整性檢查由插件決定。
如果未設置參數,則該參數將不在hash中。如果已將其設置為未定義的值,則將其設置為hash中的數字1。
一些參數(例如verbose和 debug)將由Nikto自動處理,盡管這些參數仍將包含在hash中。
易損性
易損的hash包含有關漏洞的所有信息。它包含以下成員。它應該是只讀的,并且只能使用add_vulnerability方法寫入 。
表8.3.漏洞 結構的成員

標準方法
定義了幾種標準方Nikto_core.plugin中定義了幾個可用于所有插件的標準方法。強烈建議在可能的情況下使用這些方法,而不要編寫新的方法。
對于某些方法(例如寫入全局變量的add_vulnerability),這些方法必須是這些全局變量的唯一接口。
array change_variables( line);
string line;
擴展line參數中的所有變量。擴展是在全局數組中定義的變量@VARIABLES,可以從db_variables,或通過偵聽插件方法添加。
int is_404(uri,content,HTTPcode);
string uri;
string content;
string HTTPcode;
猜測結果是真實網頁還是錯誤頁面。由于多個Web服務器配置錯誤,并且在找不到頁面時不返回HTTP 404代碼,因此Nikto會嘗試查找常見的錯誤頁面。如果頁面看起來像錯誤,則返回1。
string get_ext(uri);
string uri;
嘗試解決uri的擴展問題。將返回擴展名或特殊情況:DIRECTORY,DOTFILE,NONE。
string date_disp();
void;
以可讀格式返回當前時間(YYYY-mm-dd hh:mm:ss)
string rm_active(content);
string content;
嘗試從頁面中刪除活動內容(例如日期,廣告等)。返回內容的過濾版本。
string get_banner(mark);
hashref mark;
拉起Web服務器橫幅。在將標記傳遞給插件之前,會對所有目標自動執行此操作。
boolean content_present(HTTPcode);
string HTTPcode;
根據已知的“found”響應檢查HTTP響應。TRUE表示請求可能已成功。
string HTTPCode, string content nfetch(mark,uri,method,content, headers,flags,testid);
hashref mark;
string uri;
string method;
string content;
hashref headers;
hashref flags;
string testid;
使用傳遞的參數通過libwhisker發出一個簡單的請求。nfetch具有hook感知功能,將導致所有請求都通過預取和后取hook傳遞。
該flags hash是可以修改請求的行為標志的選擇。當前標志已定義:
表8.4.標志 結構的成員

hashref setup_hash(requesthash,mark);
hashref requesthash;
hashref mark;
使用常規Nikto變量設置libwhisker哈希。如果使用了對libwhisker的任何自定義調用,則應使用此方法。
string char_escape( line);
string line;
轉義行中的所有字符。
array parse_csv( text);
string text;
將一行CSV文本分成一系列項目。
arrayref init_db( dbname);
string dbname;
初始化一個數據庫,PLUGINDIR 并返回一個arrayref。arrayref是hash引用的數組,每個hash成員由數據庫文件中的第一行配置,例如:
“nikto_id”,”md5hash”,”description”
這將導致帶有參數的hash引用數組:
array[0]->{nikto_id}
array[0]->{md5hash}
array[0]->{description}
void add_vulnerability(mark,message,
nikto_id,osvdb,method,uri,data);
hashref mark;
string message;
string nikto_id;
string osvdb;
string method;
string uri;
string data;
為標記添加一個漏洞,將其顯示為標準輸出,并將其發送給任何報告插件。
void nprint(message,display);
string message;
string display;
打印message到標準輸出。 Display指定消息的過濾器,當前對于冗長的消息可以為“ v”,對于調試輸出為“ d”。
全局變量
Nikto中存在以下全局變量,其中大多數是為內部使用而定義的,不建議插件使用它們。不推薦使用其中的幾個,插件不應該使用它們。
%TEMPLATES (讀/寫)
hash以存儲HTML和XML報告模板。
%CONTENTSEARCH (讀)
hash以包含db_content_search中的所有條目-字符串列表和相關信息,可從任何請求中發出警報(無論測試結果如何)。
%CLI (讀)
傳遞的CLI參數的hash
%VARIABLES (讀)(寫)
db_variables中條目內容的hash值。插件僅應在偵聽階段寫入此hash。
%TESTS (讀)(寫)
db_tests數據庫的hash。盡管僅供偵聽插件用來動態添加測試,但這僅供測試插件使用。
%NIKTO (讀)
包含內部Nikto數據的hash,例如命令行參數的幫助。
%CONFIGFILE (讀)
包含從配置文件讀取的數據的hash。
%request(已讀)(寫)(已棄用),%result(已讀)(寫)(已棄用)
全局libwhisker hash不應使用;應該使用nfetch或本地hash。
%COUNTERS (讀)(寫)
包含各種全局計數器的hash(例如請求數)
%db_extensions (已讀)(已棄用)
包含常用擴展名列表的hash
%FoF (讀)(寫)
包含每個擴展名的數據的hash值,以及如果請求不存在的文件的請求,服務器將生成的數據。
%UPDATES (讀)(寫)
包含需要發送回cirt.net的任何更新的hash
$DIV (讀)
將分隔符標記的項目發送到標準輸出。
@DBFILE (讀)
占位符,用于保存的內容 db_tests。
$PROXYCHECKED (已讀)(已棄用)
標記以查看是否已檢查通過代理的連接。
@RESULTS (讀)
報告的漏洞數組,僅應通過寫入 add_vulnerability.
@PLUGINS (讀)
每個插件的hash引用數組。在內部用于運行插件。
@MARKS (讀)
指示每個目標的標記數組。
@REPORTS (讀)
報告插件應在其中運行的有序數組。用于提高報告插件的調用效率。
Nikto中文使用教程
推薦文章: