Post

Blind SQL Injection을 이용하여 한글가져오기

CTF와 워게임을 진행하면서 Blind SQL Injection 문제를 여러개 풀어보았다.
하지만 매번 ASCII코드와 HEX 값을 이용하여 영어를 한 글자 씩 조회하였다.
하지만 한글을 조회해야하는 문제를 풀어야하는 김에 한글을 조회하는 Blind SQL Injection을 정리해 보았다.


  1. 우선 테스트할 테이블을 만들고 데이터를 입력한다. Untitled
    id는 init 데이터 타입이며, name varchar 타입이다. 데이터베이스의 문자셋은 UTF-8로 설정하였다.

  2. 한글 데이터를 HEX으로 출력해본다. Untitled
    18문자가 표현되는데 한글은 3글자이기 때문에 18을 3을 나누면 6이 나온다. 여기서 2글자가 1byte.
    즉, 한글 한 한글자에 3Bytes이다. EUC-KR의 경우 2Bytes 이지만 UTF-8 3Bytes이다.
    (모든환경에서 3Bytes 라고는 할수없다..) 이 부분은 환경에 따라 인젝션하는데 참고하면 된다.
    블라인드 SQL 인젝션에서 자주 쓰이는 substr, mid, left, right 함수를 이용하여 한 글자씩 비교하는 경우가 많은데, hex으로 변경하여 비교할 수 있다.

  3. 한 글자씩 비교할 수 있지만 좀 더 빠르게하기 위해 두 글자씩 비교할 수 있다.
    Untitled

This post is licensed under CC BY 4.0 by the author.