Blind SQL Injection을 이용하여 한글가져오기
CTF와 워게임을 진행하면서 Blind SQL Injection 문제를 여러개 풀어보았다.
하지만 매번 ASCII코드와 HEX 값을 이용하여 영어를 한 글자 씩 조회하였다.
하지만 한글을 조회해야하는 문제를 풀어야하는 김에 한글을 조회하는 Blind SQL Injection을 정리해 보았다.
우선 테스트할 테이블을 만들고 데이터를 입력한다.
id는 init 데이터 타입이며, name varchar 타입이다. 데이터베이스의 문자셋은 UTF-8로 설정하였다.한글 데이터를 HEX으로 출력해본다.
18문자가 표현되는데 한글은 3글자이기 때문에 18을 3을 나누면 6이 나온다. 여기서 2글자가 1byte.
즉, 한글 한 한글자에 3Bytes이다. EUC-KR의 경우 2Bytes 이지만 UTF-8 3Bytes이다.
(모든환경에서 3Bytes 라고는 할수없다..) 이 부분은 환경에 따라 인젝션하는데 참고하면 된다.
블라인드 SQL 인젝션에서 자주 쓰이는 substr, mid, left, right 함수를 이용하여 한 글자씩 비교하는 경우가 많은데, hex으로 변경하여 비교할 수 있다.
This post is licensed under CC BY 4.0 by the author.