当前位置:首页 > 探索

php一句话木马

php一句话木马,话木说白了就是话木一段极短的PHP代码,能让你通过HTTP请求远程执行任意命令。话木圈内人管它叫“webshell”里的话木轻骑兵,短小精悍,话木一个eval($_POST['x'])就够用。话木别小看这十几个字符,话木它能在目标服务器上撬开一道门,话木门后是话木整台机器的控制权。

我第一次接触这东西是话木在一个攻防演练里。客户的话木内网系统被扫出个上传点,管理员以为补了后缀名过滤就万事大吉。话木结果攻击者上传了个.php文件,话木内容只有<?话木php @eval($_POST['cmd']);?>,然后拿着蚁剑(一款GUI管理工具)像逛自家后院一样,话木把数据库配置、源码备份、甚至内网段拓扑全拖走了。整个过程不到十分钟,日志里只有几条POST记录,混在正常流量里毫不起眼。

为什么它这么难防?核心在于PHP的灵活性和服务器配置的疏忽。比如allow_url_include开着,配合data://协议,一行代码都不用落地就能执行;或者利用preg_replace的/e修饰符,老版本PHP里直接代码注入。更骚的是,有人把木马藏进图片的EXIF信息里,用exif_read_data读取再eval,文件后缀是.jpg,但本质还是那句话。

真正让我觉得棘手的是“不死马”——它会在内存里常驻,不断生成新的木马文件,你删一个它生十个。有次应急响应,我清完文件系统,过五分钟再扫,又冒出来一堆。最后只能重启PHP-FPM进程才断掉源头。这玩意儿就像蟑螂,踩死一只,角落里还有一窝。

当然,写这个不是为了教人干坏事。搞安全的都知道,不了解攻击手段,防守就是纸上谈兵。我见过太多企业买了一堆防火墙,却连最基本的disable_functions都没配——把exec、shell_exec、system这些高危函数禁掉,一句话木马就算打进来也多半哑火。再配合文件读写权限的严格收紧,Web目录只给读和执行的权限,它想写文件都费劲。

还有个细节容易被忽略:日志审计。多数攻击者会伪造User-Agent或者Referer来混淆视听,但POST数据里的特征字符串,比如eval、base64_decode,只要在Nginx或Apache层加个关键字过滤规则,就能拦下大半脚本小子的尝试。真正的高手则会把参数加密,或者拆分成多个请求分片传输,那就得靠行为分析了——比如某个IP在短时间内频繁POST到同一个不存在的文件路径,这本身就是个信号。

说句掏心窝的话,我见过最蠢的运维把木马文件命名成1.php.bak,以为加个.bak后缀就安全了。Apache的AddHandler配置不当,照样会被解析执行。所以别指望靠改文件名苟活,老老实实做纵深防御:入口处过滤上传类型,中间层禁用危险函数,底层做文件完整性监控。三层都做到,一句话木马基本就废了。

最后提个醒,如果你真的在服务器里发现这类文件,别急着删——先拍快照,保留现场,然后顺着日志查入侵路径。有时候木马只是个诱饵,真正的后门藏在计划任务或者SSH公钥里。你只拔掉一根草,根还在土里。

分享到: