攻防世界 web2

35 篇文章 2 订阅
10 篇文章 0 订阅

这个题需要考察php的代码审计,需要具备一定的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
*/
?>

最后一段说这个就是思路

首先先看看代码中的几个函数

Strlen()函数   将返回字符串的长度

Strrev()函数     将字符串倒置并且返回

Substr()函数    将返回字符串的一部份

此函数里面有三个参数   分别是string,start,length

代表字符串,开始的位置,返回字符的长度

Ord()函数   将返回第一个字符的ASCLL的值

Chr()函数    将ASCLL值返回成为字符  

Str_rot13函数    将字符串进行ROT13编码   也就是把每一个字母向前移13个   这个和字母表26个英文相呼应我们编码两次即可以进行解密,相当于没有加密,此函数对非字母字符无效,仍保持为原来的字符

. 符号  代表拼接两个字符

想要了解更多可以看看

php常用函数最全总结_筑梦悠然的博客-CSDN博客_php常用函数大全

现在便可以做题了

经过知道函数意义   我们可以一步步看懂这个加密过程

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){//这里是加密函数
    $_o=strrev($str);  //这里对字符串进行倒置
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++) {      
        $_c=substr($_o,$_0,1);  //从$_0中一个一个将字符取出

        $__=ord($_c)+1;   //字符ASCLL码值+1
        $_c=chr($__);      //ASCLL码值变回字符


        $_=$_.$_c;        //拼接每一个字符
    } 
    return str_rot13(strrev(base64_encode($_)));//将字符串先base64加密 ,再倒置,再进行ROT13编码
}

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

由此我们进行逆向解密

应该从下面开始来

先base64解密  base64_decode()

使用 strrev()倒置字符串

再进行ROT13编码   刚好26个字母进行两次刚好完成解密

之后就是将字符的ASCLL码值-1

字符串再进行倒置

同样我们也使用php,使用echo将解密结果输出

可以使用本地环境或者在线环境

PHP 在线工具 | 菜鸟工具

<?php

$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

$a=base64_decode(strrev(str_rot13($miwen)));   

for($b=0;$b<strlen($a);$b++){

        $c=substr($a,$b,1);

        $d=ord($c)-1;

        $c=chr($d);

        $e=$e.$c;  

}

$f=strrev($e);

echo $f;

?>

得到flag

flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

此为本小白思路,若有错误欢迎指出

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值