php木马webshell扫描器代码

 更新时间:2012年01月25日 22:13:19   作者:  
因为前端时间服务器被放过 所以写了个webshell扫描器 呵呵 专杀php webshell 不管大马还是小马 包括一句话 现在放出代码来
复制代码 代码如下:

<?php
/*
+--------------------------------------------------------------------------+
| Codz by indexphp Version:0.01 |
| (c) 2009 indexphp |
| http://www.indexphp.org |
+--------------------------------------------------------------------------+
*/
/*===================== 程序配置 =====================*/
$dir='cms'; //设置要扫描的目录
$jumpoff=false;//设置要跳过检查的文件
$jump='safe.php|g'; //设置要跳过检查的文件或者文件夹 $jumpoff=false 时此设置有效
$danger='eval|cmd|passthru';//设置要查找的危险的函数 以确定是否木马文件
$suffix='php|inc';//设置要扫描文件的后缀
$dir_num=0;
$file_num=0;
$danger_num=0;
/*===================== 配置结束 =====================*/
extract (GetHttpVars());
if ($m=="edit") Edit();
if ($m=="del") Delete();
if ($check=='check')
{ $safearr = explode("|",$jump);
$start_time=microtime(true);
safe_check($dir);
$end_time=microtime(true);
$total=$end_time-$start_time;
$file_num=$file_num-$dir_num;
$message= " 文件数:".$file_num;
$message.= " 文件夹数:".$dir_num;
$message.= " 可疑文件数:".$danger_num;
$message.= " 执行时间:".$total;
echo $message;
exit();
}
function GetHttpVars() {//全局变量
$superglobs = array(
'_POST',
'_GET',
'HTTP_POST_VARS',
'HTTP_GET_VARS');
$httpvars = array();
foreach ($superglobs as $glob) {
global $$glob;
if (isset($$glob) && is_array($$glob)) {
$httpvars = $$glob;
}
if (count($httpvars) > 0)
break;
}
return $httpvars;
}
function Safe_Check($dir)//遍历文件
{
global $danger ,$suffix ,$dir_num ,$file_num ,$danger_num;
$hand=@dir($dir) or die('文件夹不存在') ;
while ($file=$hand->read() )
{
$filename=$dir.'/'.$file;
if (!$jumpoff) {
if(Jump($filename))continue;
}
if(@is_dir($filename) && $file != '.' && $file!= '..'&& $file!='./..')
{ $dir_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 "<font color='green' style='font-size:14px'>可疑文件:{$filename}</font>
<a href='?m=edit&filename=$filename' target='_blank'><u>查看代码</u></a>
<a href='?m=del&filename=$filename' target='_blank'>删除</u></a><br>";
$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 "<textarea name='str' style='width:100%;height:450px;background:#cccccc;'>$content</textarea>\r\n";
exit();
}
function Delete()//删除文件
{
global $filename;
(is_file($filename))?($mes=unlink($filename)?'删除成功':'删除失败 查看权限'):'';
echo $mes;
exit();
}
function Jump($file)//跳过文件
{
global $jump,$safearr;
if($jump != '')
{
foreach($safearr as $v)
{
if($v=='') continue;
if( eregi($v,$file) ) return true ;
}
}
return false;
}
?>
<form action="" >
<input type="submit" value="开始检测" />
<input type="hidden" name="check" value="check"/>
</form>

相关文章

  • PHP中empty和isset对于参数结构的判断及empty()和isset()的区别

    PHP中empty和isset对于参数结构的判断及empty()和isset()的区别

    这篇文章主要介绍了PHP中empty和isset对于参数结构的判断及empty()和isset()的区别的相关资料,需要的朋友可以参考下
    2015-11-11
  • laravel 实现划分admin和home 模块分组

    laravel 实现划分admin和home 模块分组

    今天小编就为大家分享一篇laravel 实现划分admin和home 模块分组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 用 Composer构建自己的 PHP 框架之使用 ORM

    用 Composer构建自己的 PHP 框架之使用 ORM

    经过前三篇文章 基础准备 、 构建路由 和 设计 MVC ,我们已经得到了一个结构比较完整的 MVC 架构的 PHP 微框架,但是距离一个真正能够上手使用的框架还差一样东西: 数据库封装 ,本篇就将讲述如何集成一个 ORM Composer 包
    2014-10-10
  • php 将bmp图片转为jpg等其他任意格式的图片

    php 将bmp图片转为jpg等其他任意格式的图片

    有时候我们需要将bmp格式的图片转换为jpg或gif等格式,大家就可以参考下下面的代码。
    2009-06-06
  • PHP将字符串首字母大小写转换的实例

    PHP将字符串首字母大小写转换的实例

    下面小编就为大家带来一篇PHP将字符串首字母大小写转换的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • PHP构造二叉树算法示例

    PHP构造二叉树算法示例

    本篇文章主要介绍了PHP构造二叉树算法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • ajax在joomla中的原生态应用代码

    ajax在joomla中的原生态应用代码

    一般很少看到joomla中使用ajax,笔者以前说到过用jquery来实现,对于那些验证用户名不能重复,邮箱不能重复,以及联动菜单,等等的应用,使用ajax是免不了的
    2012-07-07
  • php插件Xajax使用方法详解

    php插件Xajax使用方法详解

    这篇文章主要为大家详细介绍了php插件Xajax的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Laravel5.4简单实现app接口Api Token认证方法

    Laravel5.4简单实现app接口Api Token认证方法

    这篇文章主要介绍了Laravel5.4简单实现app接口Api Token认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Yii中CGridView实现批量删除的方法

    Yii中CGridView实现批量删除的方法

    这篇文章主要介绍了Yii中CGridView实现批量删除的方法,实例分析了CGridView的相关设置,前台JS调用与后台Action具体功能实现的技巧,需要的朋友可以参考下
    2015-12-12

最新评论