ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <wargame.kr> login filtering
    Wargame/wargame.kr 2021. 10. 19. 15:04

    login filtering

    <내가 푼 방법>

     

    아무 내용 없이 로그인 창만 있다. 우선 get source를 통해 소스코드를 살펴보자.

     

    php와 mysql을 사용한 것을 알 수 있다. 

    간단하게 살펴보면, 

    POST방식으로 'id'와 'ps'를 전달받고, isset으로  변수가 설정되있는지 확인한다. (전달받은 'id'와 'ps'의 값이 있는지 없는지 구분)

     

    mysql_connect()는 Mysql 서버에 대한 연결을 연다.

    // mysql_connect(string $server, string $ username,

                           string $password, bool $new_link=false, int $client_flags=0) : resource|false

     

    mysql_select_db()는 데이터베이스를 선택한다.

    // mysql_select_db(string $database_name, resource $link_identifier=NULL) : bool

     

    mysql_query()는 mysql 쿼리를 보낸다. (DB를 utf-8로 변경)

    // mysql_query(string $query, resource $link_identifier=NULL) : mixed

     

    trim()은 문자열의 시작과 끝에서 공백(또는 다른 문자)을 제거한다.

    // trim(string $string, string $characters=" \n\r\t\v\0") : string

     

    mysql_real_escape_string()은 SQL문에서 사용하기 위한 문자열의 특수문자를 회피한다.

    // mysql_real_escape_string(string $unescaped_string, resource $link_identifier=NULL) : string

     

    mysql_fetch_array()는 결과를 연관 배열 또는 숫자 배열로 가져옵니다. (SQL문의 결과를 배열로 row에 저장)

    // mysql_fetch_array(resource $result, int $result_type=MYSQL_BOTH) : array

     

    $row의 'id'가 값을 가지고 $id가 "guest" 또는 "blueh4g"가 아니면 로그인이 되고 인증 키값을 알 수 있다.

     

    그리고 소스코드 밑에 

    차단된 계정을 보여준다.

    "geust" 또는 "blueh4g"로 로그인 해보면 차단 되었다고한다.

     

    이 문제는 "php는 대소문자를 구분하지만, mysql은 기본적으로 대소문자를 구분하지 않는다"는 특징을 사용한다.

    다시 말해, php에서는 "guest" != "Geust"이지만, mysql에서는 "guest" == "Guest"가 된다.

    $id 비교를 php로 동작하기 때문에 이 부분만 우회해주면 된다.

     

    따라서, id = "Guest", ps = "guest"로 로그인하면 인증 키 값을 획득할 수 있다.

    'Wargame > wargame.kr' 카테고리의 다른 글

    <wargame.kr> fly me to the moon  (0) 2021.10.21
    <wargame.kr> WTF_CODE  (0) 2021.10.20
    <wargame.kr> QR CODE PUZZLE  (0) 2021.10.19
    <wargame.kr> already got  (0) 2021.10.18
    <wargame.kr> flee button  (0) 2021.10.17
Designed by Tistory.