
문제 링크
https://dreamhack.io/wargame/challenges/24
SQL INJECTION 취약점을 통해 플래그를 획득하는 간단한 로그인 서비스입니다. 플래그는 flag.txt, FLAG 변수에 있습니다.
먼저, 제공된 파이썬 코드를 통해 (userid, userpassword)에 ("guest", "guest") 로 로그인이 됨을 알 수 있었습니다. 또한 ID가 admin인 계정에 로그인 하는게 최종 목표임을 알 수 있었습니다.
'select * from users where userid="{userid}" and userpassword="{userpassword}"'
를 코드에서 확인할 수 있었습니다. 이 코드를 id가 admin일때의 데이터가 보일 수 있도록
admin" OR 1=1;--
을 userid에 넣어주었습니다.
이때 "로 id를 받고있으니 admin"로 닫고 ;로 문장을 마무리 해주었습니다. --을 이용하여 뒤에오는 모든 문장을 주석처리 해줍니다.
하지만 실행했더니 admin으로 로그인 되지 않았습니다. 이는
OR 1=1;--
때문임을 예측해 보았습니다.
실제로 위와 같은 코드를 덧붙였을 땐, 모든 유저를 조회하게 되므로 admin보다 선행하는 guest로 로그인이 되었습니다.
id 자리에 OR 1=1;-- 을 뺀,
admin";--
을 넣어 로그인 시도하였고, 로그인에 성공하여 플래그를 획득할 수 있었습니다.