본문 바로가기
모의해킹/이론

[모의해킹] SQL Injection이란?

by 재현짱 2024. 8. 14.
728x90

SQL Injection이란?

 

개요

  • 서버의 Database를 공격할 수 있는 공격 방식
  • SQL에 악의적인 쿼리(Qurey)를 삽입, 실행하게 만듬
  • 굉장히 오래된 공격 기법
  • 꾸준히 취약점이 발견됨
  • 공격 성공시 치명적

*쿼리문: 명령 또는 결과값을 Client가 호출(조건문 사용)하면 Database가 반환

 

공격 기법

※ 주의 !

학습 용도 외에는 사용하지마세요

 

아래는 일반적인 로그인 폼에 정상적으로 로그인 하는 방식.

더보기

로그인 방식

 

SELECT USER FROM USER_TABLE WHERE id = '입력값' AND pw= '입력값';

그렇다면 SQL Injection을 시도한다고 하였을 때, ID 값은 알지만 PW 값을 모른다면 공격자는 어떻게 공격할까?

예를 들어 id의 값이 'admin' 이라고 하자 그럼 아래와 같이 공격할 수 있음. 아래의 공격은 공격자가 인증 절차를 우회하는 방식임

더보기

SELECT USER FROM USER_TABLE WHERE id = 'admin' AND pw= ''OR'1'='1';

위 공격 명령어를 풀어서 설명하자면

  • 'id = 'admin' : 사용자의 아이디가 'admin'인 레코드를 찾도록 지정
  • 'pw= ''OR '1'='1' : OR 1=1 부분은 항상 참이되는 조건, 앞에 있는 쿼리 연산 or 뒤에 있는 쿼리를 묶어서 처리함

결과적으로 이 쿼리는 비밀번호를 올바르게 입력하지 않더라도 'admin'이라는 아이디를 가진 사용자의 정보에 접근할 수 있게 됨

 

or '1' = '1

  • 싱글쿼터 (')는 문자열의 시작, 끝에 존재
  • 반드시 짝수개로 존재
  • 임의로 싱글쿼터를 추가하면서 남게된 싱글쿼터 한개와 그 뒤에 존재하는 AND 조건문을 무효화 시킴

정리

  1. 공격자는 싱글쿼터(')를 통해 임의로 문자열의 범위를 종료시킴
  2. 남은 뒷 부분을 주석처리 시킨다. => 쿼리문 SELECT * FROM USER WHERE id = 'admin' 까지 처리
  3. Database는 pw가 맞는지에 대한 비교를 생략하고 'admin' 계정으로 로그인

※ 위와 같은 이유 때문에 admin 계정을 따로 생성하지 말라고 함

 

 

'모의해킹 > 이론' 카테고리의 다른 글

[모의해킹] DoS(Denial of Service) 공격에 대하여  (0) 2024.04.15