PHP_encrypt_1_Bugkuを書きます


https://ctf.bugku.com/challenges#PHP_encrypt_1(ISCCCTF)


タイトルを見て、いくつかのbase64で暗号文とPHPファイルを与えました。

1.png

TXTは、PHPの暗号化コードを使用して開かれました。

 2.png

まず、明確なブラックボックスの入力と出力:

              楽しい(キー、データ)       à       筋力

ここで、キー= MD5(「ISCC」)は、筋力もタイトルに与えられました:

fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA =


だから私は推測データ、我々が必要とするフラグを、何もするブラックボックスを見て、3つのことを行うには、主にブラックボックスを:

  1.        チャー=キー+キー[6]

  2.        STR [I] =(データ[I] + CHAR [I])%128

  3.        base64でエンコードを返します(STR)

最初のステップとすることにより、別々に私達ができる第三段階のキー値とbase64では、暗号文を取得するにはシャア筋力を、私たちはただ最も重要な第2のステップは得ることができるようになります解決フラグ(すなわちデータ)

    以下の内容は、必要にASCII 私は簡単に部品が使用されます説明し、コードのいくつかを理解しているとシンボル以上かかります

ASCII码分为不可见字符和可见字符一共128个字符,不可见字符范围为0-31,可见字符为32-127,其中’0’-‘9’对应的十进制ASCII码为48-57’A’-‘Z’65-90’a’-‘z’97-122

    X%Y   à   X>Y?X-n*Y:X

知道了这些知识后,再回来看这个题。一般来说,取余符号的运算是不可逆的,但是在这里就不一样了,因为单个ASCII%128还是它本身,而Str[i]为两个ASCII码的和取余128,所以data[i]+char[i]的范围就是0-254,再考虑到不可见字符范围就缩小到了64-254,再一做取余运算就被分成了两部分

3.png

一部分是始终不大于128的,另一部分是取余前大于128的。

範囲の一部が0〜127であるの後、我々はASCIIコードの範囲は、主に一部の後、戻ったときに最初の部分は非常に簡単です行く、非可視文字のASCIIコードは、私たちにフィルタを助けることができる、この時点で、伝えるのは難しいです大部分オフ。

4.png

38文字の合計は、28の文字が第二の部分に属している非可視文字フィルタアウト28であるが、第二の部分は、同定されていない私たちの一部であり、つまり、このセクションの(65から127)の範囲内のもの彼らは第二部であれば、それはchar型になるので、我々は、[i]は、大きなSTRよりも、[I] [i]はそのステップを-char [i]のSTR、その後、64から127文字の範囲のために、つまり、それらを見つけるために文字を使用することができますそして、エラー。上記の情報ことを私たちはスクリプトを書き始めることができます。

5.png

終わり - - -


おすすめ

転載: blog.51cto.com/13992485/2420111