攻擊者在入侵網站后,常常會通過惡意劫持流量來獲取收益,從而實現流量變現。有一些黑帽劫持的手法堪稱防不勝防,正常的訪問行為很難發現異常。今天給大家分享一下常見的網站劫持手法和排查思路。
我們可以按照基於不同隱藏目的的常見劫持手法,來做一個簡單的分類:
1、將爬蟲與用戶正常訪問分開,實現搜索引擎快照劫持
2、將移動端與PC端的訪問分開,實現移動端的流量劫持
3、根據用戶訪問來源進行判斷,實現特定來源網站劫持
4、如果獲取管理員的真實IP地址,實現特定區域的流量劫持
5、按照訪問時段/關鍵詞進行不同的設置,實現特定路徑/關鍵詞/時間段的流量劫持
基於以上,實現的方式有很多種,比如客戶端js劫持、服務端代碼劫持、301重定向、惡意反向代理、IIS模塊劫持等。
01、客戶端js劫持
在網頁中插入js腳本,通過js進行url跳轉,一般情況下,會通過js混淆加密來增加識別難度。
如下:通過js劫持從搜索引擎中來的流量。
<script>var s=document.referrer; if(s.indexOf("baidu")>0||s.indexOf("soso")>0||s.indexOf("google")>0||s.indexOf("yahoo")>0||s.indexOf("sogou")>0||s.indexOf("youdao")>0||s.indexOf("bing")>0){self.location='http://www.xxxx.com'; }</script>
排查思路:查看網頁源代碼或者抓包分析http流量,找到源代碼中插入的js代碼,刪除js代碼后恢復。
02、服務端代碼劫持
網站源碼被篡改,在首頁或配置文件中引入惡意代碼。
如下:通過判斷User-agent與Referer,進行快照劫持。
<?php error_reporting(0); //判斷是否為百度蜘蛛,然后進行內容劫持 if(stripos($_SERVER["HTTP_USER_AGENT"],"baidu")>-1){ $file = file_get_contents('http://www.baidu.com'); echo $file; exit; } //判斷是否來自百度搜索,然后進行url跳轉 if(stristr ($_SERVER['HTTP_REFERER'],"baidu.com")) { Header("Location: http://www.baidu.com/");//指定跳轉 exit; } ?>
排查思路:查看網站首頁引入了哪些文件,依次訪問相關的文件源碼,確認可疑的代碼,去除包含文件后恢復。備份網站源碼及文件完整性驗證非常重要,可以幫助我們在上萬行的代碼中快速找到惡意代碼。
03、nginx反向代理劫持
以前遇到過一個網站做了網頁防篡改,無法通過修改網站源碼劫持,攻擊者通過修改nginx的配置文件,通過正則匹配url鏈接,配置proxy_pass代理轉發實現url劫持。
location ~ /[0-9a-z]+sc { proxy_pass https://www.xxxx.com/; }
排查思路:總結url劫持規律,中間件配置文件也是需要關注的位置。
04、利用301重定向劫持
通過HTTP重定向實現301劫持,可以檢查網站根目錄下的配置文件web.config,確認是否有相關設置。
<httpRedirect enabled="true" destination="http://xxxx.com/1.php" childOnly="true" httpResponseStatus="Permanent" />
05、IIS惡意模塊劫持
這種手法相對比較隱蔽,網站目錄中查不到webshell和掛馬頁面,但使用特定的路徑、Referer或者UA訪問,頁面會加載暗鏈。
排查思路:排查加載的異常dll文件,如沒有簽名、創建時間不匹配需重點關注。可使用火絨劍或Process Monitor協助排查。