(ctf)攻防世界web模块020web2

2023-10-27

题目

在这里插入图片描述
首先来到给定的地址

在这里插入图片描述

题意很明确$miwen是加密之后的字符串,我们只需要逆向解密出miwen就能得到flag
我们先来代码审计

$_o=strrev($str); 

strrev()函数是字符串的倒置

for($_0=0;$_0<strlen($_o);$_0++)

for循环,从零开始循环字符串的长度次

        $_c=substr($_o,$_0,1);
        $__=ord($_c)+1;
        $_c=chr($__);
        $_=$_.$_c;

这里是for循环的内部,也就是每次循环要做的事情,首先是一个substr()函数
第一个参数是目标字符串,第二个参数是起始位置,第三个参数是截取的长度
那就是说,每次截取的长度是1,起始位置从0到字符串末尾

第二个函数是ord将字符串的第一位转换成ascii码的形式,
$__变量存储它加一的值

第三个函数,chr()将ascii码转换成字符,然后又存到了$_c中

最后的变量每次加上当前的字符

这个循环的作用其实就是将字符串中的每个字符做了+1的操作

return str_rot13(strrev(base64_encode($_))); 

最后还出现了三个函数
我们先来看第一步操作,是将当前的字符串做了base64加密的操作
第二步用到了strrev函数,给当前字符串做了反转
第三步用到了str_rot13函数,这个函数的作用是将字符串中的所有字母都向前移动十三位,例如A+1=B Z+1=A,是这样循环的形式

代码部分

这里不太会php和python,所以用了c++写了一个str_rot13()函数,base64用的bp(找机会自己写一个),str_rot13函数很巧妙它对字母做了+13的操作,我们知道字母总共有26,13正好是26的一半,所以经过两次加密的情况下就是+26,就又变成了原来的字符,所以加密算法即是解密算法
判断当前字符是字母之后,我们先将字符+13,然后判断当前字符是否大于最大的字母z或者Z,如果大于我们就对它进行取余的操作然后加上A就是结果

#include <bits/stdc++.h>
using namespace std;
int  main (void)
{
	string st="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
	vector<char> str;
	
	//相当于str_rot13()函数
	for(int i=st.size()-1;i>=0;--i)
	{
		int c=st[i];
		if(c>=int('A')&&c<=int('Z'))
		{
			c+=13;
			if(c>int('Z'))
				c=c%(int('Z')+1)+int('A');
			str.push_back(char(c));
		}
		else if(c>=int('a')&&c<=int('z'))
		{
			c+=13;
			if(c>int('z'))
				c=c%(int('z')+1)+int('a');
			str.push_back(char(c));
		}
		else
			str.push_back(st[i]);
	}
	
	cout<<"encode_base64: ";
	for(int i=0;i<str.size();i++)	cout<<str[i];
	cout<<endl; 

	
	//base64解密后~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg
	
	st="~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg";
	for(int i=st.size()-1;i>=0;--i)
	{
		char c=st[i];
		cout<<char(c-1);
	}
	 
	
	
	return 0;
	
} 

运行结果

在这里插入图片描述

总结

加密算法还挺好玩

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(ctf)攻防世界web模块020web2 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 重载<<的返回值

    include
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查

随机推荐