使用Nessus攻击脚本语言寻找程序漏洞

日期: 2008-10-09 作者:Mike Chapple翻译:Tina Guo 来源:TechTarget中国 英文

之前的Nessus指南中包括了如何安装和配置Nessus,以及如何运行基本的安全扫描。之前的特征都是来自可维持网络安全(Tenable Network Security)订阅提供的大型数据库。这些特征都是最新漏洞信息的来源,而且他们提供了对大部分已知存在的威胁的防御。尽管如此,还有一种情况不能通过数据库的方法解决:公司内部编写的自定义应用和已知的漏洞。

  从实例开始   假设你拥有一个名为KillerApp的自定义的Web监控程序,而该程序中的文件”killerapp.asp”存在已知漏洞。在你发现该程序包含这个严重漏洞之前,它会一直在本地网络中所有的Web服务器上运……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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
Mike Chapple

Mike Chapple, CISSP,University of Notre Dame的IT安全专家。他曾担任国家安全局和美国空军的信息安全研究员。Mike经常为SearchSecurity.com撰稿,是《信息安全》杂志的技术编辑。

翻译

Tina Guo
Tina Guo

相关推荐