web2

可以看到如下源代码

<?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
*/
?>

那么进行一下分析

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str);//反转字符串
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){//循环字符串
       
        $_c=substr($_o,$_0,1);//substr(a,b,c)分割字符串函数,a为字符串,b代表位置,从字符串的第几位开始提取,c代表提取几个字符,则此处表示为依次提取一个字符
        $__=ord($_c)+1;//ord()函数返回长度为一的字符串对应的ASCII值,返回十进制整数
        $_c=chr($__);//chr(),返回ASCII值对应的字符,参数可以为十进制和十六进制的数字
        $_=$_.$_c;   //php中点号表示字符拼接
    } 
    return str_rot13(strrev(base64_encode($_)));//str_rot13编码并解码字符串,如,str_rot13(hello)=qwert,那么str_rot13(qwert)=hello
                                                //strrev(base64_encode($_))是反转base64加密后的字符,
}

highlight_file(__FILE__);
/*
   逆向加密算法,解密$miwen就是flag
*/
?>

写出逆向代码:
怎么一步步加密的,我们就一步步解密回去

这里简单说一下php页面的编写格式如下,中间是脚本代码:
- <?php  ?>

- $定义变量,如$a,变量a

像剥洋葱,一步步来

<?php
$str="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$_=base64_decode(strrev(str_rot13($str)));
$_o=NULL; //不需要定义也可以,只不过会报一个未定义变量的错,但结果还是会运行出来
for($_0=0;$_0<strlen($_);$_0++){
$_c=substr($_,$_0,1);
$__=ord($_c);
$_c=chr($__-1);
$_o=$_o.$_c;
}
echo strrev($_o);
?>

flag为:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

参考CSDN _Christo,侵删

上一篇:ctf show web2


下一篇:[CISCN2019 华北赛区 Day1 Web2]ikun