本文將介紹WebShell，了解其運作方式、常見家族種類、分析其植入到網站伺服器的原因、常見語法、利用圖解方式了解實際攻擊手段與流程。然後，在實際操作和情境模擬中使用Kali Linux內建的Weevely工具產生WebShell並架設DVWA漏洞平台以模擬實際的WebShell的植入手法。本文將分成上下兩集做介紹。
駭客組織發動攻擊的方式有千百種，然而有一種針對網站伺服器植入的惡意腳本稱作為WebShell，它是常見於針對含有漏洞的網站伺服器的一種攻擊手法。根據近年的統計報告指出，WebShell的威脅數量有逐年上升的趨勢，且WebShell可以存在於任何的作業系統，只要是與網站相關的程式語言，都有可能存在WebShell。因此，雖然WebShell並不是新型的攻擊手法，但仍然歷久彌新，所以時至今日，自家網站中出現WebShell的身影，仍然是網站伺服器管理員最不想看到的現象之一。
本文將介紹什麼是WebShell，介紹關於它的運作原理、常見語法、攻擊手段和預防的方法，並在實際操作中運用Weevely搭配DVWA工具演示WebShell的實際攻擊行為。
WebShell背景知識
以下將針對WebShell的背景進行介紹，包括基本知識、種類和特色、植入根因分析、實際攻擊手段，以及如何預防被植入WebShell。
什麼是WebShell
WebShell是由Web和Shell兩個字組成，顧名思義，它是一種被植入於網站伺服器的惡意腳本，其目的是讓攻擊者從任一可以連上網路的位置控制該網站伺服器，進行未經授權的行為，例如竊取機密、破壞系統正常運作等。
由於WebShell通常指的是被植入在網站伺服器中的惡意腳本，所以只要是可以寫網站的腳本語言，都有可能被植入WebShell。根據研究報告指出，已知的WebShell有超過80%都是以PHP程式語言為主。PHP是一種常用於網頁後端環境執行的程式語言，因為其不需要經過編譯器（Compiler）編譯，故被視為一種腳本語言。PHP目前最新的版本是8版，但是因PHP的發展已經很多年了，因此有很多舊版本的PHP的語法存在著被植入WebShell的危險性。正也是為何有超過80%以上的WebShell是存在PHP的執行環境中，本文的WebShell介紹和實作部分也使用PHP 5.0版本的程式做說明。除了PHP外，還有像ASP、ASPX、Python、Perl和JavaScript等腳本語言都有可能成為WebShell的藏身之地。
WebShell之所以受駭客組織歡迎，不外乎是其檔案小、執行快、成本低和不易被發現等特點。知名的PHP WebShell如China Chopper，其最小的檔案僅4KB，只有幾行的程式碼，檔案越小執行速度越快。此外，因全球網站的數量之龐大和上述這些特點，讓WebShell成為許多駭客組織愛用的攻擊手段。
有趣的是，這些被視為害蟲的WebShell在一些網路上的公開來源如GitHub都可以找到程式碼，抑或是網路上相當多種工具都可以自己在電腦上產生WebShell。所以，WebShell雖然並非很新的技術，但因其持有和取得的成本實在是太低了，可說是防不勝防，長久以來都困擾著資安人員。當WebShell被成功植入到網站伺服器後，通常會造成以下威脅：
許多駭客植入WebShell的目的是希望可以從遠端控制被駭的電腦，因此WebShell中通常會包含後門程式（Backdoor），後門程式通常指的是允許讓攻擊者不依照正常的管道，用走「後門」的方式存取網站伺服器的資料。有意思的是，有些攻擊者會使用密碼驗證或其他技術讓只有上傳該WebShell的攻擊者可以存取該被攻擊的網站伺服器，且部分的WebShell會使用混淆程式碼（Obfuscated Code）等方式來阻擋搜尋引擎搜尋到被植入的這段程式碼，降低被發現的風險，進而增加攻擊者可以潛伏的時間和提高達成目的的成功率。
一般來說，透過WebShell取得的權限會是一般伺服器上的使用者，然而，攻擊者可以嘗試透過伺服器上的漏洞取得系統使用者中最高的「root」或「系統管理員」權限。取得最高權限後，攻擊者便可以對系統進行大部分的操作。倘若攻擊者成功取得最高的使用者權限，那攻擊者便可以執行大部分指令。
部分種類的WebShell可以用於監控出入於內外網的網路流量，抑或是掃描內部網路的主機、防火牆和路由器等等。這個過程可能維持數天甚至數個月，目的是了解被駭伺服器的內部網路架構，以便找機會讓攻擊者取得永久的存取權限，整個過程也是進階持續性威脅（APT）常見的過程。
殭屍節點一般指的是該台伺服器或電腦設備被攻擊者所控制，被操控去做攻擊者指定的事情，例如利用該台被控制的電腦對另一台電腦發動攻擊等，像是分散式阻斷攻擊（DDoS）便是典型的殭屍節點攻擊案例。因此，若讓WebShell可以控制網站伺服器的話，就有可能讓該網站伺服器成為殭屍網路中的殭屍節點，使得該網站伺服器成為攻擊者手中的傀儡。
常見的WebShell和其特色
以下介紹從古至今幾個有名的PHP WebShell家族和其特色，分別是China Chopper、WSO、C99和B374k。
有些人會將China Chopper的中文稱為「中國菜刀」，它最早是在2012年時被發現，最大的特色是檔案非常地小，只有約4KB，主要的攻擊行為是遠端控制伺服器。雖然距離首次發現China Chopper已經過去超過十年的時間，但在2023年8月時，微軟發現有駭客組織仍然在使用China Chopper作為是其攻擊系統後的權限升級工具。所以，即使不是很新型的攻擊手段，影響力仍舊不容小覷。
WSO是「Web Shell by oRb」的縮寫，它的起源可以回溯到2010年，當時一位在俄羅斯的駭客論壇上由一位名叫「oRb」的用戶首次向眾人公開展示其作品，在這之後，該WebShell便以這位用戶「oRb」的名稱命名。WSO主要的攻擊行為包括對資料庫進行未授權的修改和執行腳本命令等等。到了2020年之後，甚至還有用戶更新WSO的版本，新版的WSO改名為WSO-NG。
C99可說是WSO的進階版，也是最受擅長使用RFI攻擊的駭客歡迎的攻擊腳本之一。C99特色是允許攻擊者遠端控制伺服器，知名的內容管理系統WordPress也是C99的經常受災戶之一，使用WordPress作為網站系統的數量占全球的網站數量的30%以上，由此可見C99的影響範圍之大。
B374k可說是最著名的WebShell，擁有能夠讓攻擊者對檔案系統瀏覽、修改和刪除等常見操作的權限，也可以執行指令或連線到資料庫來修改資料庫資料，在功能上可說是應有盡有，也是駭客圈內常用的WebShell之一。B374k之所以受人歡迎，有部分原因是因為其腳本檔案已被整理在GitHub上，成為許多實務練習中拿來實驗的標竿（Benchmark）資料集，GitHub連結為「https://github.com/b374k/b374k」。
WebShell植入原因分析
事實上，對於攻擊者來說，要讓WebShell能夠攻擊成功最困難的點並非製作這些WebShell，而是要如何將製作好的WebShell植入到目標的網站伺服器。一般而言，要植入WebShell的途徑大多仰賴網站伺服器上本身已存在的漏洞，常見容易被植入WebShell的漏洞如下：
文件上傳漏洞是最常見被植入WebShell的漏洞之一，若網站伺服器端未檢查使用者端上傳的檔案類型、內容以及Metadata，駭客便可以輕鬆地將WebShell植入網站伺服器的檔案系統中。
網站管理員或使用者若使用弱密碼的話，可能導致網站伺服器被使用暴力破解（Brute Force）等方式攻破，屆時網站伺服器權限將有可能被攻擊者接管，進而手動將WebShell植入。
使用老舊版本的軟體和套件包容易有已停止修補的漏洞，像是PHP語言本身目前的穩定版本（Stable）是8版以上，其更早以前的版本如4、5版或7版目前都已不是官方主要會維護的版本，所以在這些版本中出現WebShell的可能性就很高，因此建議若無特別的需求，應使用最新已修補的版本。
跨網站腳本攻擊（XSS）和SQL注入（SQL Injection）攻擊的共通點是網站伺服器端未妥善驗證使用者端在輸入框的輸入資料，導致使用者得以從網頁的輸入框中輸入惡意的攻擊腳本，因此攻擊者有機會透過這些攻擊腳本將WebShell植入到網站伺服器端。
本地檔案引用（Local File Inclusion，LFI）和遠端檔案引用（Remote File Inclusion，RFI），這兩個漏洞的最主要差異點在於，LFI是透過網站伺服器端已存在的檔案去執行惡意腳本，而RFI是透過下載（Download）或引用（Import）不存在於網站伺服器端上的檔案（亦即遠端檔案）去執行惡意腳本。不論是LFI或RFI，都有可能透過已存在的檔案中撰寫的程式去執行WebShell或直接從外部伺服器載入WebShell。
常見的PHP WebShell語法
PHP WebShell可以分為很多種，其中「一句話木馬」是一種常見的WebShell，其特點是程式碼簡短，通常僅有短短的一行程式碼，所以叫做「一句話木馬」，其可以對網站伺服器開啟後門以允許遠端存取。表1整理幾種常見的「一句話木馬」語法。
圖解WebShell實際攻擊手段
接著，將典型的WebShell攻擊方式和最終目標用圖解方式呈現，主要將其分成六個階段如表2所示，流程圖如圖3所示。
WebShell預防與處理
WebShell的攻擊方法之所以可以如此長壽，是因為其攻擊成本相對較低，加上全世界的網站伺服器數量龐大和種類繁多，且並非所有的網站伺服器都有在定期維護，自然越舊的伺服器上面的漏洞自然就會很多，以下提供幾種方式來防止網站伺服器無意間被植入WebShell：
上傳檔案的功能是大多數網站都會有的基本功能，如上傳身分證或其他文件資料等。然而，很多WebShell都是透過檔案上傳的漏洞進到網站伺服器中，因此，檢查上傳的檔案是必須的，檢查的項目包含檔案類型、副檔名、檔案大小等，且要注意有些檔案會偽裝，故意手動更改檔案類型，例如把PHP檔改成JPG來繞過檢查機制。
網站伺服器漏洞是WebShell被植入的主要方式之一，每天都有不同的系統漏洞被發現，尤其版本較舊的系統常常會有系統漏洞被利用（Exploit）的問題，所以如果網站伺服器沒有特別指定要使用特定版本的話，建議定期升級網站伺服器系統版本。
一台正式對外開放使用的網站伺服器，正常來說只開啟對外服務會使用到的功能，但很多時候管理員為了一時方便，會額外開啟一些系統功能以方便維運，但這些都有可能成為WebShell被植入的破口，因此應仔細確認伺服器上的功能是否每個都是必要使用。
程式碼常常會有數百行和數十個檔案，故程式碼中常常會有很多未真正被程式主要功能執行的片段。
一般而言，只要網站伺服器未傳出影響使用者體驗的災情，這些未被系統主要功能執行到的程式片段便很容易被遺忘。其很有可能成為WebShell著陸的溫床，因此應該要利用工具定期對程式碼進行掃描，以檢查被放在伺服器上的這些程式碼是否會隱匿WebShell的蹤跡。
一般而言，WebShell是透過漏洞將惡意的腳本植入到網站伺服器上，但如果本身程式在撰寫時就有寫入比較危險的語法，如表1中整理的常見WebShell語法等，那即使攻擊者未將WebShell植入，這些危險的語法就有可能被利用。
待續
下集文章將接著介紹DVWA和Weevely，並使用Docker建立DVWA漏洞平台，搭配Kali Linux內建的Weevely工具建立PHP惡意腳本（稱其為PHP WebShell），模擬攻擊者如何透過網頁的漏洞上傳WebShell。並且，實地進行情境演練示範。
＜本文作者：社團法人台灣E化資安分析管理協會（ESAM, https://www.esam.io/）國立中央大學平行與分散計算實驗室（簡稱PaDiC實驗室）創立於2006年，由王尉任教授率領成員致力於雲端運算之研究，其領域包含分散式程式技術、邊緣運算、虛擬機器容錯與高可用性技術、網路應用程式和科學計算。＞