[normaltic 취업반 5기] 2024-02-21 16주차 내용 정리 : 인증 취약점

2024. 2. 26. 08:04normaltic 취업반 5기/내용 정리

 

인증(Authentication)

 

  인증이란 클라이언트 본인이 맞는지를 확인하는 과정을 의미한다. 로그인 과정이 가장 잘 나타낸 예시이며 특정 아이디로 로그인 시 해당하는 비밀번호를 입력함으로써 인증 과정을 진행한다. 이를 달리 말하면 '식별 가능한 정보(아이디)로 클라이언트의 신원을 입증하는 과정'을 '인증'이라 한다.

 

 

인증 취약점 대표적인 경우

 

  인증 취약점이 발생하는 대표적인 상황들은 다음과 같으며 각각의 상황들을 문제 실습을 통해 알아보도록 하자.

 

  1. Cookie를 통해 인증하는 경우
  2. 직접적으로 접근 시도하여 Process를 패싱 하는 경우
  3. 파라미터의 응답값을 변조하는 경우
  4. 인증 횟수에 제한이 없는 경우

 

1) Cookie를 통해 인증하는 경우

 

 

  • 실습 문제 : Get Admin
  • 문제 목표 : admin 계정으로 접속
  • 주어진 조건 : [ID/PW] doldol/dol1234

 

 

  실습 문제의 URL로 접근하면 로그인 페이지를 볼 수 있으며 아이디와 비밀번호를 입력 후 Sign in 버튼을 클릭하는 구조로 구성되어 있다. 

 

 

  주어진 아이디와 비밀번호를 활용하여 로그인을 하게 되면 정상적으로 로그인 되었다는 문자가 출력된다.

 

 

  프록시툴을 사용하여 요청 헤더에서 Cookie를 확인해 보면 쿠키명이 loginUser에 쿠키값으로 로그인 성공 시의 아이디가 저장되어 있는 것을 확인할 수 있다. 이는 loginUser 쿠키값으로 인증 과정을 거친다는 추측을 해볼 수 있다. 

 

 

  위 추측에 따라 문제의 목표인 관리자 계정으로 로그인하기 위해 loginUser 쿠키값으로 admin을 저장하여 요청을 한다.

 

 

  요청하게 되면 관리자 계정으로 로그인되며 문제의 플레그를 획득할 수 있다.

 

 

2) 직접적으로 접근 시도하여 Process를 패싱하는 경우

 

 

  • 실습 문제 : PIN CODE Bypass
  • 문제 목표 : 관리자 권한으로 핵미사일 시스템 버튼 클릭

 

 

  실습 문제의 URL로 접근하면 핵미사일 시스템을 발사하는 Fire 버튼이 존재한다. 클릭을 하게 되면 관리자만 이용 가능하다며 기능을 사용할 수 없다.

 

 

  이때 해당 웹 페이지의 URL을 확인해보면 /step1.php라는 이름으로 이루어져 있다. 그렇다면 여기서 문제의 웹 페이지 이름들은 stepX.php 형태로 이루어져 있을 수 있다는 추측을 해볼 수 있다. 

 

 

  웹 페이지 이름을 step2.php으로 입력했더니 관리자 인증이 필요하고 밑에 비밀번호를 입력하는 칸이 존재한다. 해당 웹 페이지는 인증 과정을 거쳐야 하는 것을 확인하였다.

 

 

  웹 페이지 이름을 step3.php으로 입력했더니 Fire 버튼 말고는 다른 내용이 존재하지 않았다.

 

 

  Fire 버튼을 클릭하게 되면 해당 문제의 플레그를 획득할 수 있다.

 

 

3) 파라미터의 응답값을 변조하는 경우

 

 

  • 실습 문제 : Admin is Mine
  • 문제 목표 : admin 계정으로 접속
  • 주어진 조건 : [ID/PW] doldol/dol1234

 

 

  실습 문제의 URL로 접근하면 로그인 페이지를 볼 수 있으며 아이디와 비밀번호를 입력 후 Sign in 버튼을 클릭하는 구조로 구성되어 있다.

 

 

  주어진 아이디와 비밀번호를 활용하여 로그인을 하게 되면 정상적으로 로그인되었다는 문자가 출력된다.

 

 

  프록시툴을 통해 로그인 과정을 확인해 보면 로그인 시 인증 과정을 거치게 되면 서버에서 응답 파라미터 result의 값으로 'ok'를 전달하고 인증 과정을 통과하지 못하면 'fail'을 전달한다. 그렇다면 로그인 시 전달되는 응답 파라미터 result 값에 따라 인증 여부가 결정된다는 추측을 해볼 수 있다.

 

 

  문제의 목표는 관리자 계정 접속이므로 아이디는 'admin'으로 입력하고 비밀번호는 임의로 입력 후 Sing in 버튼을 클릭한다(관리자 계정의 비밀번호는 모르는 상황).

 

 

  이때 인증 과정을 통과하기 위해 응답 결과를 가로채어  'result' 파라미터 값을 'fail'에서 'ok'로 변경해 준 후 가로챈 결과를 놓아준다.

 

 

  그 결과 다시 로그인 페이지로 이동한 것을 볼 수 있다. 왜 이런 현상이 나타났는지 알아보기 위해 프록시툴을 통해 확인해 본다.

 

 

  프록시툴로 확인해 본 결과 'admin'계정의 인증 과정을 거친 후 도달하는 index.php 페이지에는 상단에 login.php 페이지로 이동시키는 코드가 존재하였다. 해당 코드는 위 과정과 같은 작업을 통해 지울 수 있으며 이를 통해 문제를 해결할 수 있다.

 

 

  위 문제 해결 방법을 통해 해당 문제의 플레그를 획득할 수 있다.

 

 

4) 인증 횟수에 제한이 없는 경우

 

 

  • 실습 문제 : Pin Code Crack
  • 문제 목표 : PIN 번호 크랙

 

 

  실습 문제의 URL로 접근하면 로그인 페이지를 볼 수 있으며 LOGIN 버튼을 클릭하게 되면 특정 전화번호로 전송된 PIN Code 숫자 4자리를 입력하라는 내용을 확인할 수 있다. 그러나 해당 문제에서는 아무런 정보도 주어지지 않았고 또한 프록시툴로 확인해본 결과 취약점과 연결되는 정보는 존재하지 않았다. 단 하나 알 수 있는 점은 틀린 PIN Code 입력 시 횟수 제한이 없다는 것이다. 횟수 제한이 존재하지 않는다는 것은 곧 브루트 포스 공격이 가능하다는 의미이기도 하다.

 

  따라서, 해당 문제는 일치하지 않는 PIN Code 입력에 따른 횟수에 제한이 존재하지 않기에 브루트 포스 공격으로 숫자 4자리 조합을 계속해서 입력하여 일치하는 PIN Code를 찾아낼 수 있다.