SQL 주입 취약점 테스트

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

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

전화 번호부에서 전화를 선택하십시오 어디 lastname = '채플'과 firstname = '마이크'

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

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

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

전화 번호부에서 전화를 선택하십시오 어디 lastname = 'chapple'과 firstname = '마이크'AND (가짜에서 count (*) 선택)> 0 OR '1'= '1'

위의 구문은 원래 URL의 구문과 약간 다릅니다. 필자는 URL 인코딩 된 변수를 ASCII에 맞게 변환하여 예제를 더 쉽게 따르도록했습니다. 예를 들어 % 3d는 '='문자의 URL 인코딩입니다. 유사한 목적으로 줄 바꿈을 추가했습니다.

결과 평가

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

오류 : 이름이 mike + AND + (select + count (*) + + 가짜) + % 3e0 + OR + 1 % 사용자가 없습니다. 3d1 Chapple!

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

Microsoft OLE DB 공급자에 대한 ODBC 드라이버 오류 '80040e37'[Microsoft] [ODBC SQL Server 드라이버] [SQL 서버] 잘못된 개체 이름 '가짜'. /directory.asp, 13 행

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

내부 서버 오류 서버에 내부 오류나 잘못된 구성이 발생하여 요청을 완료 할 수 없습니다. 오류가 발생한 시간과 오류의 원인이 될 수있는 일을 알려면 서버 관리자에게 문의하십시오. 이 오류에 대한 추가 정보는 서버 오류 로그에서 사용 가능할 수 있습니다.

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