Web康复训练-攻防世界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($_)));
}

highlight_file(__FILE__);
/*
   逆向加密算法,解密$miwen就是flag
*/
?>

分析:

  • strlen() 函数返回字符串的长度

  • strrev() 反转字符串顺序

This is an example:

<?php
echo strrev("Hello World!");
?>

输出反转字符串 “!dlroW olleH”:

  • substr() 函数返回字符串的一部分。substr(string,start,length)

    tips:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

  • <?php echo substr("Hello world",6); ?>从字符串中返回 “world”:

  • ord() 函数返回字符串中第一个字符的 ASCII 值。

  • chr() 函数从指定 ASCII 值返回字符。并可以指定ASCII是十进制或是十六进制或是八进制。

  • “.” 是字符运算符,作用是把两个字符串连接起来,其使用方法:首先创建一个PHP示例文件;然后定义两个变量;最后通过“$result.$result”方式将两个变量连接起来即可

  • str_rot13() 函数对字符串执行 ROT13 编码。

    ROT13 编码是把每一个字母在字母表中向前移动 13 个字母得到。数字和非字母字符保持不变。

综上,题目提示我们逆向加密算法,也就是说第一步加密变为最后一步,以此类推,那可以构造出逆向后的代码

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$a = base64_decode(strrev(str_rot13($miwen)));
 
 
for($i=0;$i<strlen($a);$i++){
	$_c=substr($a,$i,1);
	$d=ord($_c)-1;
	$_c=chr($d); 
	$b=$b.$_c;
	
}
$p= strrev($b);
echo $p;
?>

Successfully caught the flag!


Web康复训练-攻防世界Web2
https://zer0ptr.github.io/2025/07/12/Web康复训练-攻防世界Web2/
Author
zer0ptr
Posted on
July 12, 2025
Licensed under