闲的没事去刷了一下攻防世界做了一道web逆向(?????)
打开题目得到源码:
1 <?php 2 $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; 3 function encode($str){ 4 $_o=strrev($str); 5 // echo $_o; 6 7 for($_0=0;$_0<strlen($_o);$_0++){ 8 9 $_c=substr($_o,$_0,1); 10 $__=ord($_c)+1; 11 $_c=chr($__); 12 $_=$_.$_c; 13 } 14 return str_rot13(strrev(base64_encode($_))); 15 } 16 17 /*highlight_file(__FILE__);*/ 18 /* 19 逆向加密算法,解密$miwen就是flag 20 */ 21 ?>
搞得跟真的一样。。。于是去问(调戏)了一下20000s师傅
分析一下代码:显然$miwen是由下面的function encode加密成的,原文就是flag,所以我们要去把原文逆出来。
实际上encode的过程十分简单:
将原文反转,每个字符替换成该字符ascii??的下一个字符,经过str_rot13,再次反转,base64加密之后得到。所以我们根据这个过程给出exp:
1 <?php 2 $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; 3 $miwen = str_rot13($miwen); 4 $miwen = strrev($miwen); 5 $miwen= base64_decode($miwen); 6 function encode($str){ 7 $_o=strrev($str); 8 // echo $_o; 9 10 for($_0=0;$_0<strlen($_o);$_0++){ 11 $_c=substr($_o,$_0,1); 12 $__=ord($_c)-1; 13 $_c=chr($__); 14 $_=$_.$_c; 15 } 16 return $_; 17 } 18 echo encode($miwen); 19 ?>
最终得到了flag:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}