ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인증(Authentication) 취약점 실습(1~4)
    IT/웹 해킹 2024. 2. 22. 16:07

    [이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]

     

    • 목차
    1. CTF 1번 시나리오
    2. 실습
    3. CTF 2번 시나리오
    4. 실습
    5. CTF 3번 시나리오
    6. 실습
    7. CTF 4번 시나리오
    8. 실습

    1. CTF 1번 시나리오

     

     

    기존의 유저 아이디는 주어졌고 관리자 계정인 admin으로 클라이언트 측에서 정보를 인증하는 취약점(cookie값 변조)을 이용해 접속하여 플래그를 얻을 계획이다. 

     

    2. 실습

     

    1) doldol / dol124로 접속 시도를 해본다.

     

     

    2) User Name이 doldol로 나오는 것을 볼 수 있다.

     

     

    3) burp suite의 패킷을 보면 doldol로 접속을 하였을 때 클라이언트 요청 쪽에서 쿠키 값을 doldol로 요청하여 보냈고 응답 쪽의 쿠키 값을 doldol로 받아 처리한 것을 볼 수 있다.

     

     

    4) 그럼 중간의 패킷을 가로채어 admin을 쿠키 값에 넣어주면?

    기존 요청
    쿠키 변조된 요청

     

    5) admin으로 접속되어 플래그를 획득하였다.

     

     

     

    3. CTF 2번 시나리오

     

     

    핵미사일 시스템 접근 권한을 획득했다. 그러나 발사 버튼을 누르려면 인증이 필요하고 비밀번호를 입력받아 인증을 하는 단계를 거쳐야 한다. 이때 직접 접근으로 인증 단계를 뛰어넘어 발사 버튼을 누를 계획이다.

     

    4. 실습

     

    1) 처음 접속 화면에 핵미사일 시스템에 접근하여 Fire 버튼이 나온 것을 볼 수 있다.

     

     

    2) Fire 버튼을 눌러보니 관리자만 이용이 가능하다고 한다. 계속해서 확인 버튼을 눌러본다.

     

     

    3) 관리자 인증으로 비밀번호를 입력받고 인증 단계를 거쳐야 한다. 그래서 비밀번호 값에 1234를 입력해보았다.

     

     

    4) 바로 비밀번호가 틀렸다고 알림 창이 떴다.

     

     

    5) 근데 여기서 URL창을 보면 현재 단계를 보여주는 step2.php로 나온 것을 볼 수 있고 혹시나 하는 생각으로 URL에 step3.php를 입력하여 페이지에 직접 접근을 해봤다.!?! 인증 단계를 뛰어넘어 발사 버튼을 누를 수 있게 되었다. 버튼을 눌러보자.

     

     

    6) 아쉽게도(?) 진짜 핵미사일은 아니었고 플래그를 획득했다!

     

     

    5. CTF 3번 시나리오

     

     

    CTF 1번과 비슷하지만 이 문제는 쿠키 값을 클라이언트에서 생성해 인증 요청을 하지 않고 있다. 그러나 서버 측에서 검증해야 할 코드가 정상적으로 이루어지지 않아 파라미터에서 응답 값을 변조하여  인증 취약점이 발생하고 있는 점을 이용해 플래그를 획득할 것이다.

     

    6. 실습

     

    1)  doldol / dol1234로 로그인을 시도한다.

     

     

    2) 정상적으로 doldol로 로그인되는 것을 확인할 수 있다.

     

    3) 이때 burp suite의 패킷을 살펴보자. 입력값을 받아서 인증이 제대로 되면 result로 ok를 응답해 주는 것을 볼 수 있다.

     

     

    4) 그럼 admin / 1234로 비밀번호 무작위 입력하여 접속 시도를 해보자. Warning 경고 문구가 뜨는 것을 볼 수 있다.

     

     

    5) 이때 burp suite의 패킷을 살펴보면 result로 fail을 응답하는 것을 볼 수 있다.

     

     

    6) 패킷을 intercept로 가로채어 응답에서 result를 ok로 바꿔본다. 그러나 뒤에 나오는 응답에서 정보가 틀렸으니 자바스크립트로 login.php로 이동시키는 코드가 존재한다. 그러나 이 밑에를 보면 이미 로그인이 된 페이지의 화면이 출력되고 있다. 사실 로그인 된 상태의 페이지를 보여주는 HTML의 코드에 플래그도 보이지만 자바스크립트 코드를 클라이언트 본인이 지우고 응답을 포워딩해봤더니? 

     

     

    7) 로그인이 되어 플래그를 획득한 화면이 나온다.

     

     

    7. CTF 4번 시나리오

     

     

    4자리의 비밀번호를 입력받아 인증이 완료되면 플래그 값을 얻을 수 있는 구조인데 이때의 인증 취약점은 비밀번호를 아무리 틀려도 서버 측에서는 그냥 비밀번호가 틀렸다는 메시지만 준다. 이때 인증 횟수 제한의 부재를 이용하여 간단한 파이썬 코드를 작성 후 Brute Force로 비밀번호를 알아낼 계획이다.

     

    8. 실습

     

    1) 접속 후 로그인 버튼이 있고 바로 비밀번호 4자리를 입력받고 있다.

     

     

    2) 무작위 4자리 숫자를 넣어보면 Login Fail이라는 메시지를 띄우면서 다시 처음 화면으로 되돌아간다.

     

     

    3) 작성한 파이썬 코드

     

     

    * 코드 설명

    • 1. requests(외부 웹 서버와 통신하기 위한 라이브러리)를 현재 스크립트에 가져오는 코드
    • 5. i를 0부터 조건이 끝날 때까지 1씩 증가시켜  i값을 9999까지 올리는 반복문 코드
    • 6. 숫자를 입력받아 문자열로 치환하고 4자리를 만드는데 왼쪽이 비어있으면 0으로 채우는 코드
    • 10. HTTP GET 요청을 사용하여 공격할 서버에 패스워드를 검증하는 요청을 보내는 코드
    • 12. 조건문으로 로그인 실패 시 이 문구가 뜨지 않는다면 그 값은 비밀번호 값이라는 코드

     

    4) 본인의 웹 서버에서 파이썬 코드를 실행하여 비밀번호 검증을 시도하는 중인 화면이다. (현재 0686까지 진행 중이라 표시됨)

     

     

    5) 비밀번호를 얻은 화면이다. 이 값을 넣어보자.

     

     

    6) 로그인되면서 플래그 획득!

     

Designed by Tistory.