KoreanHackerTeam
Moderator
0x00 漏洞描述
Apache Shiro는 인증, 인증, 암호 및 세션 관리를 수행하는 강력하고 사용하기 쉬운 Java 보안 프레임 워크입니다. Apache Shiro 인증 우회 취약성 CVE-2020-11989의 이전 수정 패치에 결함이있었습니다. 1.5.3과 그 이전에는 Shiro가 URL을 처리 할 때 봄과 여전히 차이가 있기 때문에 여전히 신원 확인 우회 취약성이 있습니다. 인증 요청 처리의 오류로 인해 원격 공격자는 특별히 제작 된 HTTP 요청을 보내고 인증 프로세스를 우회하고 응용 프로그램에 대한 무단 액세스를 얻을 수 있습니다.0x01 漏洞影响
Apache Shiro 1.6.00x02 环境搭建
1. 프로젝트를 로컬 https://github.com/l3yx/springboot-shiro2로 다운로드하십시오. pom.xml에서 1.5.2를 1.5.3으로 바꾸고/admin/page와 함께/admin/page와 함께 src/main/java/syclover/srpingbootshirologintroller에서 배경 검증을 교체하십시오. 아이디어 편집기를 재건하고 실행하십시오. 컴파일 된 전쟁 패키지를 Tomcat 아래의 Webapps 디렉토리에 넣고 실행하십시오. https://github.com/backlion/demo/blob/master/srpingboot-shiro-0.1-snapshot.war0x03 代码说明
1. shiroconfig.java (pringboot-shiro-master \ src \ main \ java \ org \ syclover \ srpingbootshiro \ shiroconfig.java) 권한 구성. /admin/* 리소스를 요청할 때 302는 신분증 인증에 대한 로그인 페이지로 점프합니다. 리소스 명명 된 이름 (ID 인증 트리거링)
0x04 漏洞复现
1. 요청 경로에 리소스 이름이 지정되지 않은 경우 인증이 트리거되지 않으며 리소스가 반환되지 않습니다.


0x05 漏洞分析
문제가 org.apache.shiro.web.util.webutils에 있음을 알 수 있습니다. 여기에 중단 점을 놓은 다음 디버깅하십시오.


공개 문자열 admin2 () {
'로그인, 관리자'를 반환합니다.
} http://192.168.1.9:8080/srpingboot-shiro-0.0.1-snapshot/admin/*


후속 조치를 제거합니다

마찬가지로, 이후의 내용; 다음을 포함하여 잘린다;
스프링이 어떻게 처리하는지 봅시다

Spring은 문제가 없습니다. 귀하가 얻는 것은 /admin /; page입니다. 그런 다음 /admin /{name} 경로와 일치하는 전체 문자열로 페이지를 사용하여 권한을 우선합니다.
URL을 처리하는 방법을 봅시다
`org.springframework.web.util.urlpathhelper#decodeandcleanuristring

제거 세미 콜론 턴트 # 제거; 그리고 나중에
decoderequestString # urldecode 디코딩
getSanitizedPath # 대체 ////shiro가 반대입니다.
//라인 111
public static string getPathWithInApplication (httpservletRequest 요청) {
return normalize (removeSemicolon (getServletPath (요청) + getPathInfo (요청)));
} pring-web-5.2.5.release.jar //org.springframework.web.util.urlpathhelper.java
//라인 459
개인 문자열 decodeandcleanUristring (httpservletrequest 요청, String uri) {
uri=제거 세미 콜론 턴 (URI);
uri=decoderequestString (요청, uri);
uri=getSanitizedPath (uri);
반환 URI;
}