前言
不想當將軍的士兵不是好士兵,不想getshell的Hacker不是好Hacker~
有時候我們在做攻防對抗時經常會碰到可以上傳webshell的地方,但是經常會被安全狗、D盾、護衛神、雲鎖等安全軟件查殺,在本篇文章中將會介紹一些常用的木馬免殺技巧,主要針對安全狗、護衛神、D盾進行免殺~
查殺軟件
D盾
D盾是一個專門為IIS設計的主動防御的安全性保護軟件,它采用以內外防護的方式防止服務器和網站被人入侵,它秉持在正常運行各類網站的情況下,越少的功能,服務器就越安全的理念而設。它具有一句話木馬查殺、主動后門攔截、Session保護、CC攻擊防御、網頁篡改查詢、WEB嗅探防御、SQL注入防御、XSS攻擊防御、提權防御、惡意文件上傳防御、未知0Day防御等特性。
安全狗
安全狗是一款安全防護軟件,它提供木馬查殺、漏洞防御、非法請求攔截等功能,致力於保護網站和服務器的安全。它具有應用防護WEB應用風險、攔截各類SQL注入、XSS攻擊防御、0Day攻擊防御、特定資源保護、網絡木馬文件、惡意畸形文件、0Day漏洞、黑鏈等特性。
護衛神
護衛神是一款以分離權限為基礎,通過一系列獨特技術手段,保障網站不被入侵的安全性防護軟件。它適用於各類ASP和PHP編寫的程序,在目前網站日益猖狂的掛馬、入侵情況下,護衛神可以徹底解決用戶所面臨的眾多安全難題,為網絡安全保駕護航。 它具有實時木馬程序查殺、網站掛馬攔截、文件篡改保護、PHP拒絕服務攻擊防御、SQL防御、XSS跨站攻擊防御、入侵攔截防護、遠程桌面安全保護等特性。
免殺基礎
免殺需求
因為設計的木馬的最終目的在發現目標網站有上傳漏洞時可以將木馬上傳到目標服務器上並且可以遠程訪問實現遠程控制,然而一些網站都會有安全狗、D盾、安騎士、護衛神、雲鎖等防護軟件可以對一些Webshell進行查殺,那么要想使用Webshell進行遠控就需要實現免殺,以此來躲避木馬查殺工具的檢查。
查殺技術
目前主流的木馬查殺方法有:靜態檢查、動態檢測、日志檢查三種方式。
a、靜態檢查通過匹配特征碼、危險函數和木馬特征值來查殺木馬程序,它的特點是快速方便,對已知的木馬程序查找准確率較高,它的缺點是誤報率較高,無法查找0Day型的木馬程序,而且容易被繞過。
b、動態檢測通過木馬程序的動態特征來檢測,當木馬程序被上傳到服務器上后,攻擊者總會去執行它,當木馬程序被執行時所表現出來的特征就是所謂的動態特征。
c、日志檢測則主要通過日志分析檢測技術來實現,它主要通過分析大量的日志文件並建立請求模型來檢測出異常文件。它的優點為當網站上的訪問量級達到一致值時,這種檢測方法具有比較大參考性價值。它的缺點則是存在一定誤報率,對於大量的日志文件,檢測工具的處理能力和效率都會變的比較低。
免殺技巧
木馬程序可以使用多種編程語言來設計,不同的編程語言有不同特性以及提供的系統函數,所以在實現免殺時可以首先考慮靈活運用語言的特性來實現免殺,其次可以根據查殺軟件的查殺規則來重構木馬程序,躲避木馬查殺工具的查殺,同時可以考慮密碼學中的加密解密對源木馬程序進行加密解密處理,以此來躲避木馬查殺工具的檢查。木馬免殺技術的核心在於“靈活多變”。
免殺實戰—小馬免殺
引用免殺
因為D盾、安全狗、護衛神會對關鍵字eval中的執行變量進行溯源,當追溯到要執行的變量為一個通過POST接收的可疑數據時就會顯示可疑木馬,為了躲避這種溯源方式,可以通過多次使用&來引用前一個變量,通過一連串的賦值操作最后將要執行的內容與反引號拼接后傳入eval實現免殺,具體實現如下所示:
之后使用D盾查殺一下看看:
發現還是被查殺到了,這時候b有給a說了:"喂,上面的a,我們換換位置唄~",於是a無奈的說:"為啥受傷的總是我呢?"
之后a對b說:"你看,不行吧?換了也沒戲",之后b皺了皺眉說:"不急,我們來再拉一下伙伴——反引號,讓他幫幫忙":
果然,b小哥說的還是有點門道的哦,從上面的結果中可以看到成功免殺了,之后再來看看安全狗——成功免殺
護衛神——成功免殺
至此,D盾、安全狗、護衛神已成功免殺,之后我們來看看可用性:
可變變量
可變變量是PHP中一種較為獨特的變量,它可以動態的改變一個變量的名稱,這種特性可以用於木馬免殺中。首先可以定義一個變量$do並為其賦值為todo,之后將木馬內容賦值給可變變量$$do,最后在調用eval函數執行時將執行對象定義為$todo即可,具體實現如下所示:
之后使用D盾查殺一下看看:
發現不行哦,那么怎么辦呢?幸好今天"反引號"大哥來串門,不妨讓他來幫個忙:
發現成功免殺,之后我們再使用安全狗查殺一下看看————成功免殺
護衛神————成功免殺
至此,成功免殺安全狗、護衛神、D盾,之后我們試試可用性:
二維數組
在免殺時我們可以考慮見要執行的一句話木馬程序放到數組中執行達到繞過的目的,例如:
之后我們使用D盾進行查殺————成功免殺
之后我們使用安全狗進行查殺————成功免殺
之后我們使用護衛神進行查殺:
oh, My God!護衛神這么強悍的嗎???好不容易過了D盾、安全狗的查殺檢測,走到最后一步卻被護衛神給查殺了.....,那么怎么繞呢?既然一維數組不行,那么我就來個二維數組,哼:
之后再次使用護衛神查殺
還是被查殺到了,那么怎么辦呢?變量$a給變量$b說:"我們不妨換換位置?",變量$b只好帶着"試一試"的心態回復"換就換唄,反正就那樣....":
"竟然成功免殺了?",變量$b帶着痴呆的表情說到。
之后我們再次使用D盾進行查殺————成功免殺:
之后再次使用安全狗查殺————成功免殺
至此,成功免殺D盾、安全狗、護衛神,那么來看看可用性:
數組交集
在做免殺研究是,發現我們可以通過數組的交集來獲得我們想要的值,之后將其利用到木馬程序的構造當中,例如:
至於設計原理上面的注釋中想必已經說得很是詳細了,這里就不再一一復述了,下面我們使用D盾進行查殺看看——免殺
之后使用安全狗查殺看看————成功免殺
之后使用護衛神查殺看看————成功免殺
至此,D盾、安全狗、護衛神成功免殺,下面試試可用性:
回調函數
array_map() 回調函數會返回用戶自定義函數作用后的數組。array_map() 函數具體使用方法和參數說明如下:
在這里我們可以先定義一個函數test,其中第一個參數$a用作回調函數名稱,第二個參數$b用作回調函數的參數,之后將其傳遞給array_map()函數進行執行,之后我們在外部調用test函數,同時傳入我們的回調函數名稱和回調函數的參數:
之后使用D盾進行查殺————成功免殺
之后使用安全狗查殺————成功免殺
之后使用護衛神查殺————成功免殺
至此,成功免殺D盾、安全狗、護衛神,之后我們使用菜刀連接試試看是否可以正常使用:
免殺實戰—大馬免殺
加密&混淆
在免殺處理的眾多方法中,加密免殺算是一種常用的技巧,常見的加密方式有rot13、base64加解密,下面我們使用base64來進行免殺研究,首先我們需要一個shell.php的PHP大馬:
之后我們需要使用encode.php對上面的大馬程序進行一次base64加密處理,encode.php代碼如下:
之后我們在瀏覽器中訪問encode.php即可實現對shell.php大馬程序的加密處理:
PS:因為木馬程序源代碼中含有很多敏感的操作,而且有很多容易被查殺到的關鍵詞,所以后續的免殺都是在加密處理的基礎上進行的分析與研究
之后我們使用D盾先來一波查殺看看:
從上面的查殺結果可以看到這里威脅級別為"5",而且報"加密后門"的警告,這里應該是D盾檢測到了關鍵字"base64_decode",所以我們這里需要做一個簡單的混淆處理:
通過以上處理之后發現處理后的木馬程序躲避了D盾的查殺,但是被安全狗檢測到了:
經過分析發現被查殺的原因是eval函數執行了一個解密后的內容,為了躲避查殺,這里可以通過將解密后的內容賦值給一個變量,之后通過使用反引號拼接變量然后再讓eval去執行的方式躲避查殺,具體實現如下所示:
可以發現成功免殺,之后我們再使用D盾進行一次查殺操作,發現依舊成功免殺(畢竟大馬程序的復雜度增加了):
之后我們再使用護衛神進行一次查殺:
至此該木馬成功免殺D盾、安全狗、護衛神,同時我們需要檢測一下免殺之后的可用性:
可以正常使用:
Create_function免殺
在免殺的過程中,發現了一個PHP的內置函數Create_function,它主要用於創建一個函數,這里可以使用它來進行免殺,但是由於D盾、安全狗有關鍵詞查殺所以這里需要對Create_function進行一個拆分處理,同時需要加入混淆處理,最后木馬程序重構結果如下所示:
之后使用D盾進行查殺————成功免殺!
之后使用安全狗查殺————成功免殺
之后使用護衛神進行查殺————成功免殺
至此,安全狗、護衛神、D盾成功免殺,之后我們試試可用性:
可以正常使用~
可變變量
可變變量是PHP中一種較為獨特的變量,它可以動態的改變一個變量的名稱,這種特性可以用於木馬免殺中。首先可以定義一個變量$do並為其賦值為todo,之后將加密處理過后的木馬內容賦值給可變變量$$do,最后在調用eval函數執行時將執行對象定義為$todo即可,具體實現如下所示:
之后使用D盾進行查殺————成功免殺
之后使用安全狗查殺————成功免殺
之后使用護衛神查殺————成功免殺
至此,成功免殺D盾、安全狗、護衛神,之后我們試試可用性:
總結
免殺與查殺在一次又一次的攻防較量中不斷的進步,而我們在使用現有的webshell時也需要留意該webshell的可信程度,有些webshell留有后門,至少筆者分析的N多個大馬時發現加密的木馬文件幾乎都有相關的后門。所以在免殺研究時還是自我設計木馬程序為好,一些大馬文件的功能不外乎由編程語言的功能函數來實現外加各種加密解密、編碼/解碼方法等。當然,隨着木馬查殺庫的更新我們也需要研究更多的木馬查殺方法與木馬查殺機制的缺陷,促進攻防兩端的進步。