背景知识
代码审计
题目
由上述可知,这段代码定义了一个函数encode,接受一个字符串参数$str,并返回对其进行加密后的结果
加密算法包括:
- 使用strrev函数将字符串进行翻转;
- 对翻转后的每个字符,将其ASCII值加1,然后转换为相应的字符
- 将得到的新字符使用base64编码,再编码后的结果进行strrev翻转和str_rot13处理,最终得到加密后的结果
str_rot13 是一个简单的字符替换算法,将每个字符替换为它在字母表中向后移动 13 位后对应的字符。这个算法是一种经典的简单加密方法,可以用来隐藏字符串的真实含义。
可通过逆向加密算法的步骤,对 $miwen 进行相反的操作,即先使用 str_rot13 还原,然后使用 strrev 翻转,再使用 base64 解码,最后对每个字符的 ASCII 值减 1 ,再进行翻转即可得到 flag。
先得到加密的密文:a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws
解密脚本:
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$miwen=base64_decode(strrev(str_rot13($miwen)));
//echo $miwen;
$m=$miwen;
for($i=0;$i<strlen($m);$i++){
$_c=substr($m,$i,1);
$__=ord($_c)-1; # 字符转数字,在减1
$__=chr($__); # 数字转字符
$_=$_.$__; # 拼接字符串
}
echo strrev($_); # 反转字符串
?>
PHP在线编辑网站:PHP 在线工具 | 菜鸟工具
得到flag
参考学习文章:
[CTF/网络安全]攻防世界 web2 解题详析_web2 攻防世界_秋说的博客-CSDN博客
【愚公系列】2023年05月 攻防世界-Web(web2)-腾讯云开发者社区-腾讯云