(핑!) 1학기 2주 워크업

SQL 인젝션

  • SQL(Structured Query Language)을 주입하는 공격.
  • 사용자 입력 값에 SQL 문을 주입하여 의도하지 않은 동적 쿼리를 생성하여 DB 정보를 보거나 조작할 수 있는 취약점
  • 입력값 검증이 불충분하여 사용자 입력값이 불완전한 SQL 문과 결합되는 경우 발생합니다.

취약점의 원인

  1. 공격자: 취약한 웹 애플리케이션을 대상으로 SQL 문 주입 → 불완전한 SQL 문은 사용자 입력 값에 의해 완전한 SQL 문으로 변환
String id = request.getParameter("id");
String query = "select * from member where id = "+id+"";

→ 사용자 입력으로 쿼리 완료 시 취약점 발생

2. 변경된 SQL 쿼리로 인해 DB 정보를 보거나 조작할 수 있음

공격 유형

1. 인증우회공격(Authentication Bypass Attack): 인증기능을 수행하는 어플리케이션(로그인)에 대해 정상적인 인증메커니즘을 통한 로그인이 아닌 비정상적인 메카니즘(SQL 문 삽입)을 이용하여 인증을 우회하는 공격

2. Data Retrieval Attack: SQL 문을 주입하여 DB에 있는 데이터를 조회

3. 시스템 명령 실행 공격: SQL Server 시스템 명령 실행

4. 데이터 조작 공격: 삽입, 수정, 삭제 등의 행위

인증 우회 공격

  • 로그인 페이지에서 일반 id와 pw가 아닌 ​​id와 pw에 SQL 문을 넣음 -> 레코드 처음에 사용자로 로그인함
  • 로그인 O: 1개 이상의 레코드 반환(세션, 쿠키 출력)
  • 로그인 X : 0개의 레코드를 반환합니다(id 또는 pw가 일치하지 않음).
  • 정상적인 id,pw 없이 SQL 문을 삽입하여 로그인을 허용하는 취약점

인증 우회 공격 원리

1. SQL 문을 ID pw에 붙여넣기

2. 로그인 시도 – 아이디와 비밀번호 전송

3. 패스 id=’ 또는 1=1, pw=asdf

4. 사용자 입력 값으로 SQL 문 완성

SELECT *FROM member WHERE id=''or 1=1--' and pw ='ENC DATA'

5. 비정상적인 SQL 쿼리

6. DB는 회원용 테이블을 웹 어플리케이션으로 전송

7. 공격자에게 세션 또는 쿠키 발행