simple_sqli


  • 로그인 페이지 외 주어진 정보는 없기 때문에, 바로 소스코드 분석을 진행해 보게씁니다.

  • 일단 VM을 실행하면 guest, admin 계정이 생성되는 걸 확인했습니다.
  • guest 계정 정보는 모두 공개 됐으니, admin 계정으로 로그인을 하는 걸 목표로 해야 할 것 같네요.

  • 로그인 기능에 대한 서버 측 코드는 아래 부분입니다.
  • 입력 받은 아이디/패스워드와 일치하는 계정이 DB에 있는지 확인하고
  • 아이디가 admin 인 경우에 플래그를 반환해주고 있네요.

  • 그런데 코드를 살펴보니, 쿼리문에 사용되는 파라미터가 바인딩 처리되지 않아 취약해 보입니다.

  • 아래와 같이 SQLi 페이로드를 입력하여 로그인 인증 우회를 시도해보겠습니다.
    • select * from users where userid="admin"%20--" and userpassword="{userpassword}"

  • BOOOOOOOOOOOOOOM!!! 플래그 획득에 성공했습니다.

  • SQLi에서는 주석문이 많이 활용되는데, 이건 DB 종류에 따라서 —, # 등 사용 방식이 다릅니다.
  • sqlite 의 경우에는 -- 가 주석으로 활용되나 보군요.

🐛.. 🐛.. 🐛..