본문 바로가기
웹/드림핵

login-1

by SH_L 2022. 5. 14.
반응형

[문제]

 

 

[풀이]

 

문제에 접속화면 로그인을 할 수 있는 /login 페이지, 회원가입을 할 수 있는 /register 페이지, password를 찾을 수 있는 /forgot_password 페이지를 확인할 수 있다. 우선 소스 코드를 살펴보자.

 

 

소스 코드를 살펴보면 guest 계정과 admin 계정의 userLevel을 0과 1로 나눈 것을 확인할 수 있다.

 

 

/forgot_password 페이지에서는 사용자가 backupCode를 입력하여 입력한 값이 일치한다면 password를 변경해주고 있다. 이때, sleep(1)을 걸어서 1초 내에 여러 접근이 발생할 경우 race condition 취약점이 발생한다. 해당 취약점을 이용하여 burte force Attack을 수행해 문제를 해결하는 것으로 보인다.

 

 

password를 찾기 위해 사용하는 backupCode의 경우 1에서 100까지의 정수를 무작위로 부여하고 있다.

 

 

userLevel이 1인 계정만 /admin 페이지로 접근이 가능하며, 해당 페이지로 접속할 경우 플래그를 얻을 수 있다.

 

 

userid, password, Name의 값을 모두 user로 설정한 뒤에 회원가입을 진행했다.

 

 

회원가입을 한 user 계정으로 로그인을 진행하면 다음과 같이 BackupCode를 확인할 수 있다.

 

 

다시 메인 화면으로 돌아오면 오른쪽 상단에 로그인 한 계정의 정보를 확인할 수 있다. 이때, 'ID:user' 탭을 누를 경우 /user/17 페이지로 넘어간다.

 

 

개발자 도구를 열어 살펴보니 /user/17 페이지로 하이퍼링크가 연결되어 있는 것을 확인할 수 있다.

 

 

/user/17 페이지에서는 로그인 한 사용자의 정보를 확인할 수 있기에 혹시 /user/ 뒤에 17이 아닌 다른 숫자를 입력해도 다른 페이지로 넘어갈 지 궁금해 /user/1 페이지로 접속을 시도해보았다.

 

 

/user/1 페이지로 접속하자 UserLevel이 1인 계정을 확인할 수가 있었다. 아마도 Apple 계정으로 로그인 한 다음에 /admin 페이지로 이동한다면 플래그를 얻을 수 있을 것으로 보인다.

 

Apple 계정의 password를 알지 못하기에 바로 로그인을 시도할 수 없다. 따라서 /forgot_password 페이지에 존재하는 취약점을 이용하여 Apple 계정의 password를 임의의 값으로 변경한 다음에 Apple 계정으로 로그인을 시도한다.

 

 

/forgot_password 페이지에 존재하는 race condition 취약점을 이용하여 Burte force attack을 수행하기 위해 다음과 같이 코드를 작성했다. Apple 계정의 새로운 password를 Apple2라고 설정하고, sleep(1)이 걸린 상태에서 thread로 backupCode 값을 1부터 100까지 요청을 보내준다.

 

 

코드를 실행하면 backupCode 값을 1부터 100까지 무작위로 대입하여 요청을 보내는 것을 확인할 수 있다.

 

요청이 끝난 후 userid, password 값을 각각 Apple, Apple2로 로그인을 시도하니 Apple 계정으로 로그인에 성공했다.

 

 

/admin 페이지로 이동하여 플래그를 확인했다.

반응형

' > 드림핵' 카테고리의 다른 글

devtools-sources  (0) 2022.08.20
funjs  (0) 2022.05.14
session  (0) 2022.05.14
web-misconf-1  (0) 2022.05.10
simple-ssti  (0) 2022.05.10