본문 바로가기

Wargame(hacking)/Dreamhack

Level 1 : simple_sqli

< 문제 >

 

https://dreamhack.io/wargame/challenges/24

 

simple_sqli

로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference Server-side Basic

dreamhack.io

 

< 풀이 >

 

문제에서 주어진 파이썬 파일의 로그인 관련 함수를 통해 어떻게 ID,PW가 인자로 전달되는지 파악한다. 

 

그림 1

PW의 값과 상관 없이 , userid = 'admin' 이라면 플래그를 획득할 수 있기에, 위 그림 1 과 로그인 폼에 " or userid = "admin" -- Injection 해준다.  

 

반면에, 아래 그림2 는 플래그를 획득할 수 없다. 

 

그림 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' 이였다면, 정답 플래그를 획득했겠지만, 그렇지 않기에 플래그를 얻지 못했다.