📄 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 + -