一道沒有網址的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}