Dreamhack - simple_sqli (간단한 sql 인젝션)

·2025년 6월 17일

Dreamhack-Writeups

목록 보기
3/52
post-thumbnail

simple_sqli

문제 링크
https://dreamhack.io/wargame/challenges/24

문제 설명

SQL INJECTION 취약점을 통해 플래그를 획득하는 간단한 로그인 서비스입니다. 플래그는 flag.txt, FLAG 변수에 있습니다.

풀이 과정

  1. 먼저, 제공된 파이썬 코드를 통해 (userid, userpassword)에 ("guest", "guest") 로 로그인이 됨을 알 수 있었습니다. 또한 ID가 admin인 계정에 로그인 하는게 최종 목표임을 알 수 있었습니다.

  2. 'select * from users where userid="{userid}" and userpassword="{userpassword}"'

    를 코드에서 확인할 수 있었습니다. 이 코드를 id가 admin일때의 데이터가 보일 수 있도록

    admin" OR 1=1;-- 

    을 userid에 넣어주었습니다.
    이때 "로 id를 받고있으니 admin"로 닫고 ;로 문장을 마무리 해주었습니다. --을 이용하여 뒤에오는 모든 문장을 주석처리 해줍니다.

  3. 하지만 실행했더니 admin으로 로그인 되지 않았습니다. 이는

    OR 1=1;--

    때문임을 예측해 보았습니다.
    실제로 위와 같은 코드를 덧붙였을 땐, 모든 유저를 조회하게 되므로 admin보다 선행하는 guest로 로그인이 되었습니다.

  4. id 자리에 OR 1=1;-- 을 뺀,

    admin";-- 

    을 넣어 로그인 시도하였고, 로그인에 성공하여 플래그를 획득할 수 있었습니다.


배운점

  • 간단한 SQL 취약점을 이용하는 방법을 알게 되었습니다.
  • {userid}자리에 우리가 실제 기입하는 id 값이 들어가는 것을 이용하여, 데이터 베이스에 접근할 수 있음을 알게 되었습니다.
  • SQL은 선행되는 데이터 먼저 조회됨을 알게 되었습니다.

Summary (English)

  • This challenge was about exploiting a basic SQL Injection in a login form.
  • The query used unsanitized input directly in SQL logic.
  • Injecting admin";-- in the username field bypassed authentication.
  • This allowed admin login and flag retrieval without a password.
profile
CTF 풀이 및 실습 중심 학습을 기록합니다.

0개의 댓글