모의해킹 스터디/Week6

[CTF] Login Bypass 2 풀이

protruser 2024. 5. 26. 19:22

0. 문제 설명

 

normaltic2 로 로그인하자!

현재 우리의 계정은 다음과 같다. [ID/PW] : doldol / dol1234

 

1. 풀이

이 문제는 여러번 시도 하지 않고 주석 처리 과정에서 바로 풀 수 있었다.

 

id = 'doldol'#을 입력하여 쿼리의 남은 부분이 주석 처리 되는지 확인 하였고, 비밀번호는 무작위 입력값을 넣어주었다.

 

식별 / 인증 동시 로직에 계행이 없을 경우, 이 쿼리는 바로 로그인이 되는데

 

위의 그림처럼 바로 doldol 이라는 계정으로 로그인이 되는 것을 확인하였다.

 

따라서 주어진 문제(normaltic2 로 로그인하자!)의 정답을 알아내기 위해서는 doldol 대신에 normaltic2를 넣으면 쉽게 정답을 얻을 수 있었다.

 

 

 

2. 로그인 로직

식별 / 인증 동시 로직

"SELECT * FROM users WHERE id='$id' and pass='$pass'";

 

먼저 Login Bypass2의 로직은 식별 / 인증 동시 로직이다. $id 입력란에 normaltic1'#를 입력하여 뒷 부분을 주석 처리하면 쉽게 정답을 얻을 수 있었다.

 

하지만 로직을 직접 구현하는 과정이 약간 까다로웠는데, 이 SQL 구문에서는 이상하게도 order by가 적용이 안되고, limit 함수도 적용이 안됐다.

 

구현한 로그인 로직이 확실하지는 않지만 result가 여러개인지 확인하는 조건절과 order by가 들어갈 경우 오류를 출력하는 코드가 들어가있다고 생각하였다.

    $query = "SELECT * FROM users WHERE id='$id' and pass='$pass'";
    $result = mysqli_query(DB(), $query);
    // order by 사용시 오류 출력 추가
    if (mysqli_num_rows($result) > 1 ) {
      echo ' error ';
    } else {
      $row = mysqli_fetch_array($result);
    }

 

정답을 푸는 과정까지는 쉬웠으나 로그인 로직은 계속 고민해보아야 할 부분인 것 같다.