ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인증 / 인가 [16주차]
    모의해킹스터디5기(feat.Normaltic) 2024. 3. 1. 18:56

     

     

     

    오늘은 드디어 SQL, XSS, CSRF, File Upload/download에 이어 마지막 5번째 공격 기법, 인증/인가 취약점에 대해 정리해본다. 물론 공격 기법이 이외에도 더 많이 존재하긴 하지만 대표적인 5개의 기법에서 파생된다고 봐도 무방하다. 사실 인증/인가 취약점은 첫 수업 시간때부터 조금씩 등장해서 그렇게 새롭게 느껴지지 않을 수 있다. 이미 알고 있는 부분들도 있을 텐데 정리하는 시간이니까 한 번 훑어보도록 하겠다.


    인증 / 인가 

    인증(Authentication) : 그 사람이 본인이 맞는지 확인하는 작업
    • 인증을 무시하거나 우회하는 등 인증 과정에서 일어나는 모든 취약점을 말한다. 
    • ex) 로그인 인증, 본인 인증, 2차 인증, 이메일 인증 등
    인가(Authorization) : 특정 권한을 부여하는 것 
    • 원래는 할 수 없는 것들을 할 수 있게 하는 취약점을 말한다.
    • 파라미터 변조 혹은 로직의 허점을 이용한다.

     

     

     

     

    인증 취약점

    1. Cookie 변조

    • 웹 페이지 중에 cookie값을 통해 인증하는 경우가 있다. 
    • 클라이언트 측의 정보는 수정할 수 있으므로 이 때 user를 변경하면 해당 계정으로 로그인이 가능하게 된다.

     

     

    2. process 점프

    • 직접 접근 / direct 접근
    • 정해진 절차가 있는데 이를 무시하고 다음 단계의 주소를 알아내 건너뛰는 방법이다.
    • 회원가입에서 자주 나오는 취약점이다.
      • (1) 약관동의
      • (2) 본인인증
      • (3) 회원가입
    • ex) step1.php -> step2.php -> step3.php 단계로 나뉠 때, step1,2를 건너뛰고 바로 step3.php 의 주소로 직접 접근하는 방법

     

     

    3. 파라미터 응답값 변조

    • 서버에서 돌아오는 응답 메시지의 값을 변조해서 인증을 우회하는 방법이다.
    • 프로그래밍을 잘못한 경우로 웹페이지에서 흔한 취약점은 아니다.
    • ex) 돌아오는 응답 메시지의 result 값으로 인증을 체크하는 경우, "fail"을 "success"로 바꿔주면 우회 가능.

     

     

    4. 인증 횟수 제한 X

    • 인증 횟수 제한을 걸어두지 않는 경우도 취약점에 속한다.
    • Brute Force(무작위 대입 공격)로 비밀번호를 알아낼 수 있기 때문.
    • ex) pincode 문제 때 사용했던 코드
    import requests
    
    url = '인증 우회하려는 페이지?otpNum='
    
    //비밀번호 자릿수(4자리)
    for i in range(0,10000):
      num = str(i).zfill(4)
      openUrl = url + num
      print("["+num+"]")
      response = requests.get(openUrl)
      //실패 시 문구 특정
      if "Login Fail..." in response.text[0:40]:
        continue
      //성공 시
      else:
        url = url + num
        break
    
    //비밀번호 출력
    print("PIN code : ["+url[-4:]+"]")
    print("url : ["+url+"]")

     

     

     

     

     

    인가 취약점

    1. 주석으로 남겨진 페이지

    • 페이지 수정 시 주석으로 페이지의 정보들을 남겨두는 경우가 있는데, 그 중에서 url과 같은 정보를 남기는 취약점에 해당한다.
    • 정보들을 통해 접근 불가능한 페이지에 접근이 가능하다.  

     

     

    2. 클라이언트 측의 인가 체크(JS)

    • 클라이언트 측 코드로 인가 체크하는 모든 경우를 말한다.
    • 이 경우 인가하는 로직의 코드 전체를 볼 수 있으니 우회할 방법을 찾기 쉽다.
    • ex) javascript로 파일 확장자를 검증하는 경우 

     

     

    3. Guessing 공격

    • 추측하는 공격, 실제로 있을 법한 페이지 주소나 파라미터, 비밀번호 등 유추할 수 있는 것들을 추측해서 대입하는 공격.
    • 실무에서는 은근히 많은 도움이 된다고 한다.
    • 경력이 많은 사람들이 주로 사용하다.

     

     

    4. 파라미터 변조

    • 파라미터 변조를 통해 다른 계정의 권한을 획득할 수 있는 취약점이다.
    • 1:1 문의게시판이나 비밀글 등 본인 외에는 접근할 수 없는 글을 열람하거나 수정, 삭제하는 것이 가능할 수 있다. 

     

     

     

Designed by Tistory.