SQL 주입

4016 단어

SQL 주입은 무엇입니까?


SQL 주입은 가장 자주 사용되고 가장 흔히 볼 수 있는 웹 기반 공격 중의 하나이다.SQL을 작업에 주입하기 위해서는 데이터베이스를 사용하는 웹 응용 프로그램이 필요합니다.
예를 들어 데이터베이스를 사용하는 웹 응용 프로그램에서 이 웹 응용 프로그램은 정보를 데이터베이스에 저장하는 사용자로부터 입력을 받거나 데이터베이스에서 모든 데이터를 추출하여 사용자에게 표시할 수 있다.이 과정에서 데이터베이스 조회를 만들었는데 이 조회는 데이터베이스에 전송되고 이 조회는 데이터베이스에서 실행되기 때문에 모든 관련 데이터가 사용자측에 표시됩니다.
SQL 주입에서 사용자가 이 조회를 조작하고 이 악성 조회를 batabase에 보내서 관련 결과를 실행하고 표시합니다.

SQL 주입은 악성 SQL 문장을 실행하는 코드 주입 기술입니다.
성공적인 SQL 주입 공격:
  • 데이터베이스에서 데이터 수정, 변경 또는 삭제
  • 데이터베이스에서 중요 및 기밀 데이터 읽기 및 추출
  • 데이터베이스 관리 시스템(DBMS)에 존재하는 특정 파일의 내용 검색
  • SQL 주입 공격 유형



    1. 내부 SQLi 장착(고전 SQLi)
    대역내 SQL 주입은 고전적인 SQLi 기술로 SQL 주입 공격에서 가장 흔하고 이용하기 쉬운 공격이다.공격자가 같은 통신 채널을 사용하여 공격을 하고 그 결과를 수집할 수 있을 때 이런 유형의 공격이 발생한다.
    대역 내 SQL 주입 유형에는 오류 기반 SQLi와 결합 기반 SQLi가 있습니다.
  • 잘못된 SQLi 기반
    오류 기반 SQLi는 데이터베이스 서버에서 보내는 오류 메시지에 의존하여 데이터베이스 구조에 대한 정보를 얻는 내부 SQL 주입 기술이다.어떤 경우 잘못된 SQL 주입만으로도 공격자가 데이터베이스 전체를 일일이 열거할 수 있다.
  • 통합 기반 SQLi
    Union 기반 SQLi는 Union SQL 연산자를 이용하여 두 개 이상의 SELECT 문장의 결과를 하나의 결과로 조합하여 HTTP 응답의 일부로 되돌려주는 대역내 SQL 주입 기술입니다.
  • 2, 추리 SQLi(블라인드 SQLi)
    SQL 주입은 공격자에게 더 많은 시간이 필요할 것으로 추정됩니다.이것은 가장 위험한 SQL 주입 형식이다.SQLi 공격에서 실제적으로 웹 응용 프로그램을 통해 전송되는 데이터는 없지만 공격자는 유효한 하중을 보내고 웹 응용 프로그램의 응답과 데이터베이스 서버의 결과 행위를 관찰함으로써 데이터베이스 구조를 재구성할 수 있다.
    추리 SQL 주입 유형은 부울 기반의 맹인 SQLi와 시간 기반의 맹인 SQLi가 있다.
  • 블라인드 기반 SQLi
    부울 기반의 SQL 주입은 SQL 주입 기술을 추정하는 것으로 SQL 조회를 데이터베이스에 보내는 데 의존하여 응용 프로그램이 조회에 따라 결과가 진짜인지 가짜인지에 따라 다른 결과를 되돌려주도록 한다.
  • 시간 기반 블라인드 SQLi
    시간 기반 SQL 주입은 데이터베이스에 SQL 조회를 보내는 데 의존하여 데이터베이스가 응답하기 전에 지정한 시간(초)을 기다리도록 하는 추정 SQL 주입 기술이다.응답 시간은 공격자에게 조회 결과가 진짜인지 가짜인지 지시합니다.
  • 3. 외부 SQLi 포함
    공격자가 같은 채널로 공격을 시작하고 공격 결과를 수집할 수 없을 때, 즉 두 개의 다른 채널을 사용할 때 대역외 SQL 주입이 발생한다.

    SQL 주입은 어떻게 작동합니까?


    대부분의 웹 응용 프로그램에서 첫 번째 페이지는 로그인 페이지입니다. 사용자는 인증서를 입력해야만 열 수 있습니다.
    SQL 쿼리는 다음과 같이 쓸 수 있습니다.
    데이터베이스_테이블에서 선택*
    여기서 사용자 이름 = ' ' 및 암호 = ' '악성 조회
    데이터베이스_테이블에서 선택*
    여기서 사용자 이름 = ' 또는 1 = 1 -- ' 및 암호 = ' 'SQL 주입에서 "또는"논리를 사용합니다.사용자는 sql 조회를 제어할 수 없지만 입력을 제어할 수 있습니다.위의 예시에서 OR 1=1-- 항상true를 되돌려줍니다. 첫 번째 쉼표 ['] 는 문자열 파라미터를 닫는 데 사용되고, 1=1 항상true, -- 나머지 sql 조회를 주석하는 데 사용됩니다.
    따라서 전체 검색이 진짜로 바뀌어 실행됩니다.

    SQL 주입은 어떻게 사용합니까?


    획득 방법:
    GET 방법에서 데이터는 요청한 URL을 통해 데이터베이스에 전송됩니다. 이 URL은 URL에서 볼 수 있기 때문입니다.
      Example : https://localhost/index.php?username=abc&password=pass123  
    
    url 데이터에서 쉽게 볼 수 있습니다. sql 주입을 응용하기 위해 위의 악성 문자열을 삽입했습니다.

    POST 방법:
    POST 메서드에서 전송 중인 데이터는 url에 표시되지 않습니다.
      Example : https://localhost/index.php
    
    post 방법에서 sql 주입을 사용하려면 악성 문자열을 입력 상자에 입력하십시오. 위의 그림과 같습니다.

    SQL 주입을 어떻게 방지합니까?


    데이터베이스에prepare와bind 파라미터를 사용했습니다.bind 매개 변수는 악성 문자열을 단일 문자열로 저장합니다
    데이터베이스_테이블에서 선택*
    여기서 사용자 이름 = "'OR 1=1--"및 암호 = "'OR 1=1--"
    bind 매개 변수를 사용할 때 'OR 1=1-- 는 하나의 문자열로 간주되고, 역쉼표가 닫히지 않아서, 이 문장은false로 변하기 때문에 문자열이 논리적으로 정확하지 않습니다.
    따라서 bind 매개변수는 SQL 주입을 방지하는 데 사용됩니다.이것은 SQL 주입 방법의 일종이다.

    좋은 웹페이지 즐겨찾기