📌인증 취약점 예시
DATE : 2024/2/22
Last updated
DATE : 2024/2/22
Last updated
이번 POST에서는 인증 (Authentication)에서 정리했던 사례들에 대해 알아볼 것이다!!
여기 사용자가 로그인 하면 index.php로 이동하는 과정에서
아래와 같이 인증된 사용자 이름을 팝업 창에 띄우는 사이트가 있다고 한다!!
팝업 창에 출력 되는 사용자 이름을 어디에서 가져오는 지 확인하기 위해 Packet을 열어보니
인증 과정을 완료한 사용자에게는 서버가 user 라는 쿠키를 만들어 주는 걸 알 수 있었다.
서버에게 user cookie를 받은 Client는 이후 요청을 보낼 때, 이 Cookie도 함께 보내는데
아마도 이 Cookie 값을 사용하는 듯하다.
그렇다면 user cookie를 admin으로 수정한다면 어떻게 될까??
결과를 바로 확인해보면 위에서 일반 사용자에게 출력하던 문구와는 다른 문구가 나온 걸 볼 수 있다.
아마 이 사이트에서는 user cookie 값을 가지고 사용자가 누구인지 확인해 서로 다른 화면을
출력하고 있는 듯하다. 하지만 그 과정에서 Cookie 값을 가지고 확인하다 보니
Cookie를 변조함으로써 다른 사용자로 인증이 되어버리는 것!!
이번에 살펴볼 케이스는 직접 접근과 관련된 문제이다.
관리자만 접근할 수 있는 페이지에 직접 접근이 가능한 경우에 어떤 문제가 발생할 수 있는지 살펴보자.
next 버튼을 눌러 다음 페이지로 이동해보면 관리자만 알고 있는 PIN 코드를 입력하라고 한다.
만약 틀린 PIN code를 입력하면 위와 같이 팝업 창이 출력된 후, 원래 페이지로 돌아간다.
이때 URL을 유심히 보면 step1.php -> step2.php로 이동한 걸 볼 수 있는데
혹시나 싶어 step3.php를 URL 바에 직접 입력해봤다.
step3.php를 입력하면 놀랍게도 관리자의 PIN code를 입력하지 않고
다음 페이지로 접근이 가능한 걸 볼 수 있다.
이처럼 다음 페이지로 직접 이동함으로써 인증 과정을 우회할 수 있는 경우 또한
인증 취약점이라 할 수 있다.
두 번째 경우에서 다룬 페이지를 대상으로 다음 케이스를 이어 가보면..!
앞서 직접 접근에서는 다음 페이지 경로를 유추해 인증 과정을 우회 했다면 이번 케이스에서는
인증 과정을 거치긴 거칠 것이다..(?)
PIN code를 전달할 때의 URL로 자동화 코드를 작성해 4자리 PIN을 전부 입력해보면
어렵지 않게 PIN code를 알아낼 수 있다..!
위에서 알아낸 PIN code를 입력하면
다음 페이지로 이동해 관리자만 발사할 수 있는 미사일을..! 발사할 수 있게 된다.
이는 PIN code를 입력할 수 있는 횟수를 제한하지 않았기 때문에
사실 PIN code를 모르는 사람이라도 0000~9999까지 다 넣어봄으로써 인증 과정을 통과할 수 있게 된다.
마지막으로 살펴볼 사례는 응답에 포함되는 파라미터를 기반으로 인증 결과를 확인할 때,
이를 변조하는 방식으로 인증 과정을 우회 하는 상황을 보여준다.
로그인을 한 뒤 접속한 페이지에서는 현재 인증 된 사용자가 doldol임을 알려주고 있다.
이때 Packet을 확인해보면
올바른 계정을 입력한 경우, 로그인에 성공하면서(= 인증 완료)
'result': 'ok' 라는 결과를 받는 모습을 볼 수 있다.
그렇다면 만약 계정이 올바르지 않다면 어떤 결과를 받게 될까??
비밀번호를 모르는 admin 계정으로 로그인을 시도해보면 'result': 'fail' 이라는 결과를 볼 수 있다.
여기까지 봤을 때, 서버는 사용자가 입력한 계정 정보를 확인한 다음
로그인 성공 시에는 OK, 실패 시에는 FAIL을 보내주고 있는 듯하다.
그렇다면 admin 계정으로 로그인을 시도한 다음, 이 값을 ok로 변조한다면
비밀번호를 몰라도 인증을 우회할 수 있지 않을까??
burp에서 요청을 보내기 전 response to this request를 눌러준 다음
packet을 전달한다. (userId를 admin으로 입력해둔 상태에서)
그러면 서버가 보내준 응답이 딱! 잡히는 데 이때 fail을 ok로 수정한 다음 forward 시키면..!
성공적으로 admin 계정으로 로그인 된 걸 확인할 수 있을 것이다.
이처럼 응답 값을 기반으로 인증 결과를 확인하는 경우,
응답을 수정하면 간단하게인증 우회가 가능하다는 걸 볼 수 있었다!