bugku_web_PHP_encrypt_1(ISCCCTF) (涉及到md5加解密,尚需進一步學習)


一道沒有網址的web題、、很奇怪哎、、

然后把文件下載並解壓,得到一個給字符串加密的PHP

解題思路是這樣:

我們要提交的flag作為一個字符串,賦值給$data傳入這個腳本之后,得到了上面給出的字符串:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=

我們要做的就是逆向找出這個flag

密碼學還沒學、、md5的加密和解密還不會,只能照抄大佬的wp了、、、

https://blog.csdn.net/qq_19861715/article/details/79385075

<?php
function decrypt($str) {
    $mkey = "729623334f0aa2784a1599fd374c120d";
    $klen = strlen($mkey);
    $tmp = $str;
    $tmp = base64_decode($tmp);  // 對 base64 后的字符串 decode
    $md_len = strlen($tmp); //獲取字符串長度
    $x = 0;
    $char = "";
    for($i=0;$i < $md_len;$i++) {  //  取二次加密用 key;
        if ($x == $klen)  // 數據長度是否超過 key 長度檢測
            $x = 0;
        $char .= $mkey[$x];  // 從 key 中取二次加密用 key
        $x+=1;
    }
    $md_data = array();
    for($i=0;$i<$md_len;$i++) { // 取偏移后密文數據
        array_push($md_data, ord($tmp[$i]));
    }
    $md_data_source = array();
    $data1 = "";
    $data2 = "";
    foreach ($md_data as $key => $value) { // 對偏移后的密文數據進行還原
        $i = $key;
        if($i >= strlen($mkey)) {$i = $i - strlen($mkey);}
        $dd = $value;
        $od = ord($mkey[$i]);
        array_push($md_data_source,$dd);
        $data1 .= chr(($dd+128)-$od);  // 第一種可能, 余數+128-key 為回歸數
        $data2 .= chr($dd-$od);  // 第二種可能, 余數直接-key 為回歸數
    }
    print "data1 => ".$data1."<br>\n";
    print "data2 => ".$data2."<br>\n";
}
$str = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=";
decrypt($str);
?>

嗯,這個flag形式很坑爹:

Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM