这篇文章主要介绍了php实现Linux服务器木马排查及加固功能,本文给出了根据特征码查找、搜索最近被修改的文件、修改php.ini、修改nginx.conf等方法,需要的朋友可

网站频繁被挂马?做一些改进,基本上能把这个问题解决,因为discuz x等程序存在漏洞,被上传了websehll,每次被删除过段时间又出来了,最终查到所有的木马。

从以下几个方面查找并加强(如果能不开启会员功能,不给任何上传入口,保护好后台密码,加固好PHP,一般就没什么问题了)。

1.根据特征码查找:

php木马一般含有

复制代码 代码如下:

或者

复制代码 代码如下:

find /wwwroot/* -type f -name "*.php" |xargs grep "eval(" > /wwwroot/scan.txt

结果就查出很多明显的webshell,并且发现都藏在attachment等目录下

2.利用网上的一个php代码,搜索最近被修改的文件

scandir.php

内容如下:

复制代码 代码如下:

set_time_limit(0);//防止超时

/**

*

* php目录扫描监控增强版

*

* @author lssbing (lssbing#gmail.com)

* @date 2010-1-18

* @license BSD

* @version 1.0

*

下面几个变量使用前需要手动设置

*

**/

/*===================== 程序配置 =====================*/

$pass="12345";//设置密码

$jkdir="."; //设置监控扫描的目录,当前目录为'.',上一级目录为'..',,也可以设置绝对路径,后面不要加斜杠,默认为当前目录

$logfilename="./m.log";//设置存储log的路径,可以放置在任意位置

$exclude=array('data','images');//排除目录

$danger='eval|cmd|passthru|gzuncompress';//设置要查找的危险的函数 以确定是否木马文件

$suffix='php|inc';//设置要扫描文件的后缀

/*===================== 配置结束 =====================*/

$filename=$_GET['filename'];

$check=$_GET['check'];

$jumpoff=false;

$url = $_SERVER['PHP_SELF'];

$thisfile = end(explode('/',$url));

$jump="{$thisfile}|".implode('|',$exclude);

$jkdir_num=$file_num=$danger_num=0;

define('M_PATH',$jkdir);

define('M_LOG',$logfilename);

if ($check=='check')

{

$safearr = explode("|",$jump);

$start_time=microtime(true);

safe_check($jkdir);

$end_time=microtime(true);

$total=$end_time-$start_time;

$file_num=$file_num-$jkdir_num;

$message= " 文件数:".$file_num;

$message.= " 文件夹数:".$jkdir_num;

$message.= " 可疑文件数:".$danger_num;

$message.= " 执行时间:".$total;

echo $message;

}else{

if ($_GET['m']=="del") Delete();//处理文件删除

//读取文件内容

if(isset($_GET['readfile'])){

//输出查看密码,密码校验正确以后输出文件内容

if(emptyempty($_POST['passchack'])){

echo""

. " pass"

. " "

. ""

. " "

. ""

."";

exit;

}elseif(isset($_POST['passchack'])&&$_POST['passchack']==$pass){

$code=file_get_contents($_GET['readfile']);

echo"{$code}";

exit;

}else{

exit;

}

}else{

record_md5(M_PATH);

if(file_exists(M_LOG)){

$log = unserialize(file_get_contents(M_LOG));

}else{

$log = array();

}

if($_GET['savethis']==1){

//保存当前文件md5到日志文件

@unlink(M_LOG);

file_put_contents(M_LOG,serialize($file_list));

echo "保存成功!点击返回";

exit;

}

if(emptyempty($log)){

echo "当前还没有创建日志文件!点击[保存当前]创建日志文件!";

}else{

if($file_list==$log){

echo "本文件夹没有做过任何改动!";

}else{

if(count($file_list) > 0 ){

foreach($file_list as $file => $md5){

if(!isset($log[$file])){

echo "新增文件:".$file.""." 创建时间:".date("Y-m-d H:i:s",filectime($file))." 修改时间:".date("Y-m-d H:i:s",filemtime($file))." 源码删除

";

}else{

if($log[$file] != $md5){

echo "修改文件:".$file.""." 创建时间:".date("Y-m-d H:i:s",filectime($file))." 修改时间:".date("Y-m-d H:i:s",filemtime($file))." 源码

";

unset($log[$file]);

}else{

unset($log[$file]);

}

}

}

}

if(count($log)>0){

foreach($log as $file => $md5){

echo "删除文件:".$file."

";

}

}

}

}

}

}

//计算md5

function record_md5($jkdir){

global $file_list,$exclude;

if(is_dir($jkdir)){

$file=scandir($jkdir);

foreach($file as $f){

if($f!='.' && $f!='..' && !in_array($f, $exclude)){

$path = $jkdir.'/'.$f;

if(is_dir($path)){

record_md5($path);

}else{

$file_list[$path]=md5_file($path);

}

}

}

}

}

function Safe_Check($jkdir)//遍历文件

{

global $danger ,$suffix ,$jkdir_num ,$file_num ,$danger_num;

$hand=@dir($jkdir) or die('文件夹不存在') ;

while ($file=$hand->read())

{

$filename=$jkdir.'/'.$file;

if (!$jumpoff) {

if(Jump($filename))continue;

}

if(@is_dir($filename) && $file != '.' && $file!= '..'&& $file!='./..')

{ $jkdir_num++;

Safe_Check($filename);

}

if (preg_match_all ("/\.($suffix)/i",$filename,$out))

{

$str='';

$fp = @fopen($filename,'r')or die('没有权限');

while(!feof($fp))

{

$str .= fgets($fp,1024);

}

fclose($fp);

if( preg_match_all ("/($danger)[ \r\n\t]{0,}([\[\(])/i",$str,$out))

{

echo "可疑文件:{$filename}"." 创建时间:".date("Y-m-d H:i:s",filectime($filename))." 修改时间:".date("Y-m-d H:i:s",filemtime($filename))." 查看代码 删除

";

$danger_num++;

}

}

$file_num++;

}

}

function Edit()//查看可疑文件

{

global $filename;

$filename = str_replace("..","",$filename);

$file = $filename;

$content = "";

if(is_file($file))

{

$fp = fopen($file,"r")or die('没有权限');

$content = fread($fp,filesize($file));

fclose($fp);

$content = htmlspecialchars($content);

}

echo "$content\r\n";

exit();

}

function Delete()//删除文件

{ global $filename,$pass;

if(emptyempty($_POST['passchack'])){

echo""

. " pass"

. " "

. ""

. " "

. ""

."";

exit;

}elseif(isset($_POST['passchack'])&&$_POST['passchack']==$pass){

(is_file($filename))?($mes=unlink($filename)?'删除成功':'删除失败 查看权限'):'';

echo $mes;

exit();

}else{

echo '密码错误!';

exit;

}

}

function Jump($file)//跳过文件

{

global $jump,$safearr;

if($jump != '')

{

foreach($safearr as $v)

{

if($v=='') continue;

if( eregi($v,$file) ) return true ;

}

}

return false;

}

?>

[查看文件改动]|[保存当前文件指纹]|[扫描可疑文件]

执行后能看到最近被修改的文件,具有参加价值

3.修改php.ini,限制以下函数

复制代码 代码如下:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

linux php muma,php实现Linux服务器木马排查及加固功能相关推荐

  1. Linux _学习——Centos8惨痛教训_木马入侵

    Linux _学习--Centos8惨痛教训_木马入侵 这是第二次被木马了 !!! 今天 上传部署一个脚本,每运行一段时间就自动关闭进程,早了半天代码问题,结果是被木马了.艹蛋. 小白入门建议 :别用 ...

  2. Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败

    [Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: ...

  3. linux线程池实现多线程并发,基于Linux的多线程池并发Web服务器设计-电子设计工程.PDF...

    基于Linux的多线程池并发Web服务器设计-电子设计工程.PDF 第 卷 第 期 电子设计工程 年 月 基于 的多线程池并发 服务器设计 陈 涛 任海兰 武汉邮电科学研究院 湖北 武汉 摘要 时至今 ...

  4. linux运行隐藏文件,Linux下如何隐藏文件_网站服务器运行维护,Linux,隐藏文件

    linux系统怎样安装软件_网站服务器运行维护 linux系统安装软件的方法:1.使用apt命令进行安装,如[apt install app_name]:2.使用rpm命令进行安装,如[rpm -i ...

  5. Linux下利用rsync实现多服务器文件同步

    Linux下利用rsync实现多服务器文件同步 目标:多服务器文件同步 环境:2台centos5.6 Web端:192.168.20.20 Backup端:192.168.20.21 需要备份目录为: ...

  6. 在Linux下轻松玩转Samba服务器

    一.samba概念和功能 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Mi ...

  7. php 登录 linux服务器,如何实现linux系统远程登录到linux服务器

    linux系统登录到远程linux服务器: 有多种不同的协议可供选择,也许SSH是"最好"的.SSH是secure shell的简写,意为"安全的shell". ...

  8. Linux下的主辅DNS服务器同步

    Linux下的主辅DNS服务器同步 一.系统环境介绍 二.辅助DNS搭建 1.安装yum包 2.设置服务自启 3.编辑dns主配置文件 4.编辑区域文件 5.配置正向文件 6.配置反向文件 7.重启服 ...

  9. linux cisco路由器,怎样让linux做cisco路由器的专用日志服务器

    对于Cisco路由器日志的服务器设置,是一个很高端的问题.在使用的过程中需要不停地寻找更好的方式,但对于linux,很多人都不是很清楚.如何把linux设置成Cisco路由器日志服务器?想实现日志的统 ...

  10. Linux下Tomcat与Apache Web服务器的整合

    原文:http://os.51cto.com/art/200709/57327.htm ◆1.引言 基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以T ...

最新文章

  1. Spring AOP 增强框架 Nepxion Matrix 详解
  2. COBOL入门到精通
  3. C2065 “__m128d”: 未声明的标识符
  4. large_IPYi_09ef000018c21215
  5. go int 转char_Go语言的奇特语法,你怎么看?
  6. redis源码解读二
  7. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记24 popovers弹窗
  8. 如何在 C# 中使用 Exceptionless
  9. 一个切图仔的 CSS 笔记
  10. 漫画兔善搞2007-等待爱玛马士基号的垃圾
  11. 重新命名的linux命令,Linux 重命名命令自制详细介绍
  12. java oracle序列化_Java序列化(Serialization)的理解
  13. 学计算机不管干哪行,语言是必备的基本素质(认真学习C++)
  14. K-均值聚类算法通俗讲解
  15. 【C++ 开根号和平方运算】
  16. Linux下C++ libtorrent库使用
  17. mht2html百度云,强烈推荐国内最好的网盘–115网盘
  18. 如何批量修改文件名称
  19. python打包deb_python开发将项目打包成deb
  20. 楚留香手游服务器维护,楚留香手游3月1日更新全职业调整一览 6门派职业调整汇总...

热门文章

  1. Matrix Factorization
  2. MT5自定义均线指标(含弹窗、App、邮箱预警)
  3. 一文读懂分布式任务调度平台XXL-JOB
  4. 高旭东:科普返利网站模式,做到知己知彼放心购物!
  5. 计算机辅助工程试卷,《计算机辅助工程软件(UG)》试卷10–2答.doc
  6. mern技术栈好处?_如何开始使用MERN堆栈
  7. QQ揭秘:如何实现窗体靠边隐藏?【低调赠送:QQ高仿版GG 4.2 最新源码】
  8. 电商型网站要怎么制作?把住这三个关键点
  9. VHDL串口通信 在FPGA开发板上测试 并解决没有识别到下载接口USB_Blaster(No Hardware问题)
  10. 用 Python 发电子邮件