曾遭遇服务器被挂马或被黑的朋友,想必都了解:黑客入侵Web服务器的首要目标,往往是上传一个Webshell——一旦得手,后续操作空间极大。网站被植入木马后,许多站长往往手足无措,不知从何排查。其实,事情并没有想象中复杂。本文以PHP环境为例,分享几个实用排查技巧,希望能为您提供帮助。
首先,梳理一下排查思路。若服务器确实被上传了Webshell,必然会留下一些痕迹,例如PHP文件的修改时间戳。假设网站最后一次更新是在10天前,我们可以重点查找这10天内生成或修改的PHP文件,命令如下:
find /var/webroot -name "*.php" -mtime -10
简单说明:
/var/webroot 为网站根目录,-name "*.php" 表示匹配所有PHP文件,-mtime -10 表示筛选最近10天内修改过的文件。
如果文件修改时间不确定,不妨换一种思路——通过关键词搜索来定位。要保证查得准确,需先熟悉Webshell中常见的关键字。这里列举一些常用的,其余可自行从网上收集Webshell样本,逐步总结出个人专属的关键字库。以下是比较有代表性的几个:
eval, shell_exec, passthru, popen, system
查找方法如下:
find /var/webroot -name "*.php" |xargs grep "eval" |more
find /var/webroot -name "*.php" |xargs grep "shell_exec" |more
find /var/webroot -name "*.php" |xargs grep "passthru" |more
当然,也可以将结果直接导出到文件中,下载后逐条分析:
find /home -name "*.php"|xargs grep "fsockopen"|more >test.log
此处不再一一罗列,如果您已拥有自己总结的关键词,直接替换到命令中即可。
需要注意的是,并非所有查询到的文件都是Webshell,仍需自行判断。判断方法并不复杂:直接在浏览器中访问该文件,或与您收集的Webshell样本进行比对。经验积累多了,基本一眼就能识别是否为Webshell。
