当前位置: 首页 > news >正文

攻防世界 web2

这个题需要考察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}

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

相关文章:

  • 机器人运动学标定:基于公垂线模型的指数积标定——减少标定参数,避免过度约束
  • 机器学习模型的集成方法总结:Bagging, Boosting, Stacking, Voting, Blending
  • 全志 Melis-4.0(rt-thread内核) 环境搭建与初步编译介绍
  • JUC 中的线程池入门(其实没有那么难)
  • 派福利!通过 Azure 零成本进入 CUDA 编程
  • 10.6日作业
  • Mybatis,动态代理方式的CRUD
  • Linux 进程管理类
  • 魔法方阵(CSP-J模拟赛)
  • 线上服务宕机,码农试用期被毕业,原因竟是给MySQL加个字段
  • 【axios】二次封装——避免重复发送请求
  • 没有那么难,基于 Echarts + Python Flask 动态实时大屏轻松可以实现
  • 【每日一算法】高精度算法 | 加法 | 减法_模板应用
  • 2022华为杯A题第一问详细思路
  • Qt5.14.2开发Mqtt应用程序
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • miaov-React 最佳入门
  • mysql 5.6 原生Online DDL解析
  • PAT A1120
  • 编写符合Python风格的对象
  • 简单实现一个textarea自适应高度
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端面试题总结
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信开源mars源码分析1—上层samples分析
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 与 ConTeXt MkIV 官方文档的接驳
  • 自制字幕遮挡器
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • #数学建模# 线性规划问题的Matlab求解
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (分类)KNN算法- 参数调优
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (推荐)叮当——中文语音对话机器人
  • (一)SpringBoot3---尚硅谷总结
  • (一)UDP基本编程步骤
  • (转)Windows2003安全设置/维护
  • .form文件_SSM框架文件上传篇
  • .NET Core 2.1路线图
  • .Net Winform开发笔记(一)
  • .net 反编译_.net反编译的相关问题
  • .NET 设计一套高性能的弱事件机制
  • .NET 指南:抽象化实现的基类
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @EnableConfigurationProperties注解使用
  • @EventListener注解使用说明
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证