ハンドSQLインジェクション高度な記事

0.はじめに

  私たちは、SQLインジェクション手動プロセスと手順を紹介しますが、実際のセキュリティ上の問題だけでなく、CTFのタイトルで、多様照会、確かなセキュリティ、ユーザの入力フィルタとなり、これらのフィルタはありません前それは、私たちはこの1つを紹介したいものであるいくつかのセキュリティフィルタをバイパスするためにいくつかのトリックを使用する方法、100%安全でなければなりません。

  あなたはSQLインジェクションのプロセスと手順に精通していない場合は、私のブログの記事をお読みください。

  そこテキスト内の欠落や誤りがあるが、また、マスターは言ってください。

 

1.バイパスへのSELECT文の様々な

 (1)XXXリミット$ num個からXXXを選択します。

  我々は、クエリの条件を説明したパート注入方法は、それがどこしかし、例えば、次の文をに使用されるページ表示あたりの行数を制限するように見えることがあり、そのような制限の制限など、他の文でない場合

  学生のリミット$ num個から*を選択します。

  我々はまだオーダー番号のチェック欄を使用していた場合、我々は、アップロードされている$ヌム変数は、以下の結果を返します。

 

   並べ替えをフロントページで必要とされるため、MySQLはどのように我々はこの時に列の数をチェックしますか、その後、答えは@に使用する最後の言及である、@、@、@「@」文字で、それが表す、構文エラーを促すメッセージが表示されます一時変数でのMysql。

  例えば  

 

  変数の数が列の数と同じであることを確認する必要があり、この機能を使用するには、我々は列の数を調べることができます。

  (2)アップデータは、インサートは、関連の削除します

  そして、同様の選択、又は位置パラメータを見つけ、その後、注入の種類を決定するために、最終的な式は、SQLインジェクションを構築します。

  注射による(3)順序

  すでに述べたように、私たちは、実際には、ORDER BY式は、ビット操作によって行うことができる、ことにより、注文番号のチェック欄を使用しての話しました

選択 *  から学生 によって 1 | (スリープ(5))。

 

2.タイム機能ブラインド

  ページが間違っエコーないときに時々、時間の関数にブラインドを使用することを検討してください。原理は、条件判定睡眠を使用することで、我々は、応答時間を観察するだけで必要なことができます。

  例えば

選択 *  から学生どこのid = 1   あればユーザー()= ' ルート@ localhostの'スリープ(5)、ヌル);#判断用户

選択 *  から学生どこのid = 1   あれば(SUBSTR(ユーザー()、11= ' R '、スリープ(5)、NULL);#逐字判断

  私たちは)本当に(寝たことがない条件で始めることができます睡眠()が無効になっているとき、私たちは以下のいくつかの他の方法で遅延を置き換えることができ、利用可能です。

 (1)方法遅延

  • スリープ()関数。
  • ベンチマークのMySQL exprがより良い睡眠を達成するために複数回実行されるよう、リピート機能exprをcount回(式expr、カウント)、我々は組み込みの暗号化機能の一部を使用することができます。実行回数の特定の変化は、CPUにより行うことができます。
選択 *  から学生ここで、ID = 1   する場合(真、ベンチマーク(10000000、SHA(1))、NULL);
  • 計算デカルト積を使用してデカルト積は、遅延に達します。
選択 *から information_schema.columns A、Bをinformation_schema.columns;#の*)返回行数
  • GET_LOCKタイムアウトが負の場合(STR、タイムアウト)、二つのセッションを開く必要があり、STRをロックする最初の時間は、その後、時間を待っている秒のタイムアウトが実行され、その後、無期限に待機します。GET_LOCK()が明示的にトランザクションがコミットまたはセッションが中断されているか、暗黙の実行RELEASE_LOCK()はロックを解除しない場合にロールバックされ、ロックを解除します。
  • 長さ(STR)、RPAD構造長い文字列を使用し、その後長さに戻ります。
選択長さ(連結(RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD (19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A ')));

 

  • RLIKE、正規表現、式RPADまたは長い文字列の最初の反復を用いて構成リユースRLIKE正規リターンマッチ、制御時間の制御構造により、文字列の長さ。
選択連結を(RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A ')、RPAD(19999999' A '))RLIKE ' (*)+(*)+(*)+(*)+(*)。。。。。' ;

  PS構造は、それ以外の場合はエラーになり、文字列のMySQLメモリ制限の長さを超えることはできません。

 (2)分析条件

  • (式expr、expr1を、expr2の)場合。
  • xxはその後xxをケース;場合構文決意条件のケースを使用する方法に関する。

 (3)文字列傍受

  • PythonのSUBSTR()関数ではなく、第1の位置のMySQL 1又は-lenにSUBSTR(STR、POS、LEN)。
  • 半ば(STR、POS、LEN)、実質上掲
  • SUBSTRING_INDEX(STR、DELIM、カウント)、文字列の左側をカウントする最初のすべての内容を返すにdelim
選択(SUBSTRING_INDEXを' ABCD '' '3);#返回ABC
  • (STR、LEN)左、左strのlen文字に戻ります。
  • 右(strの、LEN)、リターンstrのlen文字の右側。

  基本的に時間がブラインドブールブラインドの種類、異なるのエコーメッセージの使用であるが、ここではエコーは、明示的にのみ、画面上に表示されません。

 

3.boolブラインド

  一般的にブラインドを解体するためのバイナリまたはビット単位の方法を使用して、ブールブラインドによって、推測するためのそのような種類の異なるエコー情報データベースを使用して。いくつかのメカニズムは、短絡がビット演算式に接続されている利用してもよいです。

 

前記マルチライン注射

  お問い合わせの際は、機能原理が使用され、複数行データベースのSQLステートメントを使用することができますサポートしています「;」ステートメントの終わりには、独自のSQL文を挿入します。

 

5.MySqlコーディング注入

(1)弱いタイプの変換

  このような問合せを初めて目には学生から*選択する場所名= 1;

  

 

  名前はデジタルと1つの比較、およびデフォルトの変換PHPのMySQLと同様の変換に変換されますので、それは、照会することができますなぜ、最初の文字が終了した数値ではありません見つけます。この機能を使用すると、我々はいくつかの問い合わせを決定するために行うことができます。

(2)射出バイト幅

  符号化された現在のデータベースGBKを使用する場合、文字が2つの文字に変換される(文字は前者128より大きい)、注入を達成するために、フィルタの後端部と一緒にこの機能を使用します。

  、パスは%5C%27である式GBKコードたとえば、、、我々は%DF「を送信する。このときは、%のDF%5C%27ように、バックエンド・フィルタが時間「\にそれを回す」符号化され、そして%DF%5C注射を行うために、中国語に符号化される前述。

機能の(3)SQLの文字セット

  utf8_unicode_ci内文字、大文字と小文字を区別しない、そしてA = Aの場合、= O、O、U = Uと他の条件が満たされると、SS = SS、

  utf8_general_ci文字セットについては、ß= sで。

  セルフテストは、複数の条件式かもしれません。

(4)ヘキサ変換

  テーブル名と列名フィルタは、文字の16進数は、上記ベルトの0xを達成変換することができた場合

6.まとめ

  この投稿は、多くのMySQL関数を導入されたいくつかの他の注入方法の説明に基づいています。MySQLのの知る限りでは、今終了し、我々はバイパスフィルタの伝送パラメータのバックエンドのいくつかを回避する方法を説明するに焦点を当てる次回ました。

  場所を追加するには何がある場合は、コメント領域に習得してください。

 

おすすめ

転載: www.cnblogs.com/xenny/p/11568139.html