之前的Nessus指南中包括了如何安装和配置Nessus,以及如何运行基本的安全扫描。之前的特征都是来自可维持网络安全(Tenable Network Security)订阅提供的大型数据库。这些特征都是最新漏洞信息的来源,而且他们提供了对大部分已知存在的威胁的防御。尽管如此,还有一种情况不能通过数据库的方法解决:公司内部编写的自定义应用和已知的漏洞。
从实例开始 假设你拥有一个名为KillerApp的自定义的Web监控程序,而该程序中的文件”killerapp.asp”存在已知漏洞。在你发现该程序包含这个严重漏洞之前,它会一直在本地网络中所有的Web服务器上运……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
之前的Nessus指南中包括了如何安装和配置Nessus,以及如何运行基本的安全扫描。之前的特征都是来自可维持网络安全(Tenable Network Security)订阅提供的大型数据库。这些特征都是最新漏洞信息的来源,而且他们提供了对大部分已知存在的威胁的防御。尽管如此,还有一种情况不能通过数据库的方法解决:公司内部编写的自定义应用和已知的漏洞。
从实例开始
假设你拥有一个名为KillerApp的自定义的Web监控程序,而该程序中的文件"killerapp.asp"存在已知漏洞。在你发现该程序包含这个严重漏洞之前,它会一直在本地网络中所有的Web服务器上运行。而该漏洞将允许匿名用户关闭服务器。因此应该立即卸载该程序,但是你怀疑仍有一些服务器安装有该程序。还好这时我们可以采用Nessus攻击脚本语言(NASL)来编写一个用户Nessus“攻击”,或者一个检测程序以找到"killerapp.asp"。
首先介绍完整的NASL脚本。接着,分解这段脚本进一步分析NASL结构。下面是完整的脚本代码:
# # KillerApp check # if (description) { script_id(50000); script_name(english:"Check for KillerApp"); script_description(english:"KillerApp is a high-risk application and should be removed."); script_summary(english:"Checks for KillerApp"); script_copyright(english:"Copyright 2008, Mike Chapple"); script_category(ACT_ATTACK); script_family(english:"Denial of Service"); script_require_ports("Services/www",80); } include("http_func.inc"); include("http_keepalive.inc"); port = get_http_port(default:80); if (get_port_state(port)) { if (is_cgi_installed_ka(item:"/killerapp.asp",port:port)) { security_hole(port); } } |
NASL 脚本结构
NASL脚本可以明显地分为两部分:一部分是对项目的描述,另一部分是对攻击内容的规划。描述部分以“if(description)”语句开始,并包括之后的大括号(“{}”)间的所有内容。从名字就可以了解该部分的很多项的作用。较为重要的有:
- script_id(50000):设置脚本标识号,该标识号必须是1至99999间的唯一整数。推荐选择一个较大的数字以避免与其他Nessus检测脚本(包括用户创建以及从Nessus订阅下载的脚本)的冲突。
- script_category(ACT_ATTACK):设置检测的类别。在本例中,检测漏洞的脚本将允许黑客进行一次攻击,所以我们将其设置为ACT_ATTACK类别。再举一个例子,当NASL脚本发现可能的探测的可能性时,需要将其设置为ACT_GATHER_INFO。
- script_require_ports("Services/www",80):明确了进行成功攻击所要求的端口号。本例中,攻击只能在Web服务器运行于80端口的目标系统上进行。
脚本的其他部分定义了攻击代码。下面将逐行进行分析:
- port = get_http_port(default:80):检测Web服务器是否运行在80端口。
- if (get_port_state(port)):这是一个开始的if语句,它规定包含在大括号中的代码只在端口开放时运行。
- if (is_cgi_installed_ka(item:"/killerapp.asp",port:port)):‘is_cgi_installed_ka’函数检测某个项是否存在于Web服务器中。本例中,我们检测文件killerapp.asp是否存在于服务器的根目录下。
- security_hole(port):如果文件不存在,则报告一个安全漏洞。
使用自定义脚本
执行自定义脚本有两种方法:从命令行运行nasl.exe独立工具,或者把它包括到Nessus扫描中。
在命令行运行的语法是:
nasl.exe –t<IP><script> |
例如,如果想对位于192.168.1.1的Web服务器运行killerapp.nasl,可以执行:
nasl.exe -t 192.168.1.1 "C:Program FilesTenableNessuspluginskillerapp.nasl" |
如果这个脚本返回一个漏洞,就会输出如下的“成功”数据:
[Wed Jun 11 19:08:58 2008][5832] Only Ethernet is supported for now (type of {07 061642-1076-44D2-9D72-6C7BC3022BCF} = 71) C:Program FilesTenableNessuspluginskillerapp.nasl: Success |
或者,NASL检测脚本可以包含在一个标准的Nessus扫描中,只需要在Nessus文件夹的‘插件程序(plug-ins)’目录中加入这个文件。然后你就会发现当配置Nessus扫描时,你就可以在检测脚本中使用。
了解更多NASl
NASL是一种相当简单的脚本语言,但是它确实包含一些内置功能,可以帮助你定义自己的脚本。如果要了解更权威的NASL的参考资料,请查看Nessus网站上的NASL参考指南。
作者
Mike Chapple, CISSP,University of Notre Dame的IT安全专家。他曾担任国家安全局和美国空军的信息安全研究员。Mike经常为SearchSecurity.com撰稿,是《信息安全》杂志的技术编辑。
翻译
相关推荐
-
当我们谈Web应用安全的时候 主要谈哪些(下)
在本文中,主要介绍了业界几个需要被着重考虑的Web应用程序的安全问题:SQL注入、表格和脚本以及Cookies和会话管理。
-
当我们谈Web应用安全的时候 主要谈哪些(上)
在本文中,主要探讨Web应用程序的安全性,主要包括漏洞攻击者如何利用不安全的Web应用程序来危害整个服务器或者破坏一个网站、以及开发人员如何避免引入这些漏洞。
-
如何使用Nessus扫描漏洞
Nessus是一个功能强大而又易于使用的远程安全扫描器,它采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况,而且还是免费的。
-
如何处理网络渗透测试结果
不要以为通过了企业网络渗透测试就大功告急了,后面的重头戏才刚刚开始,本文将详细阐述如何对渗透测试的结果数据进行分析和处理……