最初,Webshell常被稱為一種供Web伺服器管理員遠端管理伺服器的腳本。後來,隨著一些Webshell管理工具的誕生,使得獲取Web權限的過程被很大程度上地簡易化,於是逐漸被稱為Web入侵的工具腳本。
Webshell不同於漏洞,而是利用應用漏洞或伺服器漏洞(檔案上傳漏洞、檔案包含漏洞等)將腳本檔案上傳到伺服器進行後續利用,屬於滲透測試的後續利用和ATT&CK的TA0002 Execution (執行)階段。
圖1 TA0002
參考來源:https://mitre-attack.github.io/attack-navigator/(ATT&CK導覽器)
攻擊者為了繞過偵測和防護設備、軟體等的偵測,都會經常變換自己的Webshell寫法,可以保證功能的前提下確保自己的腳本不會被偵測到,其中php腳本較為突出,由於php腳本語言有許多可利用的函數,因此導致了php可以有千變萬化的混淆和變形寫法。
一句話木馬也屬於Webshell腳本,對一句話木馬感興趣的小夥伴可以參考上期的《一句話木馬的多種變形方式》自行學習和了解,本期文章主要不再贅述。
之前分析Webshell時,發現有一類Webshell完全能繞過各種不同的偵測軟體,這類腳本常常在程式碼層面看來似乎毫無意義,也沒有常見的Webshell特徵,但經過層層的抽絲剝繭,就不難發現這一類混淆腳本的思路,剛好近期收到一個有趣的混淆腳本,向小伙伴分享該腳本的分析過程,也希望能起到拋磚引玉的作用。
第一眼看到這個腳本的時候就從他的內容中看到了明晃晃的eval函數,於是本能地將這一部分程式碼提取出來,但是還不足以證明什麼,因為內容部分全是看起來毫無頭緒的亂碼,沒有絲毫WebShell的痕跡。
仔細發現可以發現除了eval之外,還呼叫了gzinflate、base64_decode、str_rot13這三個函數,或許可以從這三個函數開始尋找分析的突破口。
圖2 腳本內容
str_rot13()
ROT13 編碼把每一個字母在字母表中向前移動13個字母。數字和非字母字元保持不變(凱撒加密)。
base64_decode()
對字串內容進行base64編碼。
Gzinflate
對資料預設使用ZLIB_ENCODING_RAW編碼方式,使用deflate資料壓縮演算法,實際上是先用LZ7壓縮,然後再用霍夫曼編碼壓縮。
圖3 呼叫echo指令
使用echo指令對內容進行解析,結果發現str_rot13()被執行了,於是重複這種思路,嘗試一層一層將原有內容剝離出來。
圖4 解析結果
以上是混淆變形的Webshell分析是怎樣的的詳細內容。更多資訊請關注PHP中文網其他相關文章!