介面安全性系列2-Webshell

一.Webshell是什麼?

  webshell就是asp,php,jsp或者cgi等網頁檔案形式存在的一種命令執行環境,也可以將其稱做為一種網頁後門。

二.Webshell可以做什麼?

  黑客在入侵了一個網站後,通常會將asp或php後門檔案與網站伺服器WEB目錄下正常的網頁檔案混在一起,然後就可以使用瀏覽器來訪問asp或者php後門,得到一個命令執行環境,以達到控制網站伺服器的目的。。

三.Webshell主要模式

  

下面是別人總結的幾種方式,我加了描述和自己的一些看法和經歷

1. 直接上傳獲取webshell

       通過上傳檔案功能,比如評論圖片等,這類主要是後臺需要驗證上傳檔案。比如mimetype字尾名。

       我們網站出現過一次情況驗證了mimetype,在對上傳檔案後move檔案到上傳目錄的時候取了file[‘name’]做最後的拼接, 而驗證是驗證了file[‘tmp_name’]的對應mimetype和字尾。

       攻擊者通過修改post的資料包裡面的name值使得上傳後的檔案從png轉成了php。。。解決辦法當然是把name值也進行了驗證

2.新增修改上傳型別

       很多管理後臺允許修改前臺上傳功能的支援的檔案型別,而通過攻擊這部分將對應的檔案型別增加進去,然後通過前臺的上傳就可以了。

       這個主要是功能防範,如果用的是開源的系統,沒需求使用該功能可以直接將修改支援檔案型別的功能裁剪掉 。。

3.利用後臺管理功能上傳webshell

      這部分其實也是後臺的一些功能漏洞,允許修改一些配置檔案,直接將配置檔案暴露在前端訪問。

       或者比如增加友情連結功能 直接在友情連結出將程式碼寫入比如http://aa.com</div><?php eval($_GET[‘aaa’]);?> 之類的嵌入到友情連結的頁面,這樣友情連結的功能直接就成了webshell

4. 利用後臺管理向配置檔案寫webshell

      跟3也是類似的,將程式碼寫到一些檔案裡。對應的檔案裡就有了可執行的程式碼。

5. 利用後臺資料庫備份及恢復獲取webshell

    主要是利用後臺對access資料庫的“備份資料庫”或“恢復資料庫”功能,“備份的資料庫路徑”等變數沒有過濾導致可以把任意檔案字尾改 為asp,從而得到webshell

6. 利用資料庫壓縮功能

7 asp mssql系統

8. php mysql系統

     SELECT …… INTO OUTFILE

9. phpwind論壇從後臺到webshell的三種方式

10 .也可以利用網站訪問計數系統記錄來獲取webshell

後面幾個主要結合mysql注入,或者系統功能等,將對應的shell程式碼寫到某個地方,再通過儲存或者sql備份匯出等功能將對應的sql裡面存放的植入程式碼匯入到指定位置的指定字尾檔案比如aa.php等

三.Webshell防範

從根本上解決動態網頁尾本的安全問題,要做到防注入、防暴庫、防COOKIES欺騙、防跨站攻擊等等,務必配置好伺服器FSO許可權。最小的許可權=最大的安全。

防範webshell的最有效方法就是:可寫目錄不給執行許可權,有執行許可權的目錄不給寫許可權。

我的經驗是將上傳和執行目錄隔離,或者伺服器分開。在關鍵功能上進行嚴格防範。有點廢話。。


在允許上傳檔案的網站和web應用中,應當應用下面的一系列最佳實踐方法。這些實踐方法將有助於你保證web應用的上傳檔案的安全性。

  定義一個.htaccess檔案,只允許訪問指定副檔名的檔案。

  不要把.htaccess檔案和上傳檔案放在同一個目錄裡,應該放在父目錄裡。

  一個典型的只允許 gif, jpg, jpeg 和 png檔案的.htaccess檔案應當包含下面的程式碼(根據你的需求做調整)。這樣也能阻止雙副檔名攻擊.

  deny from all order deny,allow allow from all

  如果可能,把檔案上傳到root目錄以外的目錄裡。

  禁止覆蓋已存在的檔案(以阻止.htaccess覆蓋攻擊)

  建立一個mime-type白名單列表。(只允許這個列表裡的Mime-type)

  生成一個隨機的檔名,並且加上此前生成的副檔名、

  不要只依賴客戶端驗證,這不夠。理想的是既有客戶端驗證也有伺服器端驗證。