728x90
728x90
728x90
 

itsecgames.com

 

www.itsecgames.com

[사진 1]

로그인 페이지이다. 문제 제목을 보면 안전하지 않은 로그인 폼이라고 한다. 일반적으로 로그인 프로세스는 입력된 로그인 정보를 서버에서 체크하여 올바른 로그인 정보일 때 로그인을 성공한다.

 

low

[사진 2]
[사진 3]

low 레벨이다. bee/bug 계정으로 로그인을 실패하면 [사진 2]와 같이 올바르지 않은 계정이라고 한다. 또한, burp 도구로 프록시를 잡아도 login, password 파라미터 이외에 전달되는 값은 없다.

 

[사진 4]

크롬 브라우저의 개발자 도구를 통해 소스코드를 보면 로그인 폼에 흰색으로 "tonystark", "I am Iron Man"이라는 수상한 문자열이 박혀 있다.

 

[사진 5]

드래그를 해보면 배경과 같은 색인 흰색으로 문자열이 박혀 있는 것을 확인할 수 있다.

 

[사진 6]

이 문자열을 입력하면 로그인에 성공하는 것을 확인할 수 있다. low 레벨은 로그인 정보를 html 소스코드에 박아놨기 때문에 매우 위험하다.

 

medium

[사진 7]
[사진 8]

medium 레벨이다. medium 레벨로 변경하면 [사진 7]과 같이 Name 값에 "brucebanner" 문자열이 박혀 있다. passphrase를 입력하여 unlock하라고 한다.

 

[사진 9]

html 소스코드를 보면 low 레벨과 다르게 Passphrase에 로그인 정보가 하드코딩되어 있지 않다. 대신에 unlock_secret() 함수를 실행하는 것을 확인할 수 있다.

 

[사진 10]

unlock_secret() 함수는 브라우저에서 확인할 수 있는 ba_insecure_login_2.php 소스코드에 존재하는데, 하드코딩되어 있는 bWAPP 변수에서 특정 문자를 가져와서 secret 변수를 설정한다. 그리고 사용자가 입력한 passphrase와 비교하여 일치하면 로그인을 성공한다. [사진 10]에 초기화된 순서대로 secret 정보를 맞추면 되는데, 조금 더 쉬운 방법으로 브라우저 디버깅을 통해 secret 정보를 쉽게 획득할 수 있다.

 

[사진 11]

secret 변수를 초기화한 직후에, break point를 설정하고 웹페이지에서 unlock 버튼을 클릭하면 위와 같이 secret 정보가 생성되고 브라우저가 중지된다. 빨간색 박스를 보면 "hulk smash!"라는 문자열을 확인할 수 있다. 이 문자열이 passphrase이다.

 

[사진 12]

올바른 passphrase를 입력하면 위와 같이 unlock 문구가 출력된다. low 레벨보다는 보안이 강화되었지만 결국엔 클라이언트 측에서 passphrase를 생성하고 비교하기 때문에 안전하지 않은 방법이다.

 

high

[사진 13]
[사진 14]

high 레벨이다. high 레벨의 경우 bee/bug 계정으로 로그인하면 정상적으로 로그인이 된다.

 

[사진 15]

html 소스코드를 보면 로그인 정보가 하드코딩되어 있지 않다. 즉, 입력한 로그인 정보가 서버로 전송되고 서버에서 로그인 정보를 체크한 후, 올바른 로그인 정보일 경우 로그인을 성공하는 것으로 추측할 수 있겠다.

 

[사진 16]

high 레벨일 때 서버에서 사용되는 코드를 보면 전달한 로그인 정보와 DB 내의 로그인 정보를 비교하여 일치하면 로그인을 성공하는 것을 확인할 수 있다. low, medium 레벨과 비교하여 로그인 정보를 서버에서 체크하기 때문에 비교적 안전한 로그인 프로세스라고 할 수 있겠다.

728x90
728x90

+ Recent posts