一.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的最有效方法就是:可寫目錄不給執行權限,有執行權限的目錄不給寫權限。
我的經驗是將上傳和運行目錄隔離,或者服務器分開。在關鍵功能上進行嚴格防範。有點廢話。。
定義一個.htaccess文件,只允許訪問指定擴展名的文件。
不要把.htaccess文件和上傳文件放在同一個目錄裏,應該放在父目錄裏。
一個典型的只允許 gif, jpg, jpeg 和 png文件的.htaccess文件應當包含下面的代碼(根據你的需求做調整)。這樣也能阻止雙擴展名攻擊.
deny from all order deny,allow allow from all
如果可能,把文件上傳到root目錄以外的目錄裏。
禁止覆蓋已存在的文件(以阻止.htaccess覆蓋攻擊)
創建一個mime-type白名單列表。(只允許這個列表裏的Mime-type)
生成一個隨機的文件名,並且加上此前生成的文件擴展名、
不要只依賴客戶端驗證,這不夠。理想的是既有客戶端驗證也有服務器端驗證。