この記事では、SQL での手動インジェクションに関する問題 (インジェクション ポイントの決定やインジェクション タイプの決定に関する問題など) について説明します。
1. シングルクォーテーションマーク方式:URLの直後にシングルクォーテーションマークを追加します ページが正常に表示できない場合は、ブラウザはいくつかの例外情報を返します。これは、リンクに SQL インジェクションの脆弱性がある可能性があることを示します。
2.1=1 および 1=2: URL の後の get パラメータに 1=1 を追加します。表示は正常です。 、1=1 を 1 =2 に置き換えると、表示が異常になり、Web ページに SQL インジェクションがあることを示します。
1. 数値注入: 注入される変数の値は、
select * from user where id=$id;
のように引用符で囲む必要はありません2. 文字注入: 注入された変数が使用されます。`
select * from user where username='$username';`
のように引用符で囲みます。注入するときは必ず引用符を閉じてください。
3. 検索インジェクション:
select * from user where username like '%$pass%';
SQL ステートメントを
select * from user where username like '%$pass%' union select语句 '%%';
として構築します。つまり、転送される変数は、クロージャを形成する pass%' Union select ステートメント '% です。
注入ポイントの送信方法が get、post、またはパケット キャプチャおよびその他の方法による Cookie であるかどうかを決定します。
order by ステートメントを使用して、データベースに存在するフィールドの数をクエリします。データベースのフィールドの数は、継続的に試行することで決定できます。たとえば、次のような場合です。 9 による順序を入力すると、ページ エラーが報告され、8 による順序を入力すると、ページは通常どおり表示されます。つまり、データベースには 8 つのフィールドがあります。
たとえば、クエリ ステートメントは次のとおりです: select * from user where id='$id';
次の入力を構築できます: (id = ') ' order by 3 ' --
つまり、クエリ ステートメントは次のとおりです。 select * from user where id='' order by 3 '--'
union select ステートメントを使用して、現在のユーザー user()、データベース database()、データベース バージョン version()、サーバー オペレーティング システム @@version_compile_os およびその他の情報をクエリします。
バージョン version は非常に重要です。バージョン 5.0 以降の場合、information_schema ライブラリを使用して必要な情報を簡単にクエリできます。
構築ステートメント:
select * from user where id='' union select user(),database(),version()+--+;
次に、ステップ 5 の現在のデータベース クエリの結果に従って、table という名前のすべてのテーブルの情報を確認する必要があります (たとえば、データベースは database_1 です)。
Information_schema.tables: データベース内のすべてのテーブル名情報を記録するテーブル。
構築されたクエリ ステートメントは次のとおりです。
Select * from user where id='' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database_1;--クエリの結果は、5 番目のステップでクエリされた現在のデータベース内のテーブル名情報です。
Information_schema.columns: データベース内のすべてのテーブルの列名情報を記録します;
次に、上記のクエリから取得したテーブル名情報に基づいてその列をクエリする必要があります (たとえば、テーブルは table_1 です) 情報に名前を付け、次のようにステートメントを作成します。
Select * from user where id='' union selcet 1,group_concat(column_name),3 from information_schema.columns where table_name=table_1;--列名をクエリした後、結合クエリを通じてテーブルに格納されている情報を直接見つけることができます (たとえば、見つかった列名)は、column_1、column_2) ステートメントの構築
Selcet * from user where id='' union select 1,column_1,column_2 from tables;--指定されたデータベースの指定されたテーブルに格納されているデータをクエリできます推奨される学習:
以上が簡単な手動 SQL インジェクション プロセスについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。