< 문제 >
https://dreamhack.io/wargame/challenges/24
< 풀이 >
문제에서 주어진 파이썬 파일의 로그인 관련 함수를 통해 어떻게 ID,PW가 인자로 전달되는지 파악한다.
PW의 값과 상관 없이 , userid = 'admin' 이라면 플래그를 획득할 수 있기에, 위 그림 1 과 로그인 폼에 " or userid = "admin" --을 Injection 해준다.
반면에, 아래 그림2 는 플래그를 획득할 수 없다.
res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"')
if res:
userid = res[0]
if userid == 'admin':
위의 쿼리를 보면, users 테이블에서 해당 컬럼 정보를 확인 하고 레코드를 반환한다. " or 1=1 -- 구문은 users 테이블 전체를 select 한다. users 테이블의 첫번째 레코드의 userid가 'admin' 이였다면, 정답 플래그를 획득했겠지만, 그렇지 않기에 플래그를 얻지 못했다.