0x00脆弱性の説明
Apache Shiroは、認証、承認、パスワード、セッション管理を実行する強力で使いやすいJavaセキュリティフレームワークです。 Apache Shiro Authenticationバイパス脆弱性CVE-2020-11989の以前の修正パッチに欠陥がありました。 1.5.3以前には、ShiroがURLを処理する際にまだ春と違いがあるため、ID検証バイパスの脆弱性がまだあります。認証要求の処理がエラーにより、リモート攻撃者は、特別に作成されたHTTPリクエストを送信し、認証プロセスをバイパスし、アプリケーションへの不正アクセスを取得できます。
0x01脆弱性の影響
apache shiro 1.6.0
0x02環境構築
1。プロジェクトをローカルhttps://github.com/l3yx/springboot-shiro2にダウンロードします。 POM.xmlの1.5.2を1.5.3で置き換え、SRC/Main/Java/org/syclover/srpingbootshirologingincontrollerで/admin/pageで/admin/{name}
3でバックグラウンド検証を交換します。 Idea Editorを再構築して実行します。コンパイルされた戦争パッケージをTomcatの下のWebAppsディレクトリに入れて実行します。 https://github.com/backlion/demo/blob/master/srpingboot-shiro-0.1-snapshot.war
0x03コード説明
1。 shiroconfig.java(pringboot-shiro-master \ src \ main \ java \ org \ syclover \ srpingbootshiro \ shiroconfig.java)許可設定。 /admin/*リソースを要求するとき、302はアイデンティティ認証のためにログインページにジャンプします名前の名前(アイデンティティ認証のトリガー)
0x04脆弱性の再発
1。リクエストルートでリソース名が指定されていない場合、認証はトリガーされず、リソースが返されません。33http://192.168.1.9:8080/srpingboot-shiro-0.0.1-snapshot/admin
2。リクエストルートでリソース名を指定する場合、302は認証ページにジャンプします:http://192.168.1.933608080/srpingboot-shiro-0.0.1-snapshot/login
3。特定のPOCリクエストを作成すると、指定されたリソースがリクエストされる場合、認証はトリガーされず、許可はバイパスされます(%3Bでバイパス)3http://192.168.1.1.9:80800/SRPINGBOOT-SHIRO-0.0.1-SNAPSHOT/ADMIN/
0x05脆弱性分析
問題はorg.apache.shiro.web.util.webutilsにあることがわかります。ここにブレークポイントを置いてからデバッグしてください。が更新され、getServletpathとgetpathinfoを使用してURLを取得しました。ただし、実際の脆弱性ポイントはここにありません。
スプライシング後のURLが大丈夫であることがわかります。
のセミコロン処理を削除した後、 /admin /*のみが保持されていることがわかります。テスト用のコントローラーへのルートを追加/管理することができます@getMapping( '/admin*')
public string admin2(){
返品「ログインしてください、admin」;
} http://192.168.1.933608080/srpingboot-shiro-0.0.1-snapshot/admin/*
アクセスを確認する許可はありません。もちろん、後でパラメーターを追加すると、アクセス許可が必要です。
フォローアップremovesemicolon
同様に、コンテンツの後。を含む。
Springがそれをどのように処理するか見てみましょう
Springには問題がありません。
URLを処理する方法を見てみましょう
`org.springframework.web.util.urlpathhelper#decodeandcleanuristring
removesememicoloncontent#remove;そして後の部分
decoderequestString#urldecodeデコード
getAnitizedPath#を置き換える//shiroは反対のであるが、urldecodeが最初に実行され、それが削除され、脆弱性デバッグの場所:shiro-web-1.5.3.jar //org.apache.shiro.util.webutils.java
//行111
public static string getpathwithinapplication(httpservletrequestリクエスト){
return remormize(removesemicolon(getservletpath(request) + getpathinfo(request)));
} pring-web-5.2.5.Release.jar //org.springframework.web.util.urlpathhelper.java
//行459
private string decodeandcleanuristring(httpservletrequest request、string uri){
uri=removesemicoloncontent(uri);
uri=decoderequestString(request、uri);
uri=getSanitizedPath(uri);
uriを返します。
}
0x06脆弱性修正
現在、公式の脆弱性の修正バージョンがリリースされ、更新されたApache Shiro=1.6.0
0x07参照
https://github.com/lyy289065406/cve-2020-139333https://www.cnblogs.com/ph4nt0mer/p/135359999.htmlhttps://xz.aliyun.com/t/8223
Recommended Comments