様々なMD5での操作のバイパス、弱いタイプの比較とMD5($パスワード、真の)バイパスをバイパスし、検査配列をバイパスし、基本的な操作です
1、MD5(真$パスワード)を使用すると、SQLインジェクションを実装します
F12やげっぷクロールレスポンスヘッダは、つまり、SQL文のバックエンド処理をヒントを見ることができます:
選択 * から ' 管理者' パスワード= MD5($ trueの場合、パス)
ここでは、MD5($パス、真の)におけるブレークスルーは、MD5の機能の使用状況を見てみましょう:
ここでは、生のパラメータを見ることができるバイナリ形式で、元の16文字のリターンを意味し、真です。
進値を通じてMD5後と言うことですSQL文が文字列「や」+ balabala、このような文字列に変換されている場合は、スプライスが設定されています。
選択 * から `admin` パスワード= 「」または「balabala 」
「または」Trueに戻って、憲法は私たちが知っている必要がありユニバーサルパスワードSQLインジェクションを、達成することができた場合のMySQLの特徴は次のとおりです。
ブールを決定するものとして使用された場合MySQLでは、文字列1の先頭には、整数として扱わされます。なお、この場合には、パスワード=「XXX」または「1xxxxxxxxx」、パスワード=「XXX」または1の次に等価として単一引用符で囲む必要があり、それはパスワード=「XXX」に対応することに留意されたい又は真のため、戻り値はtrueです。もちろん、私は後で1の初めだけでなく、限り、それは数字で始まるとして可能であることがわかっテストします。
もちろん、数だけならば、それは、このようなパスワード=「XXX」または1のように単一引用符を必要としない、戻り値はtrueです。(XXXは任意の文字を参照します)
選択 * から `admin` パスワード= '' または' 1abcdefg ' - - > Trueの選択* から ` admin` パスワード= '' または' 0abcdefg ' - > Falseの- 選択* から `admin` パスワード= " ' または' 1 " - - > Trueの選択* から ` admin` パスワード= '' または' 2 ' - - > Trueの 選択 * から `admin` パスワード= '' または' 0 ' - - > Falseの
真を返します。ゼロ以外の数値で開始する文字列の後ろに長い「または」のように、これは私たちの画期的な製品です。
私たちは、平文が、このスクリプトによって、当社の要件を満たし得ることができます。
<?phpの ための($ I = 0 ;;){ のために($ C = 0; $のC <1000000; $ C ++、私を$ ++ ) の場合(stripos(MD5($ I、真)、 '\'または\ '')!== falseの) エコー "\ nmd5($ I)="。MD5($ I、真)。"\ n"は、 エコー「」; } ?> // http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/への参照
ここでは最も一般的です:ffifdyop、文字列のMD5暗号化した後Trueに生のパラメータが返される場合は「or'6 <ゴミ箱>(<ゴミ箱>という事実は、いくつかの文字化けや目に見えない文字、限り、ここで最初の1が非ゼロであるとして決定すべき数がTrueで、後者は<ゴミ>はMySQLが)を失う整数比較に変換します
ここであれば、我々はffifdyopを入力し、バックエンドのSQL文は次のようになります。
選択 * から `admin` パスワード= '' または' 6 <ゴミ> ' - トゥルー> -
SQLインジェクションは、我々は次のレベルにこの質問を指示ffifdyop入力し、成功を構成します
2、PHP MD5弱いタイプの比較
ソースコードから得ることができるソースコードの右後端部から外れ第2のビューを入力した後、PHPのコメント:
$ A = $ GET [ 'A' ]; $ B = $ _GET [ 'B' ]; もし($!= $ B && MD5($)== MD5($ B )){ // うわー、glzjinはガールフレンドを望んでいます。
あなたは、見ることができる結婚に再びマスター趙を 、明示要求されたaとbの値が2つのに等しい数があることが異なっているが、同じMD5値、ノート、我々はPHPのタイプ比較突破口を使用できるように、弱い弱い等しい2のための外観をMD5異なる平文値「0exxxxx」の文字列が、:、あなたは私の以前の記事を参照することができますhttps://www.cnblogs.com/yesec/p/12232075.html
ここでは伝統的な価値観を持つ2つのQNKCDZO直接s214587387aは、直接GETを渡します
3、配列バイパス
第三に、ソースコードを与えられます。
<?PHP するerror_reporting(0 )。 などが「flag.phpを」。 highlight_file(__FILE__ )。 もし($ _POST![ 'PARAM1'] == $ _POST [ 'PARAM2'] && MD5($ _POST [ 'PARAM1'])=== MD5($ _POST [ 'PARAM2' ])){ エコー $フラグ。 }
あなたは、ハードルは「===」等しい強いが、それは明らかである方法2を渡すことができないということですまだ比較的MD5が、2番目のハードルは異なっている見ることができます
ただ、紙での記事の最後にも、この方法を言及することをお勧めします、あなたはここで知っている必要があるというPHPの機能のいくつか:
MD5(配列())= NULL
SHA1(配列())= NULL
EREG(パターン、配列())= NULLするpreg_match VS(パターン、配列)=偽
のstrcmp(配列()、 "ABC")= NULL
strpos(配列()、 "ABC")= NULL
引用自作https://blog.csdn.net/q1352483315/article/details/89469928
MD5()関数は、配列を扱うことができない、アレイに渡された場合、二つの配列が同じであるのGET NULLを、暗号化されているので、後に、NULLを返します。
したがって、直接着信POST PARAM1 [] = 1&PARAM2 []はフラグを得るため= 2: