今天就跟大家聊聊有關(guān)怎樣理解Webshell,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站主營(yíng)于都網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開發(fā),于都h5小程序制作搭建,于都網(wǎng)站營(yíng)銷推廣歡迎于都等地區(qū)企業(yè)咨詢
Webshell是黑客經(jīng)常使用的一種惡意腳本,其目的是獲得對(duì)服務(wù)器的執(zhí)行操作權(quán)限,比如執(zhí)行系統(tǒng)命令、竊取用戶數(shù)據(jù)、刪除web頁(yè)面、修改主頁(yè)等,其危害不言而喻。黑客通常利用常見的漏洞,如SQL注入、遠(yuǎn)程文件包含(RFI)、FTP,甚至使用跨站點(diǎn)腳本攻擊(XSS)等方式作為社會(huì)工程攻擊的一部分,最終達(dá)到控制網(wǎng)站服務(wù)器的目的。
常見的webshell編寫語(yǔ)言為asp、jsp和php。小編將以php Webshell為示例,詳細(xì)解釋W(xué)ebshell的常用函數(shù)、工作方式以及常用隱藏技術(shù)。
黑客使用Webshell的第一步通常是將其上傳到可以訪問的服務(wù)器中,例如利用用戶CMS系統(tǒng)的第三方插件中的漏洞上傳一個(gè)簡(jiǎn)單的php Webshell。當(dāng)然,Webshell類型和作用也不完全相同,一些簡(jiǎn)單的Webshell只起到連接外界的作用,允許黑客插入更加精準(zhǔn)的惡意腳本,執(zhí)行他們所需要的指令;另外一些則可能更加復(fù)雜,帶有數(shù)據(jù)庫(kù)或文件瀏覽器,讓黑客能夠從數(shù)千英里之外的地方查看入侵系統(tǒng)的代碼和數(shù)據(jù)。無(wú)論何種設(shè)計(jì),Webshell都極其危險(xiǎn),是網(wǎng)絡(luò)罪犯和高級(jí)持續(xù)威脅(APTs)的常用工具。Webshell常見的攻擊特點(diǎn)主要有以下幾點(diǎn):
持久化遠(yuǎn)程訪問
Webshell腳本通常會(huì)包含后門,黑客上傳Webshell之后,就可以充分利用Webshell的后門實(shí)現(xiàn)遠(yuǎn)程訪問并控制服務(wù)器,從而達(dá)到長(zhǎng)期控制網(wǎng)站服務(wù)器的目的。此外,在上傳完Webshell之后,黑客會(huì)選擇自己修復(fù)漏洞,以確保沒有其他人會(huì)利用該漏洞。通過(guò)這種方式,黑客就可以一種低調(diào)的姿態(tài),避免與管理員進(jìn)行任何交互,同時(shí)仍然獲得相同的結(jié)果。
提權(quán)
在服務(wù)器沒有配置錯(cuò)誤的情況下,Webshell將在web服務(wù)器的用戶權(quán)限下運(yùn)行,而用戶權(quán)限是有限的。通過(guò)Webshell,黑客可以利用系統(tǒng)上的本地漏洞來(lái)實(shí)現(xiàn)權(quán)限提升,從而獲得Root權(quán)限,這樣黑客基本上可以在系統(tǒng)上做任何事情,包括安裝軟件、更改權(quán)限、添加和刪除用戶、竊取密碼、閱讀電子郵件等等。
隱蔽性極強(qiáng)
Webshell可以嵌套在正常網(wǎng)頁(yè)中運(yùn)行,且不容易被查殺。它還可以穿越服務(wù)器防火墻,由于與被控制的服務(wù)器或遠(yuǎn)程主機(jī)交互的數(shù)據(jù)都是通過(guò)80端口傳遞,因此不會(huì)被防火墻攔截,在沒有記錄流量的情況下,Webshell使用post包發(fā)送,也不會(huì)被記錄在系統(tǒng)日志中,只會(huì)在Web日志中記錄一些數(shù)據(jù)提交的記錄。
Webshell幾乎適用于所有Web編程語(yǔ)言。之所以關(guān)注PHP,是因?yàn)樗莣eb上使用最廣泛的編程語(yǔ)言。下面是PHP中一些執(zhí)行shell命令最常用的函數(shù)。
system()
system()函數(shù)將命令作為參數(shù),并輸出結(jié)果。
下面的示例是在Windows操作系統(tǒng)上運(yùn)行dir命令,然后返回PHP文件所在目錄的目錄列表。
類似地,在Linux機(jī)器上執(zhí)行l(wèi)s命令也會(huì)得到類似的結(jié)果。
exec()
exec()功能是將命令作為參數(shù),但不輸出結(jié)果。如果指定了第二個(gè)可選參數(shù),則返回結(jié)果為數(shù)組。否則,如果回顯,只顯示結(jié)果的最后一行。
用exec()函數(shù)執(zhí)行echo命令,只會(huì)輸出最后一行命令結(jié)果。
如果指定了第二個(gè)參數(shù),則返回結(jié)果為數(shù)組
shell_exec()
shell_exec()函數(shù)類似于exec(),但是,其整個(gè)輸出結(jié)果為字符串。
passthru()
passthru()執(zhí)行一個(gè)命令并返回原始格式的輸出。
proc_open()
proc_open()函數(shù)可能很難理解。簡(jiǎn)單地說(shuō),我們可以使用proc_open(),創(chuàng)建一個(gè)處理程序(流程),實(shí)現(xiàn)腳本和要運(yùn)行的程序之間的通信。
倒引號(hào)
很多PHP開發(fā)人員并沒有意識(shí)到這一點(diǎn),但是PHP會(huì)首先執(zhí)行shell命令中倒引號(hào)(`)內(nèi)的內(nèi)容。請(qǐng)注意,倒引號(hào)(`)和單引號(hào)(’)不同。
根據(jù)以上內(nèi)容,下面是一個(gè)最簡(jiǎn)單的PHP Webshell。
它使用 system()函數(shù)來(lái)執(zhí)行通過(guò) ‘cmd’ HTTP 請(qǐng)求中GET參數(shù)傳遞過(guò)來(lái)的命令。
我們已經(jīng)確定了這些函數(shù)(以及其他一些函數(shù))可能非常危險(xiǎn)。更危險(xiǎn)的是,在安裝PHP時(shí),默認(rèn)情況下會(huì)啟用所有這些內(nèi)置PHP命令,而大多數(shù)系統(tǒng)管理員不會(huì)禁用這些函數(shù)。如果不確定在系統(tǒng)上是否啟用了這些函數(shù),輸入以下內(nèi)容將返回已啟用的危險(xiǎn)函數(shù)的列表。
在采用默認(rèn)安裝的情況下,下列函數(shù)是默認(rèn)啟用的。
修改報(bào)頭
黑客使用用戶代理字符串而不是通過(guò)$_POST 請(qǐng)求參數(shù)來(lái)傳遞命令的。
然后,黑客可以通過(guò)將命令放在User-Agent HTTP報(bào)頭中來(lái)制作特定的HTTP請(qǐng)求。
在服務(wù)器日志中可以看到這一行為的效果,其中第二個(gè)請(qǐng)求中的HTTP User-Agent被cat /etc/passwd命令替換了。
上述方法會(huì)產(chǎn)生很大噪聲,可以很容易地提示管理員查看服務(wù)器日志。但采用下列方法,管理員這很難發(fā)現(xiàn)。
這種方法沒有留下關(guān)于執(zhí)行命令的任何可見軌跡(至少在訪問日志中是這樣)。
隱藏在正常文件中
黑客用來(lái)隱藏Webshell最簡(jiǎn)單的一個(gè)方法是將它們上傳到深層子目錄中和/或使用隨機(jī)名稱。
此外,一種更有效的方法是將Webshell代碼嵌入到現(xiàn)有的合法文件中。
或使用CMS(例如WordPress)
注意:黑客通常會(huì)在函數(shù)前使用@運(yùn)算符,以防發(fā)生任何錯(cuò)誤,寫入錯(cuò)誤日志。
混淆
黑客使用各種混淆技術(shù),以避免被管理員檢測(cè)到。他們不斷提出新的更復(fù)雜的方法來(lái)隱藏其代碼并繞過(guò)安全系統(tǒng)。下面是我們看到的一些最常用的技術(shù)。
(1)刪除空格換行符
通過(guò)從代碼塊中刪除空格換行符,代碼看起來(lái)像一個(gè)大字符串,這就使得代碼的可讀性降低并且更難識(shí)別腳本要實(shí)現(xiàn)什么目的。
(2)加密技術(shù)
該技術(shù)可以對(duì)代碼進(jìn)行加密,降低代碼的可讀性,并且充分利用運(yùn)行時(shí)可以重建代碼的各種函數(shù)。
(3)使用Hex進(jìn)行混淆
ASCII字符的十六進(jìn)制值也可以用于進(jìn)一步混淆Webshell命令,下面的例子可以很好地說(shuō)明混淆技術(shù)在Webshell中的應(yīng)用。
以下是上述字符串的十六進(jìn)制值。
因此,以下代碼可用于接受十六進(jìn)制編碼的字符串并將其轉(zhuǎn)化為PHP代碼。
輸出結(jié)果類似于下圖。
(4)通過(guò)可控輸入實(shí)現(xiàn)混淆
PHP常用的可控輸入包括: $_GET, $_POST, $_REQUEST,$_FILES,$_SERVER $_COOKIE等,是PHP預(yù)定義的變量,可以將黑客自定義的值傳遞給瀏覽器中。
以下示例很簡(jiǎn)單,但很實(shí)用。雖然未對(duì)代碼進(jìn)行編碼或加密,但由于它沒有使用任何可疑的函數(shù)名(例如eval()或assert())、冗長(zhǎng)的編碼字符串、復(fù)雜的代碼,因此與之前的代碼相比,可檢測(cè)性仍然較低。最重要的是,當(dāng)管理員查看日志時(shí),它不會(huì)引起任何危險(xiǎn)。
我們以Weevely為例,來(lái)分析Webshell是如何使用的。Weevely是一個(gè)類似PHP telnet的輕量級(jí)Webshell,具有多個(gè)選項(xiàng),在本示例中我們將使用這些選項(xiàng)。
為進(jìn)行演示,我們將使用Weevely創(chuàng)建后門代理,部署在目標(biāo)服務(wù)器上。我們只需要指定一個(gè)密碼和一個(gè)文件名即可。然后用密碼來(lái)訪問后門。
agent.php 包含以下編碼文件。
將agent.php重命名為ma.php,然后將其上傳到失陷的服務(wù)器。然后,我們不使用瀏覽器訪問文件,而是使用shell連接到該文件。
現(xiàn)在我們已經(jīng)擁有了訪問目標(biāo)服務(wù)器的后門,可以執(zhí)行命令了。
檢查服務(wù)器的訪問日志,我們會(huì)注意到有些奇怪。
發(fā)送的請(qǐng)求已編碼,來(lái)源網(wǎng)址也似乎是Google。如果我們要分析日志中是否有惡意活動(dòng),這非常有可能對(duì)我們?cè)斐衫_,因?yàn)镚oogle應(yīng)該是合法的引薦來(lái)源。當(dāng)然,這是防止被檢測(cè)出來(lái)的Webshell策略的一部分。
我們使用的Webshell的另一個(gè)有趣功能是反彈TCP Shell選項(xiàng)。這是指失陷的服務(wù)器將反向與我們建立連接,或者我們請(qǐng)求連接到Webshell。
在源計(jì)算機(jī)上,我們?cè)诙丝?181上設(shè)置了Netcat偵聽器。
使用已經(jīng)建立的后門shell連接,啟動(dòng)反彈TCP請(qǐng)求。
現(xiàn)在已經(jīng)建立了反彈shell連接(192.168.5.25 → 192.168.5.26)。
通過(guò)使用反彈TCP Shell控制服務(wù)器,而訪問或錯(cuò)誤日志中沒有任何痕跡,因?yàn)橥ㄐ攀峭ㄟ^(guò)TCP(第4層)而不是HTTP(第7層)進(jìn)行的。
檢測(cè)
如果管理員懷疑其系統(tǒng)中存在Webshell或只是進(jìn)行例行檢查,則需要檢查以下內(nèi)容。
首先,必須針對(duì)Webshell正在使用的常見關(guān)鍵字過(guò)濾服務(wù)器訪問和錯(cuò)誤日志,包括文件名稱和/或參數(shù)名稱。您可根據(jù)下面的示例,在Apache HTTP Server訪問日志中的URL中搜索字符串文件。
必須在文件系統(tǒng)(通常是Web服務(wù)器根目錄)中搜索文件或文件名中的通用字符串。
如果搜索到很長(zhǎng)的字符串,這可能表示已進(jìn)行了編碼。一些后門程序具有數(shù)千行代碼。
搜索最近X天修改過(guò)的文件。在以下示例中,我們搜索了前一天更改的* .php文件,但建議搜索所有更改過(guò)的文件,因?yàn)閃ebshell也可以嵌入到圖像或任何其他文件中。
監(jiān)視網(wǎng)絡(luò)中存在異常的網(wǎng)絡(luò)流量和連接。
分析.htaccess文件是否進(jìn)行了修改。以下是攻擊者可能對(duì).htaccess文件進(jìn)行更改的示例。
預(yù)防
通常,黑客會(huì)利用Web服務(wù)器軟件中存在的漏洞來(lái)安裝Webshell。因此,消除這些漏洞對(duì)于避免失陷Web服務(wù)器的潛在風(fēng)險(xiǎn)很重要。以下是一些與Webshell相關(guān)的預(yù)防措施。
如果不使用,要禁用危險(xiǎn)的PHP函數(shù),例如exec()、shell_exec()、passthru()、system()、show_source()、proc_open()、pcntl_exec()、eval()與assert()。
如果必須要啟用這些命令,請(qǐng)確保未授權(quán)用戶無(wú)法訪問這些腳本。此外,使用escapeshellarg()和escapeshellcmd()可以確保不能將用戶輸入注入到shell命令中,從而導(dǎo)致命令執(zhí)行漏洞。
如果Web應(yīng)用程序正在使用上傳表單,請(qǐng)確保上傳的表單是安全的,并且僅允許上傳白名單所允許的文件類型。
不要相信用戶輸入的信息。
不要盲目使用在線論壇或網(wǎng)站上的代碼。
對(duì)于WordPress,如果不需要,要避免安裝第三方插件。如果需要使用插件,請(qǐng)確保插接件其信譽(yù)良好且經(jīng)常更新。
在敏感目錄(如圖片或上傳)中禁用PHP執(zhí)行。
鎖定Web服務(wù)器用戶權(quán)限。
上面給出的是一些簡(jiǎn)單的Webshell檢測(cè)和預(yù)防措施。面對(duì)較為復(fù)雜的Webshell攻擊,則需要采用一些專業(yè)的Webshell檢測(cè)工具來(lái)實(shí)現(xiàn)了。
Webshell編碼簡(jiǎn)單,使用方便,但由于許多Web服務(wù)器的設(shè)置方式問題,即使是一個(gè)簡(jiǎn)單的腳本也足以造成嚴(yán)重的破壞。這就是為什么有成千上萬(wàn)的公開Webshell的原因所在。Webshell存在如此多的變種,導(dǎo)致入侵檢測(cè)和入侵防御系統(tǒng)(IDS/IPS)很難檢測(cè)到它們,尤其是當(dāng)使用簽名來(lái)檢測(cè)此類Webshell時(shí)。有些Webshell非常復(fù)雜,即使進(jìn)行行為分析,也幾乎無(wú)法檢測(cè)到。
話雖如此,但Webshell只是漏洞利用后的實(shí)施工具,這就意味著首先要盡早檢測(cè)出Webshell,防止其上傳后進(jìn)行漏洞利用。
看完上述內(nèi)容,你們對(duì)怎樣理解Webshell有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
文章標(biāo)題:怎樣理解Webshell
地址分享:http://aaarwkj.com/article48/pchgep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、微信公眾號(hào)、企業(yè)建站、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)