Injection 취약점

1=1·2023년 12월 18일
0

SK shieldus 16

목록 보기
3/10
post-thumbnail

Injection


Command injection

< 개념 >

  : 어플리케이션에 운영체제 명령어 (=쉘 명령어)를 실행하는 기능이 존재 하는 경우, 외부 입력 값을 검증, 제한 하지 않고 운영체제 명령어 또는 운영체제 명령어 일부를 사용하는 경우 발생

< 피해 >

시스템 제어권을 탈취하여 해당 시스템을 공격자 마음대로 제어하게 됨

< 원인 >

  • 외부 입력 값을 검증하지 않고 사용
    추가 명령어 실행에 사용되는 &, |, ; 등의 문자열 포함 여부를 확인하지 않고 사용
  • 외부 입력 값을 제한하지 않고 사용
    내부 로직에서 사용할 수 있는 명령어 또는 명령어의 파라미터 값을 미리 정의하고 정의된 범위 내에서 사용되는 경우 ( 화이트 리스트 방식으로 제한하지 않는 경우 )

< 방어기법 >

  • 입력값 검증 : SQL문을 조작할 수 있는 문자열 포함 여부 확인
  • 정적 쿼리 사용 : 항상 일정한 형태의 쿼리가 실행되는 것을 보장
      정적 쿼리) 실행 시간에 동적으로 생성되지 않고 미리 정의된 형태로 존재하는 데이터 베이스 쿼리를 의미
  • DB 사용자에게 최소 권한을 부여 : 애플리케이션에서 사용하는 DB 사용자의 권한을 필요한 만큼만 부여
  • 에러에 대한 안전한 처리 : 오류 메시지를 통해서 시스템 내부정보가 노출되지 않도록

< SQL Injection 유형 >

ex. SELECT * FROM USERS WHERE ID='hyun'
: ID의 컬럼 값이 입력값(hyun)과 일치하는 사용자 조회

  1. 항상 참이되는 값 입력
    i) hyun' or 'a'='a
    ii) hyun' or '1'='1
    -> SELECT * FROM USERS WHERE ID='hyun' or 'a'='a'
    -> 모든 사용자 조회
  1. 오류를 유발하는 입력 (=시스템 내부 정보를 수집)
    a'
    -> SELECT * FROM USERS WHERE ID='a''
    -> 구문 오류 발생 (ex. syntax error)
    -> 홑따옴표가 두개 연속으로 나오면 이스케이프가 발생해서 홑따옴표라는 문자를 뜻해서 한개 부족하다고 인식
  1. UNION 구문 이용 (= 권한 밖 데이터 접근 가능)
    조작 쿼리) hyun' UNION select 1,2,3 --
    -> SELECT * FROM USERS WHERE NAME ='hyun' UNIOM select 1,2,3 --
  1. Stored Procedure (= 서버 제어권 탈취)
    hyun'; exec xp_cmshell 'cmd.exe /c ipconfig' --
    -> SELECT * FROM USERS WHERE NAME ='hyun'; exec xp_cmshell 'cmd.exe /c ipconfig' --'
    hyun 까지 실행이 되고 다음 쿼리문이 실행되며 DB shell에 접근하려는 목적인 명령문이다
  1. Blind SQL Injection
    : 쿼리가 참인 조건과 거짓에 조건에 따라 출력문이 다르게 나오는 것을 이용
    'hyun' -> SELECT FROM USERS WHERE NAME = 'hyun' -> 일치하는 이름의 사용자가 존재합니다.
    '!@#$/' -> SELECT
    FROM USERS WHERE NAME = '!@#$/' -> 일치하는 이름의 사용자가 존재하지 않습니다
  • 실행
    SELECT * FROM USERS WHERE NAME = 'hyun' and (select ...) --
  • 결과
    존재합니다 -> 공격자가 생성한 쿼리의 일치하는 데이터가 존재
    존재하지 않습니다 -> 공격자가 생성한 쿼리의 일치하는 데이터가 없음

0개의 댓글