[BUUOJ録音] [BJDCTF2020]簡単MD5

様々な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 ++、私を$ ++ の場合striposMD5$ 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:

 

 

 

おすすめ

転載: www.cnblogs.com/yesec/p/12535534.html