管理后臺常見漏洞
這里說的管理后臺主要是指供企業內部用戶使用的ToB類的系統,如OA、人力資源管理系統、財務系統、ERP系統等。長期以來,管理后臺功能臃腫,不受重視,功能由不同的團隊開發、使用第三方組件甚至直接是購買的第三方公司開發的系統。各種原因疊加之下導致它常常成為系統漏洞的高發區。拿JAVA來說,早期的管理后臺大多由Java + JSP開發,新的技術棧則主要使用前后端分離的方式,前端使用如VUE等前端框架,后端則主要提供Rest接口的方式與前端交互。前后端分離后對管理后臺的權限管理方式也產生了較大的影響。
權限問題
一個功能完整的管理后臺通常都會有菜單、按鈕的權限管理,對某個角色或用戶,可以控制菜單或按鈕的顯示和隱藏。這些只是用戶可見的部分,稍有經驗的技術人員會直接在地址欄輸入URL的方式來繞過表面的限制。比如正常情況下A只能訪問URLA,B只能訪問URLB,A只需要猜測得到URLB直接輸入地址就進入了他不該有權限看到的頁面。如果管理后臺是前后端分離的,而且URL又是純前端地址,那這種方式是防不住的,只能做好接口權限。
接口權限,是限制用戶只能調用有權限的接口。這樣可以有效避免非法的訪問和調用,保護系統接口數據安全。要做到接口權限安全,通常會在每個接口調用時增加權限判斷,有經驗的程序員或使用注解或使用AOP配置的方式簡化編碼,但還是比較麻煩。如果接口沒做權限控制或者只限制了登錄的用戶就有權限訪問該接口,那普通用戶只需要用猜測等方法得到了敏感接口地址,就能調用管理員才能調用的接口。
比接口權限更麻煩的是數據權限,數據權限是將行級數據權限和用戶或角色進行綁定,限制用戶只能訪問和操作自己管轄范圍內的數據。用戶A對接口B有訪問權限,不代理用戶A對接口B能返回的所有數據都有權限,所以也可以說數據權限是更細粒度的接口權限。但是一般不能通過增加多個接口的方式來實現數據權限,因為角色或用戶太多了。數據權限需要在建模時就提前設計,會通過增加列的方式標識能訪問該行數據的權限級別。如果系統沒做好數據權限,對攻擊者來說最簡單的利用方式就是把接口的入參改了。比如某用戶具有組織架構管理的權限能看到廣州分公司的組織架構,該功能調用的接口是:http://moext.com/org.jsp?root=020,他只需要改成http://moext.com/org.jsp?root=1(假設1是根組織),那就能看到全國的組織架構了。
另外一個權限問題高發區是“我的資料“功能,通常來說“我的資料“只需要從session中取用戶,再按用戶查詢信息即可。但有些缺乏經驗的程序員估計是為了復用用戶管理查看用戶信息的功能,把用戶ID暴露給前端,由前端傳用戶ID過來查我的信息。據說早些年就有某公司程序員在公司的OA上利用這個漏洞拿到了整個公司員工的私密信息。
富文本編輯器
富文本編輯器可以允許用戶使用不同的字體、顏色、大小和其他格式來編輯文本,同時還可以插入圖片、視頻等多種媒體類型,功能非常豐富。但是,正是由于功能豐富,我們無法像防XSS攻擊一樣過濾特殊字符,而且這些編輯器的附件上傳功能通常是固化的,我們沒辦法做過多的限制。所以富文本編輯是XSS漏洞和文件上傳漏洞的高發區。
功能豐富的查詢條件
同樣實現多查詢條件下的X功能管理列表,在編碼使用SQL拼接條件比用預編譯占位的方式要方便太多了,但是前者雖然方便簡單了但又引入了SQL注入漏洞。筆者甚至見過某知名的OA系統,它的工作流管理功能非常強大,但分析后發現管理員在前端加個審批節點后端是通過DDL建個臨時表的方式實現的。攻擊者可以輕松地修改表結構、刪除數據等。這種既存在SQL注入漏洞又具有DDL權限的系統在一些舊的OA、ERP、人力資源管理系統上也不在少數。