0x00脆弱性簡単な説明
1.5.3より前のApache Shiroの
0x01脆弱性の影響
Spring Dynamic Controllerを使用してApache Shiroを使用すると、慎重にコンパイルされた要求が認証のバイパスにつながる可能性があります。直接アクセス/shiro/admin/pageの場合、302ジャンプを返してログインします。アクセス/;/shiro/admin/ページでは、1.5.3より前に/管理ルート
0x02環境構築
Apache ShiroでShiroの許可を直接バイパスしてアクセスできます。 Spring Frameworkでは、Shiro認証のみが使用されます。 1.プロジェクトをローカルhttps://github.com/l3yx/springboot-shiro2にダウンロードします。 Idea Editorを介してWarパッケージにコンパイルし、Tomcatの下のWebAppsディレクトリに入れて実行します。戦争パッケージはここにまとめられています:https://github.com/backlion/demo/blob/master/shiro.war
0x03脆弱性の再発
1。許可構成は次のとおりです。
shirofilterfactorybean shirofilterfactorybean(){
shirofilterfactorybean bean=new shirofilterfactorybean();
bean.setsecuritymanager(securitymanager());
bean.setloginurl( '/login');
bean.setsuccessurl( '/index');
bean.setunauthorizedurl( '/unauthorizedurl');
mapstring、string map=new linkedhashmap();
map.put( '/dologin'、 'anon');
map.put( '/admin/*'、 'authc');
bean.setFilterChainDefinitionMap(Map);
豆を返します。
}
---
@getMapping( '/admin/page')
public string admin(){
「管理者ページ」を返します。
} 2.Mavenパッケージプロジェクトはshiro.warであり、Tomcatに展開されています。この脆弱性はうまく活用されています。アプリケーションがルートディレクトリにルートディレクトリを展開できない2つの条件があります。つまり、コンテキストパスが必要です、server.servlet.context-path=/shiro。ルートディレクトリの場合、コンテキストパスは空で、URLはCVE-2020-1957のパッチによってフォーマットされます。 Shiroバージョンが1.5.2未満の場合、この条件は必要ないことは注目に値します。 Spring Controller 3に他の許可確認コードはありません3。直接アクセス/Shiro/Admin/ページの場合、302ジャンプを返し、ログイン4が必要になります。ただし、/;/shiro/admin/ページにアクセスした場合、Shiroの許可検証を直接バイパスして、/adminルート
0x04脆弱性分析
の情報にアクセスできます。Shiroの許可確認は、URLマッチを審査することでURLマッチを審査することで行われます。バイパス。 ShiroでのURLの取得とマッチングは、org.apache.shiro.web.filter.mgt.pathmatchingfilterchainresolver#getChainで取得されます。 getpathwithinapplication関数を介して得られたパスは/関数org.apache.shiro.web.util.webutilsの処理ロジックに従います#getpathwithinApplication
org.apache.shiro.web.util.webutils#webtils#web.util.webutilsを見ることができます。
org.apache.shiro.web.util.webutils#getRequesturi gets/
ここでは、getContextPath()getSpathinfo()getPathInfo()をget //渡された後、decodeandcleanuristringは /、org.apache.shiro.web.util.webutils#decodeandcleanuristring
になります。リクエストリクエストはspringに入ります。スプリング処理URL関数は、org.springframework.web.util.urlpathhelper#getPathWithInservletMapping
GetPathWithInApplicationプロセスの下で、コンテキストパスとルートを正しく取得できます。最後に、getPathWithInServletMapping関数がフォーマットされた後、最終パスは /admin /ページであるため、正常にページにアクセスできます。
したがって、要約すると、URLがTomcat、Tomcat Judges/; Shiro/Admin/Pageに入ると、Shiroアプリケーションの下の/管理者/ページルートであり、Shiroアプリケーションの下の/管理/ページルートです。シロに入ると、それは /と見なされます。 Springに入ると、テストアプリケーションの下で /管理/ページルートとして正しく処理され、最終的にはShiroの許可バイパスにつながります。
0x05脆弱性修正
最新バージョンにアップグレードされた、オフィシャルは新しいバージョンの脆弱性を修正しました
0x06参照
https://L33333333333333333333333333333330/30/30/30/20%90%90%90%87%87%E6%BC%8F%E6%B4%
https://xz.aliyun.com/t/8223
Recommended Comments