<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    shiro權限分析

    VSole2021-10-27 15:21:57
    寫這個的時候昏昏沉沉的可能有些地方沒說清楚,可以看一下參考鏈接那個老哥說的很詳細。自己
    就記錄一下。
    

    CVE-2020-1957

    漏洞代碼地址
    https://github.com/threedr3am/learnjavabug/blob/master/shiro/auth-bypass(shiro%3C1.5.3)/pom.xml
    參考文章
    http://wjlshare.com/archives/1591
    Apache Shiro <= 1.4.1
    Spring 框架中只使用 Shiro 鑒權
    先看一下靶場效果,直接訪問bypass會調到鑒權,加一個/就繞過了鑒權
    

    看看filter的鑒權路徑咋寫的。
    

    斷點先下起來再看,在這里getPathWithinApp
    

    進入getRequestUri看看對uri的處理。在decodeAndCleanUriString中判斷了有無;號,在
    normalize()中對uri進行了處理。可以看第二個分析比較詳細,這里就簡單說說了。就是對一些字
    符進行了優化處理。然后保存在requestUri中,再講requestUri與需要鑒權的路徑做比較。
    

    getChain(),直接跟,在這里就做比較了,因為我們添加了/所以比較失敗返回null,導致了權限
    繞過
    poc
    http://localhost:8080/bypass/
    http://localhost:8080/login/..;/bypass
    

    CVE-2020-11989

    漏洞代碼地址
    https://github.com/threedr3am/learnjavabug/blob/master/shiro/auth-bypass(shiro%3C1.5.3)/pom.xml
    參考文章
    http://wjlshare.com/archives/1591
    漏洞產生的原因是因為 Spring 與 Shiro 之間對 url 的處理不同從而導致權限繞過
    Apache Shiro <= 1.5.2
    Spring 框架中只使用 Shiro 鑒權
    需要后端特定的格式才可進行觸發
    即:Shiro權限配置必須為 /xxxx/* ,同時后端邏輯必須是 /xxx/{variable} 且 variable 的類型
    必須是 String
    環境搭建參考參考文章
    下個斷點進行調試分析
    漏洞原理:利用shiro在做匹配的時候,如果是e0mlja/*格式,則只會匹配e0mlja目錄下,如果再
    加一層目錄可繞過匹配,如e0mlja/123/123就繞過了e0mlja/*對123的匹配。也可以利用;取到;之前
    的鏈接進行繞過。看看效果
    

    從代碼來看,我們是想要訪問bypass下的目錄的,但是正常訪問會被攔截到登錄頁面。
    

    環境是這么個環境,接下來就開始調試看看具體的內容了。在getPathWithinApplication下個斷點。
    

    進入getRequestUri,看看對url的處理。
    

    進入decodeAndCleanUriString()
    

    根據運行的執行結果來看,這里是對uri進行了一次url解碼。利用indexof(59)來判斷是否存在;號,
    有的話返回;前的內容,否則就返回uri的內容。
    

    再進入normalize()函數
    

    從ascii對照表中看到是對\的判斷。來看一下具體的處理。
    (1)替換\\為/
    (2)替換/.為/
    (3)不是/開頭的話添加/
    

    處理完了以后,滿足不存在// /./ /../ 這三種,才進行返回。
    直接向下 到這里看看
    

    簡單梳理一下邏輯
    (1)先看是否存在filter的設置,不存在返回null
    (2)獲取我們的請求地址,簡單判斷,然后對我們需要鑒權的路徑進行一個遍歷,看看在不在其中。
    (3)判斷完了如果都不存在,則返回null,退出函數。然后不做filter,選擇默認的。能看到是沒
    有權限校驗的。
    

    修復
    在 Shiro 1.5.3 版本中對 getPathWithinApplication 進行了修改,取消了 url 解碼的函數,所
    以我們這里的 uri 并不會被完全解碼,繞過bypass的鑒權
    poc:
    http://localhost:8080/bypass/bypass/aaa%252Faaa
    http://localhost:8080/;/bypass/bypass/111
    

    CVE-2020-13933

    Apache Shiro < 1.6.0
    Spring 框架中只使用 Shiro 鑒權
    需要后端特定的格式才可進行觸發
    
    即:Shiro權限配置必須為 /xxxx/* ,同時后端邏輯必須是 /xxx/{variable} 且 variable 的類型
    必須是 String
    我們知道shiro的上版本修復是省去了自動url解碼。這里還是存在繞過的可能。
    

    還是下斷點來看一下,前面兩個已經分析的差不多了關鍵函數,所以這里直接來找不同看看。這里
    對;進行了處理。返回了分號之前的內容,也就是我們的兩個bypass。這里通過跟蹤發現,還是繞過
    了鑒權的uri。感覺和之前的/繞過有點契合。對比一下,高版本少了一次url的解碼。其他的就不多
    說了 和前兩個分析一樣
    poc
    http://localhost:8080/bypass/bypass/%3b123
    

    CVE-2020-17523

    Apache Shiro < 1.7.1
    
    Spring 框架中只使用 Shiro 鑒權
    
    需要后端特定的格式才可進行觸發
    
    即:Shiro權限配置必須為 /xxxx/* ,同時后端邏輯必須是 /xxx/{variable} 且 variable 的類型
    必須是 String
    poc
    http://localhost:8080//bypass/bypass/%20
    這個就不過多重復分析了,還有一點需要注意的就是spring對uri的處理,否則傳入的錯誤路徑可能
    會導致有問題。最后復現的時候需要注意java的版本,高版本可能會導致環境搭建不成功。
    

    前面都是大同小異,來看看不同的 domatch這里,
    

    這里自動將空格去除了。也就是說形成了/bypass/bypass/這種,而/*未匹配到東西,所以不會調到
    鑒權頁面
    

    poc
    http://localhost:8080/bypass/bypass/%20
    
    shirolocalhost
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    shiro權限分析
    2021-10-27 15:21:57
    寫這個的時候昏昏沉沉的可能有些地方沒說清楚,可以看一下參考鏈接那個老哥說的很詳細。看看filter的鑒權路徑咋寫的。進入getRequestUri看看對uri的處理。符進行了優化處理。然后保存在requestUri中,再講requestUri與需要鑒權的路徑做比較。根據運行的執行結果來看,這里是對uri進行了一次url解碼。這里自動將空格去除了。
    前言某次小型紅藍,直接丟過來幾個登陸框,定點打。環境介紹全部都是shiro框架。過程爆破用戶名密碼,都是加密的。查看網頁源代碼的時候,發現其中一個利用的DES-ECB的單層加密。果斷生成大量的字段。我的超大字典,都沒有爆破出一個有效的賬號。一上午毫無收獲,陷入沉思。用上午在A系統登陸顯示沒有應用權限的賬號,但是不會自動解壓,沒有找到可以利用的點。在目標機器部署了cs。
    拿到一個系統后,很多情況下只有一個登錄入口。如果想進一步得到較為高危的漏洞,只能去尋找權限校驗相關的漏洞,再結合后臺洞,最終得到一個較為滿意的漏洞。
    fastjson.jar是阿里開發的一款專門用于Java開發的包,可以方便的實現json對象與JavaBean對象的轉換,實現JavaBean對象與json字符串的轉換,實現json對象與json字符串的轉換。除了這個fastjson以外,還有Google開發的Gson包,其他形式的如net.sf.json包,都可以實現json的轉換。方法名稱不同而已,最后的實現結果都是一樣的。
    部分getshell漏洞匯總
    2022-07-20 10:12:45
    即可未授權訪問console后臺,但是權限比較低備注:此處會出現個問題,在復現的環境中直接拼接
    滲透測試Tips
    2022-04-13 06:38:50
    知己知彼,百戰不殆1、如果提示缺少參數,如{msg:params error},可嘗使用字典模糊測試構造參數,進一步攻擊。
    將這些指標對接到 prometheus、zabbix 等監控系統,能夠對應用程序持續檢測,發現異常可以及時告警并得到處理。以 Prometheus 為例,應用程序通過暴露出 HTTP 接口,讓 Prometheus 周期性地通過該接口抓取指標,這就是 Pull。
    細說從0開始挖掘cms-
    2022-08-17 16:26:57
    確立目標挖洞的第一步首先是確立一個目標,也就是找個cms來挖,這里可以通過github,gitee或者谷歌百度直接去搜cms。或者cnvd查看相應的信息,通過查看相應的信息可以提高我們挖洞的效率,我們從中可以知道該項目已經存在漏洞,我們到時候挖就可以看看相應的地方會不會還存在漏洞或者避免挖到別人挖過的漏洞。本次挖掘的漏洞是ofcms,首先先下載一下源碼,然后解壓丟一邊,回到網頁來看一下項目文檔。
    一次成功的Shiro Padding Oracle需要一直向服務器不斷發包,判斷服務器返回,攻擊時間通常需要幾個小時。因為這些程序沒有對發包失敗拋出異常的情況做出處理,從而導致工具停止工作。最終,攻擊成功了,我虛擬機下花了不到1小時共計完成,但是在真實生產環境測試,攻擊成功一次DNS或者JRMPClient攻擊,程序需要跑大約4個小時左右,2次攻擊加起來近9個小時。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类