代码审计
首先进行代码审计
<?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
*/
?>
首先定义一个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返回最终值
解题步骤
根据题目提示,我们需要对这段自定义的加密函数进行逆向解密
很简单,倒着来就行了
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
PHP strrev() 函数
strrev() 函数用于反转字符串。
语法
strrev( string)