WebShell攻擊的方式是這樣的:
1.通過網站提供的上傳入口,比如是上傳圖片的入口,上傳時上傳後綴爲jps的圖片
2.通過抓包工具抓包,修改上傳的後綴爲 .jsp或.php等,將實際內容更改爲木馬代碼(比如創建一個用戶賦予root權限)
3.上傳成功後其實就成功了,可以通過創建的用戶登錄到你的服務器(其實這裏我沒太理解,查資料說需要菜刀將木馬文件的路徑寫到菜刀上,然後就OK了,但這邊的腳本上傳到服務器不會自動執行嗎?希望有大佬可以指點下迷津)
這種做法是繞過前端驗證,將木馬傳到服務器
解決方案:
1.從源頭上就杜絕非法文件上傳到服務器,前端驗證是可以繞過的,那加上後端驗證即可
2.限制腳本文件權限,禁止訪問木馬文件
後端驗證:
在後端代碼中驗證下上傳文件是否是.jpg,.png,.gif,.jpeg這樣,就無法繞過驗證而將腳本文件上傳到你的服務器
限制腳本文件權限
看到說可以通過apache來禁止訪問,想了想其實也可以通過nginx,但這邊我是簡單的在web.xml中加了段話來達到目的
<security-constraint>
<display-name>interceptor-jsp</display-name>
<web-resource-collection>
<web-resource-name>JSPs</web-resource-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.php</url-pattern>
<url-pattern>*.asp</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
(ps:我的是Java項目)
這裏加上後所有的,jsp .php .asp文件都無法訪問,因爲我這個項目正好是用的html,沒用jsp,所以可以配.jsp
這裏配好後,一寫得不好就會啓動報錯,大概報錯的是Catalina localhost巴拉巴拉的,原因是url-pattern裏沒寫好,
如果寫/xxx/xxx/*.jsp抱歉,就會報錯了,想要禁止某個後綴的文件訪問只能寫 *.xxx,前面不能加上目錄的,如果有其他的寫法可以達到指定某個目錄下的所有後綴爲xxx的禁止訪問,請瘋狂艾特我,謝謝
此上,皆爲我的一點愚見,如有不足煩請評論指出 (抱拳)