본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 5.인증 결함 [Insecure Login Forms]

by Robert8478 2023. 12. 13.

인증 결함이란? - 인증에 필요한 사용자의 계정 정보를 노출하는 취약점으로, 웹페이지의 HTML 코드에 계정 정보를 노출하거나 혹은 인증을 GET 메서드로 요청하여 계정 정보가 노출되는 방식이다. 또한, 무차별 대입 공격이 가능하도록 허용하는 경우도 있다.
또한, 비밀번호 찾기 기능에서 계정 정보를 노출하는 경우도 존재한다.

이 페이지에서는 웹페이지가 안전하지 않은 로그인 형식을 사용하는지 점검한다.

[난이도 하]

f12로 개발자 도구를 열고 POST로 데이터를 받는 form의 아래쪽을 보면 font color"white" 라고 숨겨진 부분이 있다.

이를 black으로 바꾸게 되면 라벨 옆에 숨겨져있던 아이디 비밀번호가 나온다.
코드에도 써져있는데 아이디가 tonystark 비밀번호가 I am Iron Man 이다.

그렇게 로그인 성공

[난이도 중]

유저네임은 그대로 있는 상태이다. 코드를 보면 비밀번호는 passphrase 라는 변수명을 가지고 버튼은 unlock_secret 함수를 호출한다. 페이지에서 우클릭을 해서 소스코드 보기로 넘어가 보자.

unlock_secret 함수와 passphrase의 처리 코드가 보인다. secret 변수가 비밀번호 인 듯 한데 변수들을 하나씩 넣어서 합쳐두었다.
unlock_secret 함수에 변수들을 지정해 놓은것을 볼 수 있다. charAt 함수를 이용하고 있다. charAt 함수는 문자열 객체에서 문자 하나만 반환하는 함수로, 정수를 인자로 받아서 해당하는 순서의 문자를 출력하며 순서번호는 0부터 시작한다.

bWAPP 변수에 있는 문자열 "bash update killed my shells!" 에서 따오는 것이니 charAt을 비교해 가며 찾아내면 된다.
단, 변수들을 보면 같은 변수의 값을 여러번 덮어씌우고 있으니 가장 마지막에 선언된 변수 값을 사용하면 된다.
예를 들어 d 변수는 위에 드래그해둔 charAt(3) 이 아니라 더 뒤에있는 charAt(23) 으로 따져야 하는 것이다.

hulk smash! 라는 비밀번호를 찾아내었고 넣은 결과 클리어 되었다.

[난이도 상]

아래에 bee is bug 라는 힌트가 나오길래 bee 와 bug 를 넣어보았더니 바로 클리어 되었다.
하지만 이 값이 어디에 노출 되는지 보아야 할 것이다. 개발자 도구와 소스코드를 살펴보자.

우선 개발자 도구에서는 아무런 정보도 노출된것이 없다.

소스코드에서도 계정 정보에 대한 정보가 노출되어있지 않다.

이런식으로 소스 코드와 개발자 도구에서 볼수있는 코드에 계정 정보를 노출시키지 않는 것이 중요하다는것을 잊지 말자.