本系列文集:实验吧-Write up --将持续更新 觉得还不错请给个喜欢,感谢!
点开题目看到如图,显然这是一道关于PHP审计的题目
代码中重点函数:
1.strrev(): 函数反转字符串。Hello World! <----> !dlroW olleH
2.strsub(str, start, length):函数用于取字符串的子串,
str:第一个参数为字符串,
start:第二个参数为起始位置,
length:第三个参数为子串长度,
返回的结果就是str字符串从start这个位置开始的长度为length的子串。
3.ord(str): 函数将返回字符串第一个字符的Acsii码。
4.chr(): 函数的参数为整型,此函数将ASCII值返回字符。
5.".":“.”在字符串中相当于我们Java中的“+”,用于连接字符串。
6.base64_encode:对字符串参数进行base64编码,与之对应的解码函数为base64_decode。
7.str_rot13:对字符串参数进行ROT13编码,ROT13是它自己本身的逆反;也就是说,要还原ROT13,套用加密同样的算法即可得。
分析:
加密代码首先将明文进行反转,然后再将反转后的字符串的每一个字符值+1,再转化为ASCII值,再将每一个字符连接成字符串,接下来再进行base64编码、反转和ROT13编码,得到我们的密文。
解密:
想要得到明文,因为所有的操作都是可逆的,我们只需要将这些步骤反着来一遍即可,代码如下:
<?php
$code = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$code = str_rot13($code);
$code = strrev($code);
$code = base64_decode($code);
$res = "";
for($i = 0; $i < strlen($code); $i++) {
$n = substr($code, $i, 1);
$m = ord($n) - 1;
$n = chr($m);
$res = $res . $n;
}
$res = strrev($res);
echo $res;
?>
运行之后得到明文即flag