Skip to main content

SQL 주입 취약점 테스트

Hackers & Cyber Attacks: Crash Course Computer Science #32 (4 월 2025)

Hackers & Cyber Attacks: Crash Course Computer Science #32 (4 월 2025)
Anonim

SQL Injection 공격은 데이터베이스 백엔드에 의존하여 동적 컨텐츠를 생성하는 웹 애플리케이션에 엄청난 위험을 초래합니다. 이 유형의 공격에서 해커는 웹 응용 프로그램을 조작하여 자신의 SQL 명령을 데이터베이스에서 발급 한 명령에 주입합니다. 예를 들어, 데이터베이스의 SQL 인젝션 공격에 관한 기사를 참조하십시오. 이 기사에서는 웹 응용 프로그램을 테스트하여 SQL 주입 공격에 취약한 지 여부를 확인하는 몇 가지 방법에 대해 살펴 봅니다.

자동화 된 SQL 인젝션 스캐닝

한 가지 가능성은 HP의 WebInspect, IBM의 AppScan 또는 Cenzic의 Hailstorm과 같은 자동화 된 웹 응용 프로그램 취약점 스캐너를 사용하는 것입니다. 이러한 도구는 모두 웹 응용 프로그램을 분석하여 잠재적 인 SQL 주입 취약점을 쉽게 자동으로 분석 할 수있는 방법을 제공합니다. 그러나, 그들은 매우 비싸고, 좌석 당 2 만 5 천 달러까지 운영됩니다.

수동 SQL 주입 테스트

가난한 응용 프로그램 개발자는 무엇을 할 수 있습니까? 실제로 몇 가지 기본 테스트를 실행하여 웹 브라우저 이외의 기능을 사용하여 SQL 인젝션 취약점에 대한 웹 애플리케이션을 평가할 수 있습니다. 첫 번째로,주의 할 점은 우리가 설명하는 테스트는 기본적인 SQL 삽입 결함만을 찾는 것입니다. 그들은 고급 기술을 감지하지 못하고 사용하기가 다소 지루합니다. 당신이 그것을 감당할 수 있다면, 자동 스캐너로 이동하십시오. 그러나 해당 가격표를 처리 할 수없는 경우 수동 테스트가 가장 좋은 첫 번째 단계입니다.응용 프로그램이 취약한 지 여부를 평가하는 가장 쉬운 방법은 성공할 경우 실제로 데이터베이스에 해를 끼치 지 않지만 문제를 해결해야한다는 증거를 제공하는 무해한 주입 공격을 실험하는 것입니다. 예를 들어 데이터베이스에서 개인을 조회하고 그 결과 연락처 정보를 제공하는 간단한 웹 응용 프로그램이 있다고 가정합니다. 이 페이지는 다음 URL 형식을 사용할 수 있습니다.

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

이 페이지는 다음과 유사한 쿼리를 사용하여 데이터베이스 조회를 수행한다고 가정 할 수 있습니다.

선택 전화

FROM 디렉토리

lastname = '채플'이고 firstname = 'mike'

이걸 조금 실험 해 봅시다. 위의 가정을 토대로 SQL 주입 공격을 테스트하는 URL을 간단하게 변경할 수 있습니다.

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

웹 응용 프로그램이 SQL 주입에 대해 적절하게 보호되지 않은 경우 데이터베이스에 대해 실행하는 SQL 문에이 위조 된 이름을 연결하기 만하면 다음과 같은 결과가 발생합니다.

선택 전화

FROM 디렉토리

lastname = '채플'이고 firstname = 'mike'

AND (가짜에서 count (*) 선택)> 0

또는 '1'= '1'

위의 구문은 원래 URL의 구문과 약간 다릅니다. 우리는 예제를 더 쉽게 따르기 위해 URL 인코딩 된 변수를 해당 ASCII 코드로 변환하는 자유를 취했습니다. 예를 들어 % 3d는 '='문자의 URL 인코딩입니다. 비슷한 목적으로 줄 바꿈을 추가했습니다.

결과 평가

위에 나열된 URL로 웹 페이지를로드하려고하면 테스트가 수행됩니다. 웹 응용 프로그램이 정상적으로 작동하면 쿼리를 데이터베이스에 전달하기 전에 입력에서 작은 따옴표를 제거합니다. 이것은 단순히 일련의 SQL을 포함하는 이름을 가진 누군가를위한 기묘한 조회를 초래할 것이다. 아래 응용 프로그램과 유사한 오류 메시지가 표시됩니다.

오류 : mike + AND + (+ count + (+) + 가짜 선택) + % 3e0 + OR + 1 % 3d1 사용자는 없습니다.

채플!

반면에 응용 프로그램이 SQL 주입에 취약하면 SQL 문을 데이터베이스로 직접 전달하므로 두 가지 가능성 중 하나가 발생할 수 있습니다. 첫째, 서버에 자세한 오류 메시지가 활성화되어 있으면 (그렇게하면 안 됨) 다음과 같은 메시지가 표시됩니다.

ODBC 드라이버 용 Microsoft OLE DB 공급자 오류 '80040e37'

Microsoft ODBC SQL Server 드라이버 SQL Server 잘못된 개체 이름 'fake'.

/directory.asp, 13 행

반면에 웹 서버에 자세한 오류 메시지가 표시되지 않으면 다음과 같은보다 일반적인 오류가 발생합니다.

인터넷 서버 오류서버에 내부 오류 또는 잘못된 구성이 발생하여 요청을 완료하지 못했습니다.

오류가 발생한 시간과 오류의 원인이 될 수있는 일을 알려면 서버 관리자에게 문의하십시오.

이 오류에 대한 추가 정보는 서버 오류 로그에서 사용 가능할 수 있습니다.

위의 두 가지 오류 중 하나가 나타나면 응용 프로그램이 SQL 주입 공격에 취약합니다. SQL 주입 공격으로부터 응용 프로그램을 보호하기 위해 수행 할 수있는 몇 가지 단계는 다음과 같습니다.

  • 모든 응용 프로그램에서 매개 변수 검사를 구현하십시오. 예를 들어, 고객 번호를 입력하도록 요청하는 경우, 조회를 실행하기 전에 입력이 숫자인지 확인하십시오.
  • SQL 쿼리를 실행하는 계정의 사용 권한을 제한하십시오. 최소 권한 규칙이 적용됩니다. 쿼리를 실행하는 데 사용 된 계정에 실행할 수있는 권한이 없으면 성공하지 못합니다.
  • 저장 프로 시저 (또는 유사한 기술)를 사용하여 사용자가 SQL 코드와 직접 상호 작용하지 못하게하십시오.