?上周末窍帝,朋友網(wǎng)站(www.x.com)被入侵,百度上搜出許多博彩頁面诽偷。印象中他網(wǎng)站不是第一次被入侵坤学,上次被入侵還是半年前了。朋友的安全服務商來應急后并未徹底清除后門报慕。在答應請客吃飯后決定幫看看深浮。
?網(wǎng)站是用phpcms搭建,版本是phpcms v9眠冈。先來看一下網(wǎng)站上收集到的信息飞苇,第一個就是網(wǎng)站某個php文件被插入了 require '/tmp/.app/phpcms';
,根據(jù)這個路徑看了下內(nèi)容,就是博彩頁面內(nèi)容布卡,看上去還是一套phpcms 應用雨让,隨機產(chǎn)生頁面,并只對搜索引擎有效忿等。
?第二個是在caches 目錄下發(fā)現(xiàn)了webshell 暫且叫做houmen.php栖忠,用stat查看了下時間信息,并截圖記錄(習慣上)贸街,隨后就備份了下娃闲,刪除了后門∝依耍看后門時間應該是半年前那次的皇帮,沒有刪除。刪除后門后蛋辈,開始瀏覽其他信息属拾。再次瀏覽網(wǎng)站目錄的時候發(fā)現(xiàn)后門神奇的生成了。搜了下這段時間的access日志冷溶,沒有POST請求渐白,日志中沒有關鍵詞。刪除后門后逞频,沒過一小時又生成纯衍。
?針對這種情況,第一時間想到用inotify來監(jiān)控看下生成文件前后還有哪些文件被訪問到苗胀。使用inotifywait 進行監(jiān)控襟诸,當后門再次出現(xiàn)時inotify 并未給出滿意答案』可能由于php那個緩存機制導致inotify未監(jiān)控到php文件的調(diào)用順序歌亲。
?嘗試全站搜索字符串,并未搜到后門信息澜驮,猜測后門信息可能在數(shù)據(jù)庫內(nèi)陷揪。
?linux除了inotify 還有auditd 工具,不光能監(jiān)控文件杂穷,還能監(jiān)控系統(tǒng)調(diào)用悍缠,使用auditctl添加規(guī)則后,可以看houmen.php生成時整個php調(diào)用流程耐量。根據(jù)auditd輸出信息提取路徑得到具體調(diào)用流程如下:
網(wǎng)站目錄/phpcms/base.php
網(wǎng)站目錄/.htaccess
網(wǎng)站目錄/index.php/.htaccess
網(wǎng)站目錄/index.php
網(wǎng)站目錄/phpcms/base.php
網(wǎng)站目錄/phpcms/libs/functions/global.func.php
網(wǎng)站目錄/phpcms/libs/functions/extention.func.php
網(wǎng)站目錄/phpcms//libs/functions/autoload
網(wǎng)站目錄/phpcms/libs/functions/autoload/plugin.func.php
網(wǎng)站目錄/phpcms/libs/functions/autoload/video.func.php
網(wǎng)站目錄/caches/configs/system.php
網(wǎng)站目錄/phpcms/libs/classes/application.class.php
網(wǎng)站目錄/phpcms/libs/classes/param.class.php
網(wǎng)站目錄/caches/configs/route.php
網(wǎng)站目錄/phpcms/modules/formguide/index.php
網(wǎng)站目錄/phpcms/model/sitemodel_model.class.php
網(wǎng)站目錄/phpcms/libs/classes/model.class.php
網(wǎng)站目錄/phpcms/libs/classes/db_factory.class.php
網(wǎng)站目錄/caches/configs/database.php
網(wǎng)站目錄/phpcms/libs/classes/mysql.class.php
網(wǎng)站目錄/phpcms/model/sitemodel_field_model.class.php
網(wǎng)站目錄/phpcms/libs/classes/cache_factory.class.php
網(wǎng)站目錄/phpcms/libs/classes/cache_file.class.php
.....
網(wǎng)站目錄/caches/houmen.php
?這里根據(jù)auditd給出的目錄飞蚓,從目錄中看到caches字樣,猜測這大概是黑客利用cache功能寫的后門拴鸵,后邊的日志分析階段證實了這個猜測玷坠。
根據(jù)auditd給出的后門創(chuàng)建時間,到web的access 日志里去查看相應時間的日志:
以下日志為手動生成日志劲藐,僅供說明原理
243.125.71.46 - - [25/Mar/2019:20:10:20 +0800] "GET /houmen.php HTTP/1.1" 404
243.125.71.46 - - [25/Mar/2019:20:10:20 +0800] "/index.php?m=formguide&c=index&a=show&formid=1&siteid=1 HTTP/1.1" 200 400
243.125.71.46 - - [25/Mar/2019:20:10:26 +0800] " GET /houmen.php HTTP/1.1" 200 40023
243.125.71.46 - - [25/Mar/2019:20:10:32 +0800] "GET /?gid=83157124407 HTTP/1.1" 200 40023
243.125.71.46 - - [25/Mar/2019:20:10:40 +0800] "GET /?ctid=89110007864 HTTP/1.1" 200 40023
243.125.71.46 - - [25/Mar/2019:20:10:46 +0800] "GET /?ctid=98816131019 HTTP/1.1" 200 40023
?通過日志可以看到八堡,黑客訪問了index.php?m=formguide&c=index&a=show&formid=1&siteid=1這個路近后生成后門。結(jié)合前面的cache信息可以猜測數(shù)據(jù)庫某個跟cache相關表里有formid=1 并且siteid=1的數(shù)據(jù)記錄里包含后門信息聘芜。用mysql數(shù)據(jù)庫連接軟件連上后在x_model 這個表里發(fā)現(xiàn)
?這里的modelid應該就是formid了兄渺,修改了setting信息,試了試這里確實是生成后門的內(nèi)容汰现。phpcms把數(shù)據(jù)庫里內(nèi)容當做php執(zhí)行挂谍,這種做法不妥,至少得加惡意代碼過濾瞎饲,不仔細找后門口叙,不容易發(fā)現(xiàn),留的后相對文件后門來說隱秘性更高嗅战。
?刪除后門妄田,刪除數(shù)據(jù)庫里保存的后門,后續(xù)觀察吧驮捍,安全這事疟呐,是個持續(xù)過程。