写了个鸡肋脚本

用来检查网站文件是否被更改的脚本。

上次被挂马之后,就有想法写个小工具,不一定实用,就当写着玩了。
还缺一个本地的python或者php写的端,存储一次数据之后就可以链接这个文件检查文件是否被更改。
写这个还有个目的是想用用php的yield,yield这个写法,非常节省开销,节省内存。

当然要是真的被挂马了,发现了这个文件估计就直接给我存成json了,每次访问都是一样的233333,所以说并没有卵用

用法

GET参数:

  • sign=密码
  • wwwdir=待遍历目录
  • file=文件类型
  • config=time,len,md5

file_check.php

<?php
/**
 * 检查文件是否被更改
 */
main();
function main()
{
    //验证密码
    if($_GET['sign']!='cc096507873b40f1eccf4e26150dc0e2')
    {
        header("HTTP/1.1 404 Not Found");exit;
    }
    //设置目录
    if(isset($_GET['wwwdir']))
    {
        $wwwdir = $_GET['wwwdir'];
        $wwwdir_len = strlen($wwwdir);
    }else{
        header("HTTP/1.1 404 Not Found");exit;
    }
    //设置文件
    if(isset($_GET['file']))
    {
        $type_arr = explode(',',$_GET['file']);
    }else{
        $type_arr = ['php'];
    }
    //设置检查项
    if(isset($_GET['config']))
    {
        $config = [];
        $config_in = explode(',',$_GET['config']);
        foreach($config_in as $item)
        {
            if(in_array($item,['time','len','md5']))
            {
                $config[$item] = true;
            }else
            {
                $config[$item] = false;
            }
        }
        if(empty($config))
        {
            header("HTTP/1.1 404 Not Found");exit;
        }
    }else
    {
        $config = [];
    }

    $file_list = [];
    $count = 0;
    foreach(tree($wwwdir,$type_arr) as $file)
    {
        $file_list[$count]['file'] = substr($file,$wwwdir_len);
        if($config['time'])
        {
            $file_list[$count]['time'] = date('Y-m-d H:i:s',filemtime($file));
        }
        if($config['len'])
        {
            $file_list[$count]['len'] = filesize($file);
        }
        if($config['md5'])
        {
            $file_list[$count]['md5'] = md5_file($file);
        }
        $count++;
    }
    echo json_encode($file_list);
}

function tree($directory,$type_arr) 
{
    $all_dir = [$directory];
    while($now_dir = current($all_dir))
    {
        $mydir = dir($now_dir);
        while($file = $mydir->read())
        {
            if($file=='.' or $file=='..')
                continue;

            if(is_dir("$now_dir/$file"))
            {
                array_push($all_dir,"$now_dir/$file");
            }else
            {
                if( in_array(substr($file, strrpos($file, '.')+1),$type_arr) )
                {
                    yield "$now_dir/$file";
                }else
                {
                    continue;
                }
            }
        }
        $mydir->close();
        next($all_dir);
    }
}

提交:
file_check.php?sign=cc096507873b40f1eccf4e26150dc0e2&wwwdir=/home/yusen/backup&config=time,len,md5&file=conf

返回:

[
{
file: "/cpbackup-exclude.conf",
time: "2017-01-16 04:23:55",
len: 1,
md5: "68b329da9893e34099c7d8ad5cb9c940"
},
{
file: "/.gnupg/gpg.conf",
time: "2017-01-10 01:20:23",
len: 7856,
md5: "7a0a33ed6ad8ceba2a1cae8b0e9a7c99"
},
{
file: "/tmp/awstats/awstats.moozik.cn.conf",
time: "2017-04-29 20:14:53",
len: 23751,
md5: "ec44b97acc8f0787bf67ea655db430e3"
},
{
file: "/tmp/awstats/ssl/awstats.moozik.cn.conf",
time: "2017-04-29 20:14:53",
len: 23763,
md5: "e5040e7f77540f0a0cc9e594965fe507"
}
]
最后修改:2017 年 06 月 14 日
如果觉得我的文章对你有用,请随意赞赏