CTF와 워게임을 진행하면서 Blind SQL Injection 문제를 여러개 풀어보았다.
하지만 매번 ASCII코드와 HEX 값을 이용하여 영어를 한 글자 씩 조회하였다.
하지만 한글을 조회해야하는 문제를 풀어야하는 김에 한글을 조회하는 Blind SQL Injection을 정리해 보았다.
1. 우선 테스트할 테이블을 만들고 데이터를 입력한다.
id는 init 데이터 타입이며, name varchar 타입이다. 데이터베이스의 문자셋은 UTF-8로 설정하였다.
2. 한글 데이터를 HEX으로 출력해본다.
18문자가 표현되는데 한글은 3글자이기 때문에 18을 3을 나누면 6이 나온다. 여기서 2글자가 1byte. 즉, 한글 한 한글자에 3Bytes이다.
EUC-KR의 경우 2Bytes 이지만 UTF-8 3Bytes이다.(모든환경에서 3Bytes 라고는 할수없다..) 이 부분은 환경에 따라 인젝션하는데 참고하면 된다.
블라인드 SQL 인젝션에서 자주 쓰이는 substr, mid, left, right 함수를 이용하여 한 글자씩 비교하는 경우가 많은데, hex으로 변경하여 비교할 수 있다.
3. 한 글자씩 비교할 수 있지만 좀 더 빠르게하기 위해 두 글자씩 비교할 수 있다.
'Web Hacking' 카테고리의 다른 글
Oracle SQL Injection (0) | 2016.03.04 |
---|---|
MS SQL Injection (0) | 2016.02.25 |
크로스사이트스크립팅(XSS) (0) | 2016.02.24 |