ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS, PHP, MYSQL] 로그인, 로그인 우회 - 3.1
    Web - Security/Login 2023. 5. 10. 15:32

    로그인 과정에서  SQL 질의문에 대해서 검사하는 기능을 만들었다

     

    로그인 페이지 

    이전에 만들어놨던 login_2 데이터베이스와 로그인페이지를 이름만 변경하였다

     

    데이터 베이스 연결 변수명을 login_2에서 login_3으로 바꾼 것을 제외하고 달라진 건 없다

     

    5 ~ 8
    로그인페이지의 입력값을 받아오고 아이디와 비밀번호가 있다면 아래의 과정을 이어가고 없다면 로그인 실패처리한다

    11 ~ 19
    사용자 입력을 받은 SQL 질의문을 검증하는 단계를 추가해 줬다
    완성된 SQL 질의문에서 SELECT, FROM, WHERE 단어의 개수를 구해주고
    SELECT, FROM, WHERE의 개수가 모두 1개여야만 데이터베이스에 SQL 질의문을 전달하도록 한다

     

    21 ~ 44
    만약 일치하는 회원이 존재한다면 로그인 성공 페이지로 이동하고 존재하지 않는다면 로그인 페이지로 이동하게 한다

     

    변수이름 : "test1, test2, test3, test4"
    
    , 의 개수 : substr_count(변수이름, "개수 세고 싶은 것 여기에")
    3 = substr_count(변수이름, ",");

     

     

     

    로그인 테스트

    로그인과정에는 문제가 없다

     

     

     

    login_3  -  로그인 우회 및 취약점

     

    CASE 1 - SQL Injection

    normaltic 계정만 존재하지만 위와 같은 SQL Injection을 이용하여 로그인에 성공했다

     

    CASE 2 - 로그인 페이지로 바로 이동

    입력값에 대한 검증만 강화하여 로그인 홈페이지로 바로 넘어가는 경우는 막지 못한다

     

    CASE 3 - Brute Force ( 취약점 )

    이 로그인 페이지에서는 로그인 시도 횟수를 확인하지 않고 있다

    아이디가 normaltic 이고 비밀번호가 1234 이므로 사전대입공격으로 충분히 로그인이 가능하다

     

     

     

    대응방안

    CASE 1 - SQL Injection

    select, from, where 를 포함하여 and 와 or 의 개수도 추가해 주도록 한다

     

    CASE 2 - 로그인 페이지로 바로 이동

    로그인에 성고을 해야만 접근이 가능하도록 세션을 이용해 주도록 한다

     

    CASE 3 - Brute Force

     로그인 시도 횟수를 확인하여 Brute Force 공격을 차단하도록 한다

    728x90
Designed by Tistory.