SQL 주입
SQL 주입은 무엇입니까?
SQL 주입은 가장 자주 사용되고 가장 흔히 볼 수 있는 웹 기반 공격 중의 하나이다.SQL을 작업에 주입하기 위해서는 데이터베이스를 사용하는 웹 응용 프로그램이 필요합니다.
예를 들어 데이터베이스를 사용하는 웹 응용 프로그램에서 이 웹 응용 프로그램은 정보를 데이터베이스에 저장하는 사용자로부터 입력을 받거나 데이터베이스에서 모든 데이터를 추출하여 사용자에게 표시할 수 있다.이 과정에서 데이터베이스 조회를 만들었는데 이 조회는 데이터베이스에 전송되고 이 조회는 데이터베이스에서 실행되기 때문에 모든 관련 데이터가 사용자측에 표시됩니다.
SQL 주입에서 사용자가 이 조회를 조작하고 이 악성 조회를 batabase에 보내서 관련 결과를 실행하고 표시합니다.
SQL 주입은 악성 SQL 문장을 실행하는 코드 주입 기술입니다.
성공적인 SQL 주입 공격:
SQL 주입 공격 유형
1. 내부 SQLi 장착(고전 SQLi)
대역내 SQL 주입은 고전적인 SQLi 기술로 SQL 주입 공격에서 가장 흔하고 이용하기 쉬운 공격이다.공격자가 같은 통신 채널을 사용하여 공격을 하고 그 결과를 수집할 수 있을 때 이런 유형의 공격이 발생한다.
대역 내 SQL 주입 유형에는 오류 기반 SQLi와 결합 기반 SQLi가 있습니다.
오류 기반 SQLi는 데이터베이스 서버에서 보내는 오류 메시지에 의존하여 데이터베이스 구조에 대한 정보를 얻는 내부 SQL 주입 기술이다.어떤 경우 잘못된 SQL 주입만으로도 공격자가 데이터베이스 전체를 일일이 열거할 수 있다.
Union 기반 SQLi는 Union SQL 연산자를 이용하여 두 개 이상의 SELECT 문장의 결과를 하나의 결과로 조합하여 HTTP 응답의 일부로 되돌려주는 대역내 SQL 주입 기술입니다.
SQL 주입은 공격자에게 더 많은 시간이 필요할 것으로 추정됩니다.이것은 가장 위험한 SQL 주입 형식이다.SQLi 공격에서 실제적으로 웹 응용 프로그램을 통해 전송되는 데이터는 없지만 공격자는 유효한 하중을 보내고 웹 응용 프로그램의 응답과 데이터베이스 서버의 결과 행위를 관찰함으로써 데이터베이스 구조를 재구성할 수 있다.
추리 SQL 주입 유형은 부울 기반의 맹인 SQLi와 시간 기반의 맹인 SQLi가 있다.
부울 기반의 SQL 주입은 SQL 주입 기술을 추정하는 것으로 SQL 조회를 데이터베이스에 보내는 데 의존하여 응용 프로그램이 조회에 따라 결과가 진짜인지 가짜인지에 따라 다른 결과를 되돌려주도록 한다.
시간 기반 SQL 주입은 데이터베이스에 SQL 조회를 보내는 데 의존하여 데이터베이스가 응답하기 전에 지정한 시간(초)을 기다리도록 하는 추정 SQL 주입 기술이다.응답 시간은 공격자에게 조회 결과가 진짜인지 가짜인지 지시합니다.
공격자가 같은 채널로 공격을 시작하고 공격 결과를 수집할 수 없을 때, 즉 두 개의 다른 채널을 사용할 때 대역외 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 주입 방법의 일종이다.
Reference
이 문제에 관하여(SQL 주입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/darshangawade/sql-injection-2eco텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)