revenant

이번 문제를 풀기 위해서는 힌트에서 볼 수 있듯이, prob_revenant 테이블의 5번째 컬럼을 알아야 한다.
쿼리문을 살펴보면 * (asterisk) 문자를 사용하여 전체 컬럼을 조회하고 있다.
MSSQL, MySQL 등에서는 WHERE 절 뒤에 ORDER BY, GROUP BY (컬럼) HAVING (조건) 을 사용할 수 있는데
GROUP BY 절을 사용할 때는 반드시 SELECT 절에 있는 모든 컬럼이 포함되거나 집계 함수(MAX, MIN, SUM, AVG)에 들어가야 한다.


그렇지 않을 경우 아래와 같이 특정 컬럼이 집계 함수나 GROUP BY 절에 포함되지 않았다는 오류가 발생한다.
이를 토대로 prob_revenant 테이블의 컬럼들을 하나씩 확인할 수 있다.


테이블의 5번째(4번째 인덱스) 컬럼명은 pw 로 확인했고, 이제 id가 “admin”인 계정의 패스워드(pw)를 구해야 한다.
오류를 발생시키면 “mssql_error(sqlsrv_errors())” 함수에 의해 정보 추출이 가능하므로 아래와 같이 패스워드를 추출할 수 있다.


추출한 패스워드를 pw 파라미터 값으로 전달해주면 “REVENANT” 문제 풀이 성공이다.


🐛.. 🐛.. 🐛..


REFERENCE

  1. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=diceworld&logNo=220152871523
  2. https://blog.naver.com/diceworld/220152819420
  3. https://stackoverflow.com/questions/49377988/a-constant-expression-was-encountered-in-the-order-by-list-position-1