-
<wargame.kr> login filteringWargame/wargame.kr 2021. 10. 19. 15:04
<내가 푼 방법>
아무 내용 없이 로그인 창만 있다. 우선 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