一道没有网址的web题、、很奇怪哎、、
然后把文件下载并解压,得到一个给字符串加密的PHP
解题思路是这样:
我们要提交的flag作为一个字符串,赋值给$data传入这个脚本之后,得到了上面给出的字符串:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=
我们要做的就是逆向找出这个flag
密码学还没学、、md5的加密和解密还不会,只能照抄大佬的wp了、、、
https://blog.csdn.net/qq_19861715/article/details/79385075
<?phpfunction 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}
bugku_web_PHP_encrypt_1(ISCCCTF) (涉及到md5加解密,尚需进一步学习)
原文地址:https://www.cnblogs.com/huangming-zzz/p/9742523.html