攻防世界-web2
首先我们先来打开环境,进去。里面是一段php代码,还是需要代码审计的,这段代码其实并不难,一定要每行都认认真真地读一下。
好,我们开始代码审计吧。我先把代码给扔过来
<?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 */ ?>
看来是用一段代码来将flag加密了。需要我们一步一步的往回推。。上面也说了,是逆向加密算法,解密miwen就是flag。好了,那这样我们就有方向。先来看一下代码吧
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
miwen后面的那段字符串是加密后的。然后我们继续看
首先strrev是将字符串反转,那个就是将$str里的值反转赋给$_o,也是就是将flag反转了,赋值给了$_o
然后有一个for循环。strlen函数是统计字符串的长度。ord()函数其实就是将字符串转换成Ascii码,而chr()的话就是转成字符串嘛
总的来说,这整段for循环其实就是将反转后的flag的每个Ascii码值都加1然后再转回字符串,拼接上。
最后的str_rot13(strrev(base64_encode($_)));
base64_encode()函数就是将$_的值利用base64加密
strrev(base64_encode())再将加密后的密文反转一下。
str_rot13是rot13加密算法。
这段代码的意思就是先将$_的值base64加密一下,然后反转加密后的字符串,最后再利用rot13加密一下。就得到了miwen的值。
那好我们来解密一下。首先我们将miwen利用rot13解密,得到
n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf
再将这段字符串反转,再base64解密一下,得到:
~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg
然后要将上面的字符串的每个ascii码都减去1。那我们写一个小小的脚本:
string ="~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg" news='' for i in string: if i==" ": news = news + i else: news = news + chr(ord(i)-1) print(string) print(news)
运行以上python脚本就会输出:
88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg
}77925d0af7327d30646c918bfda5d37b_FTCSN{:galf
下面这段字符串再反转一下就得到了flag:
flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}
这个题是本博主一点点做的,并没有看wp,虽说题并不是很难,但是还是有点小激动。毕竟自己没有看wp
其实这道题可以写一个脚本直接就可以拿到flag,但是本博主太菜,写不出来。QAQ
继续学习吧!!!