SQL 인젝션 공격

SQL 주입을 피

SQL 인젝션은 무엇입니까

인젝션 공격이라 SQL 주입 공격 (SQL 주입)는, 웹 개발 보안 취약점의 가장 일반적인 형태입니다. 당신은 데이터베이스에서 중요한 정보를 얻을하는 데 사용하거나 데이터베이스 기능 수출 문서 및 악성 일련의 작업을 수행하는 사용자를 추가 할 수 있습니다, 심지어 데이터베이스 시스템 사용자와도 가장 높은 권위가 발생할 수 있습니다.
SQL 주입의 원인 때문에 효과적으로 원래의 결과로, 서버에 성공적으로 악의적 인 SQL 쿼리 코드를 제출 공격자가 프로그램이 쿼리의 일부로 실행 잘못된 공격자를받은 후 들어갑니다 허용 할 수있는 사용자의 입력을 필터링하지 않습니다 프로그램 쿼리 로직 변경, 공격자의 추가 실행이 악성 코드를 제작.

SQL 인젝션로서는

많은 웹 개발자가 SQL 질의를 신뢰할 수있는 명령이되도록 SQL 쿼리가, 변조 할 수있는 방법을 인식하지 않습니다. 모두가 아시다시피, SQL 쿼리, 액세스 제어를 우회하여 표준 인증 및 권한 부여 검사를 우회 할 수 있습니다. 무엇보다, SQL을 통해 호스트 시스템 레벨의 명령에 쿼리를 실행할 수 있습니다.

다음은 자세히 SQL 주입 방법을 설명하는 몇 가지 실제 예제를 통해 될 것입니다.

다음의 간단한 로그인 폼을 고려 :

1 
2
3
4
5
<  작업 = "/ 로그인"  메소드 = "POST" > 
< P > 자명 : < 입력 유형 = "텍스트" 이름 = "이름" /> </ P >
< P > 비밀번호 : < 입력 타입 = "비밀번호" 이름 = "비밀번호" /> </ P >
< P > < 입력 타입 = "제출" = "로그인"/> </ P >
</ 형태 >

우리의 SQL 처리는 내부에 다음과 같습니다

1 
2
3
이름 = r.Form.Get ( "이름" ) 
암호 = r.Form.Get ( "비밀번호" )
SQL = ' "사용자 이름 = * FROM" + 자명 + "AND 암호 =' '' + 패스워드 + " '"

사용자 이름을 입력하면 모든 암호를 다음과 같이

1
참고 MyUser '또는' foo는 '=' foo는 '-

그런 다음 다음과 같이 우리의 SQL이된다 :

1
SELECT * 사용자 FROM WHERE 이름 = '참고 MyUser' 또는 'foo는' = 'foo는' - ''AND 암호 = ' XXX '

내부 SQL에서 -- 큰 열  SQL 인젝션 공격 쿼리가 중단됩니다, 그래서 주석 태그입니다. 이것은 공격자가 유효한 사용자 이름과 성공적으로 로그인 암호를 모를 수 있습니다.

MSSQL의 경우 지금까지 SQL 인젝션의 더 위험 유형이있다, 그것은 제어 시스템, 다음과 같은 무서운 예는 시스템이 MSSQL 데이터베이스의 일부 버전에 명령을 실행하는 방법을 보여줍니다.

1 
2
SQL = "제품 SELECT * FROM WHERE 이름 LIKE '%' + 자극 + '%'"
Db.Exec (SQL)

공격자가 전송하면 a%' exec master..xp_cmdshell 'net user test testpass /ADD' --변수 자극 등의 값을 다음 SQL이 될 것입니다

1
SQL = "이름 LIKE '% %'간부 master..xp_cmdshell '순 사용자 테스트 testpass 추가 /'WHERE 제품 SELECT * FROM - %를 '"

MSSQL 서버는 시스템에 새로운 사용자를 추가하는 명령을 포함한 SQL 구문을 실행합니다. 이 프로그램은 SA와 MSSQLSERVER 서비스 충분한 권한을 실행하는 경우, 공격자는이 컴퓨터에 액세스 할 수있는 시스템 계정을 얻을 수 있습니다.

