攻防世界-WEB2

代码审计

首先进行代码审计

  • 首先定义一个encode函数,接受一个str变量

  • 将接收的变量利用strrev函数进行字符串反转,并赋值给$_o

  • 接着使用一个for循环,接着,遍历 $_o 中的每个字符。设定临时参数$_0初值为0,退出条件为临时变量$_0等于$_o(反转$str)的长度时

  • 在for循环内利用substr函数从$o(反转$str)中截取一个由临时参数$_0表示下标的字符,存储在 $_c 变量中。

  • 然后,通过 ord() 函数获取 $_c 字符的 ASCII 值,并+ 1,然后利用chr()函数,将数据转换为字符后重新赋值给$c

  • 将$_c 存储的字符追加到 $_ 变量中。

  • 循环结束后,将 $_ 变量进行base64编码,然后再利用strrev函数倒序,最后使用ROT13 编码,return返回最终值

解题步骤

根据题目提示,我们需要对这段自定义的加密函数进行逆向解密

攻防世界-WEB2_第1张图片

很简单,倒着来就行了

function decode($str){
    $result = '';
    $o = strrev(base64_decode(strrev(str_rot13($str))));
    for($i = 0;$i < strlen($o);$i++){
        $c = substr($o,$i,1);
        $c = chr(ord($c)-1);
        $result = $result.$c; 
    }
    return $result;

}
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
echo decode($miwen);

得到flag

攻防世界-WEB2_第2张图片

PHP strrev() 函数

strrev() 函数用于反转字符串。

语法
strrev( string)
攻防世界-WEB2_第3张图片

你可能感兴趣的:(PHP,PHP)