Top1 --失效的訪問控制
這是21年最新的排名,失效的訪問控制排到了第一,
簡單來說它包括哪些問題:
-
文件包含/目錄遍歷
-
權限繞過(水平越權)
-
權限提升(垂直越權)
-
不安全直接對象的引用
文件包含/目錄遍歷
隨着網站業務的需求,程序開發人員一般希望代碼更靈活,所以將被包含的文件設置為變量,用來進行動態調用,但是正是這種靈活性通過動態變
量的方式引入需要包含的文件時,用戶對這個變量可控而且服務端又沒有做合理的校驗或者校驗被繞過就造成了文件包含漏洞。
這里以dvwa為例子:
這里原本是去包含解析file1.php,這個文件,因為沒有做防護,加入../遍歷目錄這里導致報錯就暴露了文件的絕對路徑

然后就可以嘗試遍歷其他目錄,比如這里訪問php.ini

如果是linux系統存在遍歷,那么可以試試,查看喜聞樂見的存儲密碼的文件,/etc/shadow等
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/passwd
常見敏感信息路徑: Windows系統 c:\boot.ini // 查看系統版本 c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件 c:\windows\repair\sam // 存儲Windows系統初次安裝的密碼 c:\ProgramFiles\mysql\my.ini // MySQL配置 c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密碼 c:\windows\php.ini // php 配置信息 Linux系統常見目錄 /etc/passwd // 賬戶信息 /etc/shadow // 賬戶密碼文件 /usr/local/app/apache2/conf/httpd.conf // Apache2默認配置文件 /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虛擬網站配置 /usr/local/app/php5/lib/php.ini // PHP相關配置 /etc/httpd/conf/httpd.conf // Apache配置文件 /etc/my.conf // mysql 配置文件
這種情況是最理想的,一般都會做的有防護,
常見的繞過姿勢有:
文件截斷繞過
在php版本小於5.3.4的服務器中,當Magic_quote_gpc選項為off時,我們可以在文件名中使用%00進行截斷,也就是說文件名中%00后的內容不會被識別
這種適用與低版本的php,已經很少見了 文件截斷
黑名單繞過
這種適用與不完全的黑名單過濾,比如http https ../ ..\等
可以雙寫構造繞過
Unicode/UTF-8編碼繞過
..%c0%af 表示 ../
..%c1%9c 代表 .. \
等等。
權限繞過(水平越權)
通過某權限的用戶去訪問了類型相似權限相同的用戶資源等,稱之為水平越權。
就比如一個數據包提交是查詢某用戶訂單的,通過修改參數后發回給服務器端
如果能正確返回修改后參數的查詢結果,那么就存在水平越權了
https://127.0.0.1/admin/addUser.jsp
數據包為
POST /admin/addUser.jsp HTTP/1.1 Host: 127.0.0.1 ...
.... userID=otherID&role=3&group=grp001
通過修改用戶ID查詢到不屬於本用戶的訂單
權限提升(垂直越權)
通過用戶權限去訪問到了高一級甚至管理員權限的資源,可以執行對應權限操作稱之為垂直越權。
權限提升一般是由於應用程序自身的缺陷引起的,最后導致程序執行的操作擁有比開發人員或系統管理員預期更多的權限。
比如操縱條件值:在服務器發送錯誤消息時,該消息包含在一組相應代碼中的特定響應碼參數中,如
@0`1`3`3``0`UC`1`Status`OK`SEC`5`1`0`ResultSet`0`PVValid`-1`0`0` Notifications`0`0`3`Command Manager`0`0`0` StateToolsBar`0`0`0`
StateExecToolBar`0`0`0`FlagsToolBar`0
如果我們將“PVValid”從-1改為0,那可能代表沒有錯誤,從而可能通過管理員身份驗證。
操縱用戶配置權限:下面服務器的響應顯示校驗成功后返回給用戶的HTML中的隱藏字段。
HTTP/1.1 200 OK Server: Netscape-Enterprise/6.0 Date: Wed, 1 Apr 2006 13:51:20 GMT Set-Cookie: USER=aW78ryrGrTWs4MnOd32Fs51yDqp; path=/; domain=www.example.com Set-Cookie: SESSION=k+KmKeHXTgDi1J5fT7Zz; path=/; domain= www.example.com Cache-Control: no-cache Pragma: No-cache Content-length: 247 Content-Type: text/html Expires: Thu, 01 Jan 1970 00:00:00 GMT Connection: close <form name="autoriz" method="POST" action = "visual.jsp"> <input type="hidden" name="profile" value="SysAdmin"> <body onload="document.forms.autoriz.submit()"> </td> </tr>
就比如進行一些操作的時候數據包里面有一些標識 user,更改這些標識為admin 、 SysAdmin等,某些不規范的網頁就能繞過,
將你識別為管理員身份,然后就能以管理員身份進行操作了。
這個例子就是把 name="profile"改成SysAdminn,可能越權。
不安全直接對象的引用
不安全的對象直接引用,指一個已經授權的用戶,通過更改訪問時的一個參數,從而訪問到了原本其並沒有得到授權的對象。
注意下面的兩點原因:
-
Web應用往往在生成Web頁面時會用它的真實名字,且並不會對所有的目標對象訪問時來檢查用戶權限,所以這就造成了不安全的對象直接引用的漏洞。
-
服務器上的具體文件名、路徑或數據庫關鍵字等內部資源被暴露在URL或網頁中,攻擊者可以嘗試直接訪問其他資源。
比如某網站:http://example.test/online/news.php?item=28Jan2016.html
那么可以嘗試訪問http://example.test/online/news.php?item=../../../../winnt/win.ini
目錄遍歷和開放重定向都屬於不安全直接對象的引用,比如302跳轉這些。
302跳轉漏洞:
比如下面這個鏈接,咪咕閱讀的訪問會跳轉到某個apk的下載,
https://wap.cmread.com/r/p/lkym.jsp?ln=20678_303112__0_1_&tgu=?layout=3&fr=1&purl=/r/p/dlAndriod.jsp&vt=3
可以通過抓包來修改他的訪問路徑

改成dnslog來看看,重發后,看到dnslog有記錄,代表着構造跳轉成功:

具體繞過姿勢可參考:
https://www.cnblogs.com/happystudyhuan/p/11767395.html
curl
https://www.freebuf.com/articles/web/265646.html ssrf的利用