예는 위의 특정 데이터베이스 시스템에 묶여 있지만, 동안이 비슷한 공격이 다른 데이터베이스 시스템에없는 것을 의미하지 않는다. 이 보안 구멍의 관점에서, 한 가지 방법의 사용으로, 다양한 데이터베이스는 고통을 가능성이있다.

SQL 주입을 방지하는 방법

당신은 공격자가 SQL 주입 공격의 데이터베이스 구조를 구현하기 위해 정보를 알고 말할 수있다. 그들이 누설의 위험이 데이터베이스를 가지고 일단 공격자를 보장 할 수 사실, 그러나 아무도이 정보를 얻을해야합니다. 데이터베이스에 액세스하기 위해 오픈 소스 소프트웨어 패키지를 사용하는 경우, 같은 포럼 프로그램으로, 공격자는 쉽게 관련 코드를 얻을 수 있습니다. 코드가 잘못 설계되면, 위험이 더 큰 것입니다. 현재 Discuz가이 phpwind는 이들과 다른 인기있는 오픈 소스 프로그램 판례의 SQL 주입 공격이었다을 phpcms.

이러한 공격은 항상 낮은 보안 코드에서 발생합니다. 특히 선택 상자, 숨겨진 양식 필드와 쿠키를 포함하여 사용자의 데이터에서 외부에서 그래서, 결코 신뢰 데이터 입력. 위의 첫 번째 예로서,이 경우에도 일반 질의는 재해의 원인이 될 수 있습니다.

SQL 주입 공격을 너무 많이 해, 다음에 대처하는 방법을 여기에 SQL 주입을 방지 도움이 될 수 있습니다에 대한 권장 사항입니다.

  1. 웹 응용 프로그램은 엄격하게, 데이터베이스를 운영 데이터베이스 주입 공격에 피해를 최소화하는 최소 권한 작업을 충족 할 경우에만 수를 사용자에게 제공 할 수있는 권한을 제한했다.
  2. 데이터가 결정된다 입력 소정 데이터 포맷을 갖는 데이터를, 예를 들면 변수의 제한 형, 일부 패킷 정규 표현식 매칭 처리, 또는 패킷 문자열을 StrConv 다른 기본 유형으로 변환되어 있는지 확인한다.
  3. 데이터베이스에 입력 특수 문자 ( '각괄호 및 *] 등)를 이탈 또는 인코딩 변환 .Go text/template패키지 내부 HTMLEscapeString함수 문자열 탈출 될 수있다.
  4. 모든 쿼리는 데이터베이스에서 제공하는 매개 변수가있는 쿼리 인터페이스를 사용하는 것이 좋습니다, 매개 변수가 문 대신 직접 SQL 문을 접합하지 않는 SQL 문에 사용자 입력 변수를 내장의 매개 변수를 사용합니다. 예를 들어, database/sql쿼리 기능 내부 PrepareQueryExec(query string, args ...interface{}).
  5. 테스트를 위해 전문 SQL 주입 탐지 도구 권장 응용 프로그램을 게시하고, 수리가 발견 된 SQL 주입 취약점하기 전에. 예를 들어,이 점에서 많은 온라인 오픈 소스 도구가있다 하는 SQLMaps , SQLninja 등등과.
  6. 피 사이트는 일치하지 않는 필드로, 이러한 오류의 유형으로, SQL 오류 정보를 인쇄, SQL 문에있는 코드는 이러한 오류 메시지 SQL 주입을 사용하여 공격자을 방지하기 위해, 노출.

개요

우리가 볼 수있는 위의 예에 의해, SQL 주입 유해 오히려 큰 보안 구멍이다. 그래서 우리는 일반적으로 웹 응용 프로그램의 쓰기가 매우 심각하게 모든 작은 세부 사항에 대한 있어야합니다, 세부 사항, 생활뿐만 아니라 웹 응용 프로그램을 작성, 그래서 운명을 결정합니다.

추천

출처www.cnblogs.com/wangziqiang123/p/11691200.html