ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Type c-j
    개인공부/드림핵 2025. 1. 4. 01:26

    이번 문제의 경우 알맞은 id와 pw를 입력하여 FLAG를 획득하는 문제이다.

     

    [문제 해결]

    1. 서버 접속

     

    접속 시 ID와 PW를 입력하는 부분을 확인 가능하다.

     

    제출 버튼을 클릭 시 POST 요청을 통해 /check.php 파일이 동작하는 것을 확인 할 수 있다.

     

     

    코드 확인을 위해 문제 파일을 다운로드 후 분석을 진행한다.

     

    2. 코드 분석

    코드를 확인 시 중요 부분은 2가지로 확인된다.

     

     

    $characters에 저장되어 있는 0~9, a~z, A~Z 문자열을 랜덤 함수를 통해 랜덤하게 총 10자리까지 $randomstring에 저장한다.

     

     

    위 그림의 빨간 박스를 확인 시 생성된 id 및 pw를 입력된 값과 비교하는 코드를 확인 할 수 있다.

     

    이때 주목해야 할 부분은 입력 받은 id(input_id)와 pw(input_pw)를 int 형으로 변환하여 비교한다는 것이다.

    • 문자열을 (int) 로 형변환할 때, 문자열의 맨 앞자리가 문자 형식이라면 출력 결과는 항상 0
      • $a = "v384920"; 
        $b = "kw03mfdv";
        $c = "a1293843298523";
        print((int)$a); //출력결과 0
        print((int)$b); //출력결과 0
        print((int)$c); //출력결과 0
    • 문자열을 (int) 로 형변환할 때, 문자열의 맨 앞자리가 숫자 형식이라면 숫자가 아닌 다른 형식이 오기 전까지의 숫자가 출력
      • $a = "5v384920"; 
        $b = "54321kw03mfdv";
        $c = "0101kw03mfdv";
        print((int)$a); //출력결과 5
        print((int)$b); //출력결과 54321
        print((int)$c); //출력결과 101
    • int 타입과 문자열 비교 연산 시, 문자열을 (int) 로 강제 형변환할 때와 동일한 방식으로 자동 형변환
      • $a = "5v384920"; 
        $b = "54321kw03mfdv";
        $c = "0101kw03mfdv";
        if ($a == 5) //참
        if ($b == 54321) //참
        if ($c == 101) //참

    또한 비교 연산자를 확인 시 값과 데이터 타입 모두를 확인 하는 === 연산자가 아닌 느슨한 비교 ==를 사용하는 것이 확인된다.

     

    이를 이용하여 우회를 진행 할 수 있다.

     

    3. Exploit

     

    id값에는 0 또는 알파벳이 올것으로 상정 후 총 길이를 맞추기 위해 0을 10개 입력, pw의 경우 문자열 "1"을 sha1 해시화 한 값인 356a192b7913b04c54574d18c28d46e6395428ab의 앞 8자리를 입력해준다.

     

     

    FLAG를 획득하였다.

     

    근데 여기서 이해가 안가는 점은 사실 랜덤으로 생성되는 ID 값에 0보다 큰 숫자, 즉 1 이상의 숫자가 첫번째 자리에 오게 될 시 조건이 맞지 않아 FLAG를 획득 할 수 없다는 것이다.

    예 :

    • 입력된 ID 값 : 0000000000
    • 랜덤 생성된 ID 값 : 12abdfeg09
    • 이를 비교시 int(0000000000) != 12(int(12abdfeg09)) 라는 결과가 나온다. 

    0000000000 말고도 다른 방법이 있을거 같은데 잘 모르겠다. 조금 더 봐야 할거 같다.

    '개인공부 > 드림핵' 카테고리의 다른 글

    amocafe  (0) 2025.02.12
    random-test  (0) 2025.01.18
    baby-union  (0) 2025.01.02
    BypassIF  (0) 2025.01.01
    what-is-my-ip  (0) 2024.12.31
Designed by Tistory.