本文转自: http://ju.outofmemory.cn/entry/256317
只要从事互联网 web 开发的, 都会碰上 Web 站点被入侵的情况. 这里我把查杀的一些方法采用随记的形式记录一下, 一是方便自己以后的工作需要, 二是给其他朋友提供一些参考帮助. 写的不周的地方, 高手们不要喷, 欢迎给我提供更好的意见, 对于我个人来说也是个提高, 并表示感谢.
我们的服务器环境是 Linux, 所以, 肯定少不了用 find 这个命令, 并且需要配合 ls 命令来使用.
1, 可以查找近 3 天被修改过的文件, 并显示文件列表详细信息:
find -name "*.php" -type f -mtime -3 -exec ls -l {} \;
当然, 结果中可能会包含很多 cache 类文件, 这些文件不是我们要查找的, 那么就需要把这类文件从查询结果中排除掉, 往往 cache 文件都存放到 cache 特定的目录.
使用 -prune 参数来进行过滤, 增加排除某些目录条件的查询命令:
find . -path "/xxxxx/caches" -prune -o -name "*.php" -type f -mtime -3 -exec ls -l {} \;
注意:
(1), 要忽略的路径参数必须紧跟着搜索的路径之后, 否则该参数无法起作用.
(2), 路径结尾不要有 "/" 符号.
2, 查到可疑文件, 分析, 确定是木马后, 根据木马文件的文件信息查找更多的存放位置. 比如木马的文件名称为 "muma.php".
find . -name "muma.php" -type f -mtime -5 -exec ls -l {} \;
以上命令, 是放宽了查询时间的长度, 查询最近 5 天该名称文件的信息列表, 可以通过查看文件大小来判定是否是同样的木马文件.
看图中命令结果, 文件大小都是 "233", 则有很大的可能性是同样的木马文件, 综合修改时间判断, 最好是也 cat 一下检查核验, 以免误杀.
可以利用 find 和 ls 命令的一些更丰富的参数信息来判定分析.
可能会用到 find 命令的参数功能列表:
- find /home -size +512k #查大于 512k 的文件
- find /home -size -512k #查小于 512k 的文件
- find /home -mtime -2 # 在 / home 下查最近两天内改动过的文件
- find /home -atime -1 # 查 1 天之内被存取过的文件
- find /home -mmin +60 # 在 / home 下查 60 分钟前改动过的文件
- find /home -amin +30 # 查最近 30 分钟前被存取过的文件
- find /home -newer tmp.txt # 在 / home 下查更新时间比 tmp.txt 近的文件或目录
- find /home -anewer tmp.txt # 在 / home 下查存取时间比 tmp.txt 近的文件或目录
结合 ls 的两种时间信息:
ls -lc filename 列出文件的 ctime 是在写入文件, 更改所有者, 权限或链接设置时随 Inode 的内容更改而更改的时间.
ls -l filename 列出文件的 mtime 在写入文件时随文件内容的更改而更改的时间.
ctime 和 mtime 不一致时有可能是木马文件, 黑客有可能会修改了 mtime 时间.
3, 删除木马文件
这一步应该是进一步分析木马的入侵路径等, 但是这个过程又是另一个非常复杂的系统工程, 后边再详细说明, 暂时跳过.
find . -name "muma.php" -type f -mtime -5 -size -5k -exec rm -rf {} \;
增加一个过滤条件,-size -5k, 即文件大小小于 5k 的.
4, 查找目录下文件内容包含木马特定字符串的文件列表, 并删除处理.
- # 查找文件, 并显示文件的 ctime 时间, 比对文件信息
- find . -name "*.php" -exec grep -rl "YLbgPfj524" {
- } \; -exec ls -lc {
- } \;
- # 确认没有问题后, 删除掉
- find . -name "*.php" -exec grep -rl "YLbgPfj524" {
- } \; -exec rm -rfv {
- } \;
来源: https://www.cnblogs.com/lhdz_bj/p/10727694.html