[CTF/网络安全]攻防世界 web2 解题详析

[CTF/网络安全]攻防世界 web2 解题详析

题目描述:解密

环境给出代码:

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str);
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){
       
        $_c=substr($_o,$_0,1);
        $__=ord($_c)+1;
        $_c=chr($__);
        $_=$_.$_c;   
    } 
    return str_rot13(strrev(base64_encode($_)));
}

/*
   逆向加密算法,解密$miwen就是flag
*/
?> 

代码审计

这段代码定义了一个函数 encode,接受一个字符串参数 $str,并返回对其进行加密后的结果。加密算法包括三个步骤:

  1. 使用 strrev 函数将字符串翻转;
  2. 对翻转后的每个字符,将其 ASCII 值加 1,然后转换为相应的字符;
  3. 将得到的新字符串使用 base64 编码,再对编码后的结果进行 strrev 翻转和 str_rot13 处理,最终得到加密后的结果。

其中,str_rot13 是一个简单的字符替换算法,将每个字符替换为它在字母表中向后移动 13 位后对应的字符。这个算法是一种经典的简单加密方法,可以用来隐藏字符串的真实含义。

姿势

可通过逆向加密算法的步骤,对 $miwen 进行相反的操作,即先使用 str_rot13 还原,然后使用 strrev 翻转,再使用 base64 解码,最后对每个字符的 ASCII 值减 1 ,再进行翻转即可得到 flag。

还原后得到:
在这里插入图片描述

n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf

翻转后得到:
在这里插入图片描述

fjg4OjM2ZTFiZzg0MzhlNDE3NTdkOjI5Y2dlYjZlNDhjYEdVRFRPfDtoYm1n

Base64解码后得到:
在这里插入图片描述

~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg

对每个字符的 ASCII 值减 1 得到:
在这里插入图片描述

}77925d0af7327d30646c918bfda5d37b_FTCSN{:galf

再进行翻转得到:
在这里插入图片描述

flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

总结

该题考察代码审计。
我是秋说,我们下次见。

posted @ 2023-05-25 12:08  秋说  阅读(111)  评论(0编辑  收藏  举报  来源