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=limit 0,1 procedure analyse();   // 첫째 필드

mysql> select id from test where no=limit 1,1 procedure analyse();   // 둘째 필드

mysql> select id from test where no=limit 2,1 procedure analyse();   // 셋째 필드


information_schema, union, select 등이 막힌 상황에서 유용할 듯 싶습니다. :)

+ Recent posts