침입자가 도구 삽입을 사용하는 경우 도구가 테이블 이름과 필드 이름을 해독할 수 없는 경우가 많습니다. 이는 모든 도구에 테이블 이름과 필드 이름이 포함된 자체 사전이 있기 때문입니다. 필드 이름이 이 사전에 없도록 변경되면 우리가 사용하는 도구는 필드 이름과 테이블 이름을 추측할 수 없습니다. 다음 글에서는 SQL 인젝션에 대한 방어선을 구축하기 위해 수동 인젝션을 분석하는 것부터 시작하겠습니다.
침입자는 페이지에 주입 취약점이 있는지 여부를 판단하기 위해 간단한 판단 조건을 구성합니다. 일반적인 단계는 다음과 같습니다.
여기서 탐지할 페이지는 http://127.0.0.1/111/view.asp?id=198 입니다
. Intruder 사이트를 수동으로 삽입하려면 수동 삽입 중에 오류 메시지가 반환될 수 있도록 브라우저를 설정해야 합니다.
브라우저를 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택한 다음 " 팝업 대화 상자의 고급' 탭을 선택하세요. 아래와 같이:
그림 1
그런 다음 "친숙한 HTTP 오류 메시지 표시" 앞의 후크를 제거하고 마지막으로 "적용" 버튼을 클릭합니다.
2. 침입자는 다음 URL을 브라우저에 제출합니다:
http://127.0.0.1/111/view.asp?id=198 및 1=1
SQL 주입 취약점이 있는 경우 데이터베이스에 쿼리할 수 있습니다. 1은 Ignore 이므로 정상적인 페이지가 반환될 것이다. 이때, 침입자는 이 사이트를 판단하게 된다. 주입될 것으로 예상됩니다. 일부 오류 메시지가 반환되면 일부 초보적인 침입자가 사이트를 떠날 수 있습니다.
3. 침입자는 다음 URL을 브라우저에 추가로 제출합니다.
http://127.0.0.1/111/view.asp?id=198 및 1=2
1=2는 ID 불평등입니다. 사이트가 데이터베이스 쿼리를 지원하는 경우 아마도 아래 그림과 같은 정보가 반환될 것입니다.
그림 2
일반적으로 위 그림과 같이 침입자가 나타난다면 기본적으로 해당 사이트는 SQL 인젝션 공격을 할 수 있는 것이 확실합니다.
그러나 많은 경우 침입자는 작은 따옴표만 사용하여 대상 사이트에 SQL 주입 취약점이 있는지 신속하게 판단하고 다음 URL을 브라우저에 제출할 수 있습니다.
http://127.0.0.1/111/view.asp? id=198'if 다음 정보를 반환하면 주입 취약점이 존재할 확률이 절반 이상임을 나타냅니다.
Microsoft OLE DB Provider for ODBC Drivers 오류 '80040e14'
[Microsoft] [ODBC Microsoft Access Driver] 문자열의 구문 오류 쿼리 표현식 'id =1'에 있습니다. /list.asp, line 50
4. 이때 침입자는 사이트 데이터베이스의 테이블 이름을 쿼리하기 위해 특수 SQL 쿼리 문을 구성하기 시작하고 다음 명령문을 URL에 제출합니다.
http://127.0.0.1/ 111/view.asp?id= 198 and presents(select * from admin)
이 명령문은 데이터베이스를 쿼리하여 관리 테이블이 존재하는지 확인합니다. 테이블이 존재하지 않으면 일반 페이지가 반환됩니다. 페이지가 반환됩니다. 일반적으로 침입자는 일반적으로 사용되는 테이블 이름을 먼저 테스트합니다. 이는 일반 주입 도구의 비밀번호 사전에 존재하는 테이블 이름 및 필드 이름이기도 합니다. 테이블 이름이 일반적으로 사용되는 테이블 이름 중 하나가 아닌 경우 침입자는 사회 공학을 사용하여 테이블 이름을 추측하게 됩니다. 이 경우 침입자는 테이블 이름을 추측할 확률이 낮습니다.
5. 테이블 이름을 얻은 후 침입자는 데이터베이스 필드 이름을 쿼리하기 위한 쿼리 문을 구성하기 시작하고 다음 명령문을 URL에 제출합니다:
http://127.0.0.1/111/view.asp?id=198 및 존재합니다(관리자에서 사용자 선택)
this 이 명령문은 사용자 필드가 존재하는지 여부를 데이터베이스의 관리 테이블에 쿼리하는 것입니다. 존재하지 않으면 오류 페이지가 반환됩니다.
7. 다음으로 침입자는 id 필드의 값을 확인하기 시작하고 id 값을 쿼리하기 위해 다음 명령문을 구성합니다. http://127.0.0.1/111/view.asp?id=198 존재합니다(id 선택 id=1 인 admin에서)는
올바른 경우 올바른 페이지를 반환하고, 잘못된 경우 오류 페이지를 반환합니다.
6. 침입자는 테이블 이름과 필드 이름을 추측한 후 관리자 계정 길이를 추측하기 위한 쿼리 문을 구성하기 시작했으며 다음 명령문을 URL에 제출했습니다.
http://127.0.0.1/111/view.asp?id =198 and presents(select id from admin where len(user)<6 and id=1)
이 명령문은 사용자 필드에서 사용자 이름의 길이 범위를 쿼리하는 것입니다. 이는 길이가 6보다 작다는 것을 의미합니다. 맞으면 일반 페이지로 돌아가고, 틀리면 오류 페이지로 돌아갑니다.
범위를 좁힌 후 다음 명령문을 구성하여 사용자 이름의 특정 길이를 결정합니다.
http://127.0.0.1/111/view.asp?id=198 and presents(select id from admin where len(user)= 5 및 id=1)
Correct 오류가 발생하면 일반 페이지가 반환됩니다. 오류가 발생하면 오류 페이지가 반환됩니다.
8. 다음으로 침입자는 관리자의 사용자 이름을 쿼리하는 명령문을 구성하는 마지막 단계에 진입하고 다음 명령문을 URL에 제출합니다: http://127.0.0.1/111/view.asp?id=198 and presents( select count(*) from admin where left(user,1)='a')
이 문은 사용자 이름 왼쪽에서 a까지 사용자 이름을 추측하는 것입니다. . 틀리면 하나씩 추측하여 오류 페이지로 돌아갑니다. 두 번째 위치에서는 수정된 문이 (user,2)='ad' 등입니다.
침입자가 사용자 이름과 비밀번호를 얻은 후에는 주입이 거의 완료됩니다.
예방 방법은 매우 간단합니다. 위의 과정을 보면 테이블 이름과 필드 이름이 일반적으로 사용되는 테이블 이름과 필드 이름이 아닌 경우 침입자가 사회 공학을 사용하여 추측한다는 것을 알 수 있습니다. 관리자가 수정한 테이블 이름과 필드 이름은 충분히 복잡하므로 침입자가 침입할 것입니다. 공격자가 여전히 목표를 달성할 수 없는 경우 인터넷에서 안티 인젝션 패치를 다운로드하여 적용하는 또 다른 간단한 방어 방법이 있습니다. 방법은 사이트 파일을 수정하고 필터링 문을 추가하여 침입자가 제출한 진술을 필터링하여 주입을 방지하는 것입니다. 예, 여기서는 그 원리를 설명하지 않겠습니다.