NASL脚本编写教程

发布时间 : 星期二 文章NASL脚本编写教程更新完毕开始阅读

3.1.只在必要时运行

对于优化脚本,最有效的方法是告诉nessusd服务器什么时候不要启动它。例如,假设你 的脚本需要建立到远程主机123/TCP端口的连接,如果nessusd知道这个端口已经被关闭 ,就没有必要启动你的脚本了。script_require_ports()、script_require_keys()和s cript_exclude_keys()就是用来实现上述目的。这些脚本需要在描述部分调用: script_require_ports(,,...)

参数中的至少一个端口开放才启动脚本。参数可以是数字,也可以是基本信息(KB)中定 义的符号,例如:\。注意:如果端口的状态是未知的(例如:还没有进行 过端口扫描),这个脚本也会执行。 script_require_keys(,,...)

只有参数中的关键词在基本信息(KB)都有定义时,才执行脚本。例如: script_require_keys(\

表示只有远程FTP主机支持匿名用户以及存在可以写的目录时,才启动当前脚本。 script_exclude_keys(,,...)

参数表示的关键词至少有一个在基本信息(KB)中有定义,才执行当前脚本。 3.2.充分利用其它脚本的结果

充分利用基本信息拷贝中的信息,可以使脚本更高效。例如,如果在调用open_sock_tc p()函数之前,先调用get_port_state()函数,就可以避免由于目标端口是关闭的带来的 时间上的浪费。 4.如何分享你的新脚本

如果你想让别人分享自己的成果,在编写测试脚本时要遵循以下原则: 你的脚本不能存在任何与用户交互的操作

NASL安全测试脚本是在服务器端运行的,因此用户看不到任何的输出信息。 一个脚本只能测试一个漏洞

如果你知道如何测试好几个漏洞,那就为每个漏洞都编写自己的测试脚本。 你的脚本最好归入现有的种类

如果你计划分享自己的成果,最好避免建立Joe's Power Tools这样的新插件种类,尽量 把插件划入已有的插件种类。 查询CVE中是否有相关漏洞的定义

如果你能够注意脚本的兼容性,可以节省Nessus维护者的很多时间。 把成果发给Nessus维护者

Nessus的维护者就是本文的作者。如果你不象独享自己的成果,就把它发给Nessus维护 者。如果你的脚本被采用,它就会被分配一个唯一的ID。 5.结论

希望你能够喜欢这个教程。学习这个语言不会占用你太多的时间,你需要多多练习。在 使用过程中,你会发现NASL解释器的一些BUGS,希望你能够及时把这些BUGS报告给我。

附录A.基本信息(Knowledge base)

所谓的基本信息是一些关键词,里面包含其它测试插件获得的信息。使用script_depen dencies()、get_kb_item()和set_kb_item()函数,可以帮助你避免没有必要的重复测试 。附录A中将罗列出这些关键词。

在基本信息(KB)中,每个项可以有几个值。例如,远程主机运行两个FTP服务:一个在端 口21,另一个在端口2100。这样关键词Services/ftp就等于21和2100两个端口。在这种 情况下,测试脚本将执行两次:第一次,get_kb_item(\函数将返回21,

第二次这个函数将返回2100。不过,这是自动进行的,无须人工干预。对于脚本编写者 来说,相当于每个基本信息关键词只有一个值。

有些关键词目前没有多大用处,好多我就没有用过,但是有备无患。 Host/OS

定义文件:queso.nasl、nmap_wrapper.nasl 类型:字符串

含义:远程操作系统的类型 Host/dead

定义文件:ping_host.nasl和所有的DoS插件 类型:boolean

含义:远程主机关闭。如果这个项被设置,nessusd将终止针对这个主机的所有测试。 Services/www

定义文件:find_service.nes 类型:端口号

含义:目标主机WEB服务器监听的端口号。如果没有发现WEB服务器,就返回0。 Services/auth

定义文件:find_service.nes 类型:端口号

含义:identd服务使用的端口。如果没有这个服务,就返回0。 Services/echo

定义文件:find_service.nes 类型:端口号

含义:echo服务使用的端口。如果没有这个服务,就返回0。 Services/finger

定义文件:find_service.nes 类型:端口号

含义:finger服务使用的端口。如果没有这个服务,就返回0。 Services/ftp

定义文件:find_service.nes 类型:端口号

含义:ftp服务使用的端口。如果没有这个服务,就返回0。 Services/smtp

定义文件:find_service.nes 类型:端口号

含义:smtp服务使用的端口。如果没有这个服务,就返回0。 Services/ssh

定义文件:find_service.nes 类型:端口号

含义:ssh服务使用的端口。如果没有这个服务,就返回0。 Services/http_proxy 定义文件:find_service.nes 类型:端口号

含义:HTTP代理服务使用的端口。如果没有这个服务,就返回0。 Services/imap

定义文件:find_service.nes 类型:端口号

含义:imap服务使用的端口。如果没有这个服务,就返回0。 Services/pop1

定义文件:find_service.nes 类型:端口号

含义:pop1服务使用的端口。如果没有这个服务,就返回0。 Services/pop2

定义文件:find_service.nes 类型:端口号

含义:pop2服务使用的端口。如果没有这个服务,就返回0。 Services/pop3

定义文件:find_service.nes 类型:端口号

含义:pop3服务使用的端口。如果没有这个服务,就返回0。 Services/nntp

定义文件:find_service.nes 类型:端口号

含义:nntp服务使用的端口。如果没有这个服务,就返回0。 Services/linuxconf

定义文件:find_service.nes 类型:端口号

含义:linuxconf服务使用的端口。如果没有这个服务,就返回0。 Services/swat

定义文件:find_service.nes 类型:端口号

含义:SWAT服务使用的端口。如果没有这个服务,就返回0。 Services/wild_shell 定义文件:find_service.nes 类型:端口号

含义:shell服务使用的端口。如果没有这个服务,就返回0。 Services/telnet

定义文件:find_service.nes 类型:端口号

含义:telnet服务使用的端口。如果没有这个服务,就返回0。 Services/server

定义文件:find_service.nes 类型:端口号

含义:realserver服务使用的端口。如果没有这个服务,就返回0。 Services/netbus

定义文件:find_service.nes 类型:端口号

含义:NetBus服务使用的端口。如果没有这个服务,就返回0。 bind/version

定义文件:bind_version.nasl 类型:字符串

含义:远程BIND监控程序的版本 rpc/bootparamd

定义文件:bootparamd.nasl 类型:字符串

含义:bootparam RPC服务正在运行 Windows compatible

定义文件:ca_unicenter_file_transfer_service.nasl、ca_unicenter_transport_se rvice.nasl、mssqlserver_detect.nasl和windows_detect.nasl 类型:boolean

含义:远程主机好象运行一种Windows兼容操作系统(只有相关的端口开放才进行这个测 试)

finger/search.**@host 定义文件:cfinger_search.nasl 类型:boolean

含义:使用**进行finger查询能够得到用户列表。 finger/0@host

定义文件:finger_0.nasl 类型:boolean

含义:使用0进行finger查询能够得到用户列表 finger/.@host

定义文件:finger_dot.nasl 类型:boolean

含义:使用.进行finger查询能够获得用户列表 finger/user@host1@host2 定义文件:finger_0.nasl 类型:boolean

含义:finger监控程序能够用于重定向攻击 www/frontpage

定义文件:frontpage.nasl 类型:boolean

含义:远程WEB服务器使用frontpage扩展 ftp/anonymous

定义文件:ftp_anonymous.nasl 类型:boolean

含义:远程FTP服务器可以匿名登录 ftp/root_via_cmd

定义文件:ftp_cwd_root.nasl 类型:boolean

含义:使用CWD命令可以获得远程FTP服务器的root权限。参看CVE-1999-0082 ftp/microsoft

定义文件:ftp_overflow.nasl 类型:boolean

含义:远程主机是Micro$oft FTP服务器,不能处理太长的参数 ftp/false_ftp

定义文件:ftp_overflow.nasl 类型:boolean

含义:远程主机经过TCP封装,或者FTP端口开放而连接关闭。 附录B.nasl工具

libnasl软件包中有一个单独的解释器nasl,可以用于脚本的调试。更多细节可以参考m an nasl。

联系合同范文客服:xxxxx#qq.com(#替换为@)