?? x-scan-sdk-cn.txt
字號:
X-Scan v3.0 SDK
所需文件及描述:
XScanLib.lib: 開發包庫文件, 需要加入插件工程文件中. 對于VC編譯器可直接使用, 對于BCB編譯器, 需要使用ImpLib工具由XScanLib.dll導出該lib文件使用.
XScanLib.h: 開發包頭文件, 包含X-Scan插件所需預定義及接口函數定義.
arglist.*: 用于直接操作插件參數鏈表, 普通插件不需要使用.
掃描插件接口:
所有插件為DLL形式(后綴改為.xpn保存到plugins目錄), 應導出以下兩個函數:
//------------------------------------------
/*
功能描述:
該函數在初始化插件時被調用, 用于獲取插件基本信息
返回值含義:
TRUE: 插件初始化成功
FALSE: 插件初始化失敗
*/
extern "C" __declspec(dllexport) BOOL __stdcall GetPluginInfo(PLUGIN_INFO *);
//------------------------------------------
/*
功能描述:
該函數在檢測主機時被調用, 傳入類型為(struct arglist *)的掃描參數鏈表
通過其他接口函數可以獲得所有掃描參數及關鍵字
返回值含義:
TRUE: 存在漏洞
FALSE: 不存在漏洞
*/
extern "C" __declspec(dllexport) BOOL __stdcall PluginFunc(struct arglist *);
結構定義, 預定義及接口函數功能描述:
//------------------------------------------
//插件基本信息結構定義
typedef struct _PLUGIN_INFO {
char szClassName[50]; //插件所屬類別
char szMemberName[50]; //插件成員名稱
char szVersion[10]; //插件版本
char szFileName[50]; //插件原始文件名(不含路徑)
char szParamsRequest[50]; //選擇該插件所需參數, 如"-cgi [encode_type]"
char szPrompt[200]; //對參數的解釋, 如"check cgi abuses, the encode_type limit is 0-6"
int nSingle; //是否為單一漏洞(漏洞數量只可能為1或0)
char szAuthorName[50]; //插件作者
char szDescription[300]; //插件描述
DWORD dwTimeOut; //超時限制(毫秒), "0"表示不限時
int nMark; //標識該插件是否被默認選中
char szImageFile[50]; //16*16圖標文件(BMP格式, 不含路徑, 位于images目錄)
} PLUGIN_INFO;
//------------------------------------------
#define AT_NORMAL 0x101 //普通信息, 將顯示在GUI“普通信息”欄
#define AT_WARNING 0x102 //漏洞信息, 將顯示在GUI“漏洞信息”欄
#define AT_ERROR 0x103 //錯誤信息, 將顯示在GUI“錯誤信息”欄
////////////////////////////////////////////
//初始化函數
////////////////////////////////////////////
//------------------------------------------
/*
功能描述:
初始化函數, 必須在使用其他接口函數前進行初始化
返回值含義:
TRUE: 成功
FALSE: 失敗
*/
BOOL __stdcall PlugInitLib(
struct arglist *pParams); //掃描參數鏈表
////////////////////////////////////////////
//界面交互接口函數
////////////////////////////////////////////
//------------------------------------------
/*
功能描述:
向界面輸出字符串
返回值含義:
無
*/
void __stdcall PlugAlertUser(
struct arglist *pParams, //掃描參數鏈表
int nType, //信息類型(見預定義AT_NORMAL/AT_WARNING/AT_ERROR)
char *szLine); //信息內容
//------------------------------------------
/*
功能描述:
向掃描報告中添加漏洞記錄
返回值含義:
無
*/
void __stdcall PlugLogToFile(
struct arglist *pParams, //掃描參數鏈表
char *szPort, //格式為:"[端口]/[協議]", 協議可為: "tcp"/"udp"/"icmp"...
char *szDataType, //日志類型: "NOTE"/"INFO"/"HOLE", 分別對應于"提示(低)"/"警告(中)"/"漏洞(高)"
char *szData); //日志內容(在掃描報告中顯示的漏洞描述信息)
//------------------------------------------
/*
功能描述:
向圖形界面左側的TreeView中添加一個結點
返回值含義:
無
*/
void __stdcall PlugAddToTV(
char *szLine, //TreeView完整路徑, 以"\n"為分隔符
char *szImageFile); //圖標文件名(不含路徑)
//------------------------------------------
/*
功能描述:
從圖形界面左側的TreeView中刪除一個結點
返回值含義:
無
*/
void __stdcall PlugDelFromTV(
char *szLine); //TreeView路徑, 以"\n"為分隔符
//------------------------------------------
/*
功能描述:
更改圖形界面左側的TreeView中某個結點的標題或圖標
返回值含義:
無
*/
void __stdcall PlugChangeTVItem(
char *szLine, //TreeView路徑, 以"\n"為分隔符
char *szNewItem, //新標題
char *szImageFile); //圖標文件名(不含路徑)
//------------------------------------------
/*
功能描述:
設置當前正在進行的任務,便于用戶在圖形界面右上方的任務欄中查看
返回值含義:
無
*/
void __stdcall PlugSetCurrentSchedule(
struct arglist *pParams, //掃描參數鏈表
char *szSchedule); //當前任務描述
////////////////////////////////////////////
//讀取用戶設置接口函數
////////////////////////////////////////////
//------------------------------------------
/*
功能描述:
從語言文件(INI格式)中讀取相應的字符串
返回值含義:
無
*/
void __stdcall PlugGetString(
char *szName, //字符串名稱
char *szLine, //返回字符串
char *szKey1, //用于替換字符串中的"%1"
char *szKey2); //用于替換字符串中的"%2"
//------------------------------------------
/*
功能描述:
根據服務名稱獲得預設服務的TCP端口
返回值含義:
預設端口或經過智能識別獲得的對應端口
*/
int __stdcall PlugGetTcpPort(
struct arglist *pParams, //掃描參數鏈表
char *szService, //服務名稱, 如"www","ftp"
int nDefaultPort); //默認端口
//------------------------------------------
/*
功能描述:
根據服務名稱獲得預設服務的UDP端口
返回值含義:
預設端口或經過智能識別獲得的對應端口
*/
int __stdcall PlugGetUdpPort(
struct arglist *pParams, //掃描參數鏈表
char *szService, //服務名稱, 如"snmp","tftp"
int nDefaultPort); //默認端口
////////////////////////////////////////////
//插件應用函數
////////////////////////////////////////////
//------------------------------------------
/*
功能描述:
獲取目標主機某個TCP端口狀態
返回值含義:
>0: 端口已經檢查過并且處于開放狀態
其他: 端口關閉或未經過檢查
*/
int __stdcall PlugCheckTcpPort(
struct arglist *pParams, //掃描參數鏈表
int nPort); //需要檢查的TCP端口
//------------------------------------------
/*
功能描述:
設置或新增掃描參數
返回值含義:
>0: 成功
其他: 失敗
*/
int __stdcall PlugSetParams(
struct arglist *pParams, //掃描參數鏈表
char *szName, //參數名稱
int nType, //參數類型
void *pValue); //參數值
//------------------------------------------
/*
功能描述:
讀取掃描參數
返回值含義:
掃描參數值或指針, 視參數類型而定, 如int型為參數值, (char *)型則為指針
*/
void * __stdcall PlugGetParams(
struct arglist *pParams, //掃描參數鏈表
char *szName); //參數名稱
//------------------------------------------
/*
功能描述:
設置或新增檢測結果, 如直接設置檢測到的漏洞數量而不通過接口函數PlugSetVulnNum()
返回值含義:
>0: 成功
其他: 失敗
*/
int __stdcall PlugSetResult(
struct arglist *pParams, //掃描參數鏈表
char *szName, //返回值名稱
int nType, //返回值類型
void *pValue); //返回值
//------------------------------------------
/*
功能描述:
讀取檢測結果, 如直接讀取檢測到的漏洞數量而不通過接口函數PlugGetVulnNum()
返回值含義:
掃描參數值或指針, 視參數類型而定, 如int型為參數值, (char *)型則為指針
*/
void * __stdcall PlugGetResult(
struct arglist *pParams, //掃描參數鏈表
char *szName); //返回值名稱
//------------------------------------------
/*
功能描述:
設置或新增關鍵字, 如通過名稱"Host/OS"設置目標主機操作系統類型
返回值含義:
>0: 成功
其他: 失敗
*/
int __stdcall PlugSetKey(
struct arglist *pParams, //掃描參數鏈表
char *szName, //KEY名稱
int nType, //KEY類型
void *pValue); //KEY數值
//------------------------------------------
/*
功能描述:
讀取關鍵字, 如通過名稱"Host/OS"讀取目標主機操作系統類型
返回值含義:
關鍵字值或指針, 視參數類型而定, 如int型為參數值, (char *)型則為指針
*/
void * __stdcall PlugGetKey(
struct arglist *pParams, //掃描參數鏈表
char *szName); //KEY名稱
//------------------------------------------
/*
功能描述:
增加漏洞計數, 用于多線程掃描中每個線程根據掃描結果分別計數
返回值含義:
漏洞數量
*/
int __stdcall PlugAddVulnNum(
struct arglist *pParams); //掃描參數鏈表
//------------------------------------------
/*
功能描述:
直接設置檢測到的漏洞總數
返回值含義:
漏洞數量
*/
int __stdcall PlugSetVulnNum(
struct arglist *pParams, //掃描參數鏈表
int nVulnNum); //漏洞數量
//------------------------------------------
int __stdcall PlugGetVulnNum(
struct arglist *pParams); //掃描參數鏈表
//------------------------------------------
/*
功能描述:
向掃描線程隊列中增加一個線程, 如果隊列已滿, 該函數不會立即返回, 直到創建新線程完成
返回值含義:
新線程句柄
*/
HANDLE __stdcall PlugAddThread(
struct arglist *PlugParams, //掃描參數鏈表
LPTHREAD_START_ROUTINE lpStartAddress, //線程函數地址
LPVOID lpThreadParameter, //線程參數
DWORD dwTimeout); //線程超時(毫秒, INFINITE表示不限超時)
//------------------------------------------
/*
功能描述:
等待該插件中所有通過PlugAddThread()創建的線程運行完畢后返回
返回值含義:
無
*/
void __stdcall PlugWaitThread(
struct arglist *PlugParams);//掃描參數鏈表
X-Scan中使用的關鍵字及參數名稱:
以下為關鍵字名稱, 可通過PlugSetKey()設置或通過PlugGetKey()讀取:
"Host/dead"(int) - 主機無響應(非存活主機)
"Host/OS"(char *) - 操作系統類型
"Host/OSAffirmed"(int) - 操作系統類型已經確定
"ftp/anonymous"(int) - FTP服務支持匿名登錄
"ftp/login"(char *) - 可用于登錄FTP服務的用戶名
"ftp/password"(char *) - 對應于"ftp/login"的登錄密碼
"http/auth"(char *) - 可用于登錄HTTP服務的用戶名
"http/password(char *) - 對應于"http/auth"的登錄密碼
"SNMP/community"(char *) - SNMP弱口令
"SMB/login"(char *) - 可用于登錄SMB服務的用戶名
"SMB/password"(char *) - 對應于"SMB/login"的登錄密碼
"SMB/name"(char *) - 遠程主機NETBIOS名
"SMB/registry_access"(int) - 遠程主機注冊表可訪問
"SMB/workgroup"(char *) - 遠程主機工作組或域名程
"SMB/Users/<num>"(char *) - SMB用戶名
"SMB/ValidUsers/<num>/Login"(char *) - 可用的SMB用戶名
"SMB/ValidUsers/<num>/Password"(char *) - 對應于"SMB/ValidUsers/<num>/Login"的登錄密碼
"Services/www"(int) - HTTP服務端口
"Services/smtp"(int) - SMTP服務端口
"Services/ftp"(int) - FTP服務端口
"Services/ssh"(int) - SSH服務端口
"Services/http_proxy"(int) - HTTP代理服務端口
"Services/pop3"(int) - POP3服務端口
"Services/telnet"(int) - TELNET服務端口
"Services/sql_server"(int) - SQL-SERVER服務端口
以下為掃描參數名稱, 可通過PlugSetParams()設置或通過PlugGetParams()讀取:
"HostName"(char *) - 目標主機地址
"LogFile"(char *) - LOG文件名(含路徑)
"LogType"(char *) - 日志類型(TXT/HTML)
"ShowVerbose"(int) - 是否顯示詳細掃描信息
"Timeout"(int *) - 目前超時(毫秒), 若超過插件基本信息中設置的超時值, 插件將被強行終止
"MaxHosts"(int) - 最大并發主機數量
"MaxThreads"(int) - 最大線程數量
"CurrentHosts"(int *) - 當前并發主機數量
"CurrentThreads"(int *) - 所有活動線程總數量
"PluginThreads"(int *) - 插件內活動線程總數量
"NetworkTimeout"(int) - 網絡讀取超時(秒)
"SkipDestructive"(int) - 跳過破壞性腳本(針對主機)
"Network/Adapter"(char *) - 網絡適配器
"Console"(int) - 當前運行在命令行模式
"UserParams"(char *) - 用戶輸入參數
以下為掃描參數名稱, 可通過PlugSetResult()設置或通過PlugGetResult()讀取:
"VulnNumber"(int *) - 漏洞數量(建議使用接口函數設置漏洞數量)
掃描報告接口:
掃描報告插件應導出以下函數, 編譯完成后改名為Report.dll替換X-Scan目錄同名文件:
__declspec(dllexport) int __stdcall BuildReport(
char *szLogFile, //掃描過程生成的原始日志文件名
char *szReportFile, //最終生成的掃描報告文件名
char *szFormat); //用戶選擇的掃描報告類型
szLogFile: 該文件為純文本格式, 每行包含一條記錄, 記錄分兩種格式, 示例如下:
一種格式表示發現漏洞:
results|[host]|[service name] ([port]/[protocol])|[NOTE/INFO/HOLE]|[description]
例如: results|192.168.0.1|www (80/tcp)|HOLE|發現漏洞...;風險等級:高;;解決方案:...
其中[description]字段中換行由";"號代替, 生成報告文件時應做逆向轉換
另一種格式表示掃描完成的主機摘要信息:
summary|[host]|[description]
例如: summary|192.168.0.1|OS: Sun Solaris 8; PORT/TCP: 21, 23, 6000
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -