Fork me on GitHub

web手尝试解密(水文章)

  闲的没事去刷了一下攻防世界做了一道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}

  

 

posted @ 2020-12-15 18:47  M1saka_L1gh73r  阅读(155)  评论(0编辑  收藏  举报