효투의 세상 로딩중...
효투의 세상 로딩중...
반응형

SQL 인젝션

SQL 인젝션은 DB에서 사용하는 언어 SQL을 이용하여 데이터를 뽑아낼 때

SQL 쿼리문이 다른 결과를 가져오도록 검색 파라미터나 로그인파라미터 등에 SQL쿼리를 삽입하는 공격이다.

SQL인젝션 공격은 크게 3가지로 나뉜다

  • Error Based SQL injection
  • Blind SQL injection
  • Union SQL injection

제일 간단한건 에러 기반 SQL인젝션이다.

일반적인 웹페이지는 대부분 Try Catch구문과같은 예외처리가 되어있어 싱글쿼터(')를 통한 에러 발생 유도를 하더라도

정상 페이지가 출력된다.

하지만 실제로 서버를 들여다보면 에러가 발생하여 콘솔에 로그가 찍혀있다.

 

근데 만약 예외처리가 안되어있는 페이지가 존재한다면 에러 기반 SQL 인젝션 공격이 가능할 것이다.

내 웹서버에 예외처리 코드를 빼고 일부러 취약하게 만들어 테스트를 진행했다.

이렇게 정상적인 검색어 입력 시 검색기능이 잘 작동하지만 싱글쿼터와 같이 에러를 발생시킬경우

에러 페이지가 출력되며 그 에러페이지에 DB 정보가 노출된다.

이 에러를 이용해서 DB 안에 있는 모든 데이터를 추출할 수 있다.

Oracle DB에 에러기반 SQL 공격을 할 때 아래 쿼리문들을 활용한다.

ORDSYS.ORD_DICOM.GETMAPPINGXPATH
CTXSYS.DRITHSX.SN

ctxsys.drithsx.sn를 이용해 DB 버전을 확인할 수 있다.

1' and ctxsys.drithsx.sn(1,(select banner from v$version where rownum=1)) <> 1 --

1' and ctxsys.drithsx.sn(1, (Select banner from v $ version where rownum = 1)) is null --

쿼리 삽입

같은 쿼리로 

뒤의 select 이후의 서브쿼리만 계속 변경하여 DB유저, 테이블명, 컬럼명, 엔티티 까지 모두

추출이 가능하다.

 

하지만 Error Based 방식은 실사용이 거의 불가능한 인젝션이다.

예외처리는 웬만하면 다 되어있기 때문...

반응형
  • hyotwo7658@gmail.com

복사 완료 👍