CTF入门学习笔记——Crypto密码(编码)

文章目录

  • CTF入门学习笔记——Crypto密码(编码)
    • BASE编码
      • BASE16
      • BASE32
      • BASE64
      • BASE85
        • [AFCTF 2018]BASE
    • Uuencode编码
        • [SWPUCTF 2021 新生赛]crypto8
    • Rabbit编码
        • Rabbit
    • URL编码
        • URL
    • Quoted-Printable编码
        • Quoted-Printable
    • 待补充

CTF入门学习笔记——Crypto密码(编码)

🚀🚀这篇笔记是我对自己初步学习CTF的一个小总结,主要涉及了Crypto板块的编码,这部分内容比较简单,利用一些工具就可以轻松解决,但是有些需要很强的观察分析能力,所以此篇笔记主要起到一个分析总结的作用。


BASE编码

🚀🚀单纯BASE编码相对来说比较简单,使用在线解码工具或者使用Python编写代码就能轻易解决,但是BASE题往往是嵌套类型的,比如BASE16嵌套BASE32,或者是多重编码嵌套,所以有时候一时半会无法解决,这就需要我们耐心观察和分析了(一把梭除外)。

🚀🚀接下来我们来介绍一下BASE编码:


BASE16

🚀🚀BASE16编码就是将二进制文本转换为以下16个字符组成的文本:

0123456789ABCDEF

🚀🚀所以BASE16有他的显著特征,就是所有的数字以及A~F的大写字母,这和其他几种BASE编码有些许不同。


BASE32

🚀🚀BASE32对应的文本如下所示,其中=号是填充字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=

🚀🚀BASE32主要的特点就是全大写字母加2~7的数字。


BASE64

🚀🚀BASE64对应的文本如下所示:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

🚀🚀BASE64主要的特点就是小写字母加+/这些特殊符号,所以算是比较号区分的。


BASE85

🚀🚀BASE85与前面有些不同,他是将四个字节的二进制数组成一个32位的数,然后转换为85进制,最后每一位加上32转为字符,所以并无显著特征。


🚀🚀接下来我们来看一道BASE编码的题目来强化一下:

[AFCTF 2018]BASE

🚀🚀题目:[AFCTF 2018]BASE | NSSCTF

🚀🚀我们下载附件,得到一个文本文件,部分如下所示:

78546C526A643035555454464E56453134546C56464D5535715654464F61306B7A546B5253525535555458704E52474E33546B526A4D5535715654424F56555578546B52564D5531365158705056464A43546C524E4D6C4671556B5A4F56466B77556C52615245355652544252656C5636545870424D3035455658704F56456B78546D7057516B35455754464F56467045546B56564D55353656586C4E656B5577555652535245355557544A52616C6B77546C526A4D5535555458644F656C4577555652564D3035725354464F616C557A546C524E4D553571556B4A4F52553078546D704E6430357254544253616C5635546C52564D55357156544A

🚀🚀我们观察一下,发现这是BASE16编码,于是我们使用在线解码工具或者编程,看一下解码结果是什么,结果如下所示:

xTlRjd05UTTFNVE14TlVFMU5qVTFOa0kzTkRSRU5UTXpNRGN3TkRjMU5qVTBOVUUxTkRVMU16QXpPVFJCTlRNMlFqUkZOVFkwUlRaRE5VRTBRelV6TXpBM05EVXpOVEkxTmpWQk5EWTFOVFpETkVVMU56VXlNekUwUVRSRE5UWTJRalkwTlRjMU5UTXdOelEwUVRVM05rSTFOalUzTlRNMU5qUkJORU0xTmpNd05rTTBSalV5TlRVMU5qVTJ

🚀🚀发现这是BASE64格式的,所以我们猜测这应该是BASE嵌套解码,所以我们写一个脚本来运行一下,代码如下所示:

import re, base64
s = open("flag_encode.txt", "rb").read()
# 正则表达式,用来尽可能多的匹配字符串
base16_dic = r'^[A-F0-9]*$'
base32_dic = r'^[A-Z2-7=]*$'
base64_dic = r'^[A-Za-z0-9/+=]*$'
# 循环解码
while True:t = s.decode()if '{' in t:print(t)breakelif re.match(base16_dic, t):s = base64.b16decode(s)print(16)elif re.match(base32_dic, t):s = base64.b32decode(s)print(32)elif re.match(base64_dic, t):s = base64.b64decode(s)print(64)

🚀🚀运行结果如下所示:

16
64
64
16
64
32
32
32
16
32
32
32
32
32
16
32
32
64
32
64
64
32
32
16
32
64
64
16
64
64
afctf{U_5h0u1d_Us3_T00l5}

🚀🚀最终我们得到了flag,同时也说明我们是正确的,他就是包含了很多的BASE编码。


Uuencode编码

🚀🚀Uuencode编码其实和BASE64的原理类似,只不过他是处理完之后对每个数加32,这样使结果正好在ASCII的可打印字符中,所以编码结果就是一堆字符,无明显规律,这种情况就可以使用Uuencode编码试试了。

[SWPUCTF 2021 新生赛]crypto8

🚀🚀题目:[SWPUCTF 2021 新生赛]crypto8

🚀🚀打开附件得到一串字符,考虑使用Uuencode解码(有很多在线工具都可以)

73E-30U1&>V-H965S95]I<U]P;W=E<GT`

🚀🚀解码结果如下所示:

NSSCTF{cheese_is_power}


Rabbit编码

🚀🚀Rabbit编码Rabbit 是一种高速流密码,于 2003 年在 FSE 研讨会上首次提出。 Rabbit 使用一个 128 位密钥和一个 64 位初始化向量。 该算法的核心组件是一个位流生成器,该流生成器每次迭代都会加密 128 个消息位。主要有以下三个特征:

  1. 由26个大小写字母和=,+,/组成
  2. 以U2FsdGVkX1开头,这是一个很重要的特征
  3. 可能以=号结束

🚀🚀接下来我们看一道题目,来加强一下认知:

Rabbit

🚀🚀题目:BUUCTF在线评测 (buuoj.cn)

🚀🚀我们可以看到附件只有一行以U2FsdGVkX1开头的字母:

U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

🚀🚀所以我们采用在线解码工具,得到:

Cute_Rabbit

🚀🚀这便是我们需要的flag。


URL编码

🚀🚀URL编码就比较简单,有着很明显的特征,就是许多的%号,所以一眼看到就能大概能猜到是URL编码。

URL

🚀🚀题目:BUUCTF在线评测 (buuoj.cn)

🚀🚀打开附件,得到如下信息:

%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

🚀🚀使用在线解码工具,结果如下所示:

flag{and 1=1}


Quoted-Printable编码

🚀🚀Quoted-Printable编码方法,适合所传输数据中,只有少量的非ASCII编码,用一个等号(=)后面加两个数字字符来表示一个非ASCII码字符。所以特征也很明显,那就是有许多的=号。

Quoted-Printable

🚀🚀题目:BUUCTF在线评测 (buuoj.cn)

🚀🚀打开附件,得到如下信息:

=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

🚀🚀使用在线解码工具,结果如下所示:

那你也很棒哦


待补充

🚀🚀CTF中的编码远远不止这些,比如XXencode、jjencode、bubbleBabble、Ook、佛曰、社会主义核心价值观等等,我会在接下来的学习中不断补充,同时也希望我能一直坚持下去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm配置及使用Git教程

文章目录 1. 安装PyCharm2. 安装Git3. 在PyCharm中配置Git插件4. 连接远程仓库5. Clone项目代码6. 将本地文件提交到远程仓库6.1 git add6.2 git commit6.3 git push6.4 git pull 7. 代码回滚8. 分支操作8.1 新建分支8.2 切换分支8.3 合并分支8.4 删除分支 9. 解决本地和远程冲…

model加载模型部分参数

参考&#xff1a;pytorch 加载使用部分预训练模型(pretrained model)_在模型中使用了预训练模型作为一部分-CSDN博客PyTorch中model.state_dict()&#xff0c;model.modules()&#xff0c;model.children()&#xff0c;model.named_children()等含义_不吃饭就会放大招的博客-CS…

《TCP/IP网络编程》阅读笔记--I/O复用

目录 1--基于I/O复用的服务器 2--select()函数 3--基于I/O复用的回声服务器端 4--send()和recv()函数的常用可选项 5--readv()和writev()函数 1--基于I/O复用的服务器 多进程服务器端具有以下缺点&#xff1a;当有多个客户端发起连接请求时&#xff0c;就会创建多个进程来…

第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

企业架构LNMP学习笔记29

Nginx负载均衡配置&#xff1a; 架构分析&#xff1a; 1&#xff09;用户访问请求Nginx负载均衡服务器&#xff1b; 2&#xff09;Nginx负载均衡服务器再分发请求到Web服务器。 实际配置负载均衡&#xff0c;只需修改作为负载均衡服务器的Nginx即可&#xff0c;当前架构中的…

【android 蓝牙开发——蓝牙耳机】

【android 蓝牙开发——传统蓝牙】 【android 蓝牙开发——BLE&#xff08;低功耗&#xff09;蓝牙 2021-10-09更新】 总结一下蓝牙开发的基本使用以及蓝牙耳机的断开和链接。 所以需权限&#xff1a; <uses-permission android:name"android.permission.ACCESS_FIN…

微服务·架构组件之网关

微服务架构组件之网关 引言 微服务架构已成为构建大型和复杂应用程序的流行范式之一。在微服务架构中&#xff0c;通常一个系统会被拆分为多个微服务&#xff0c;如果 客户端多次请求不同的微服务&#xff0c;会增加客户端代码和配置的复杂性&#xff0c;维护成本比较高。每…

用冒泡排序完成库函数qsort的作用

Hello&#xff0c;今天分享的是我们用冒泡函数实现qsort&#xff0c;也就是快排&#xff0c;之前我们也讲过库函数qsort的使用方法&#xff0c;今天我们尝试用冒泡函数实现一下&#xff0c;当然我们也见过qsort&#xff0c;后面也会继续完善的。这几天我是破防大学生&#xff0…

Github上1.1KFork的C++笔记

编程语言(C/C) 原文链接&#xff0c;如果觉得本文对你有所帮助&#xff0c;欢迎去原地址点个Star⭐。侵删 https://github.com/linw7/Skill-Tre 目录 Chapter 1Chapter 2Chapter 3Chapter 4编程基础面向对象基础标准模板库编译及调试 内容 Chapter1&#xff1a;编程基础 C/…

Debian11安装PostgreSQL+PostGIS+pgRouting ,链接Navicat

船新版本&#xff0c;遵循官网教程 1 准备一个Debian11系统2 从官网安装Postgres2.1 安装Postgres2.2 修改Postgres密码2.3 配置Postgres远程访问 3 安装Postgis、pgRouting4 链接Navicat 1 准备一个Debian11系统 2 从官网安装Postgres 2.1 安装Postgres 1 进入Postgre的官网…

第一类曲线积分与二重积分在极坐标系下表示的区别

1.第一类曲线积分与二重积分在极坐标系下表示的区别 区别主要来源于一是曲线积分的积分区域为边界&#xff0c;而二重积分的积分区域为内部边界&#xff0c;二是极点位置选取的不同&#xff0c;二者共同造成在积分区域在极坐标下表示的不同&#xff0c;即 ρ \rho ρ是常量还是…

uboot 顶层Makefile-make xxx_deconfig过程说明三

一. uboot 的 make xxx_deconfig配置 本文接上一篇文章的内容。地址如下&#xff1a;uboot 顶层Makefile-make xxx_deconfig过程说明二_凌肖战的博客-CSDN博客 本文继续来学习 uboot 源码在执行 make xxx_deconfig 这个配置过程中&#xff0c;顶层 Makefile有关的执行思路。 …

spring boot+redis整合基础入门

文章目录 前言准备依赖项配置文件redis模板类注入设置序列化方式 实施基础字符串操作、超时设置Hash操作hash的使用场景以及优缺点 列表操作列表操作的应用场景以及优缺点 Set的基础操作Set类型的业务场景以及优缺点Demo地址 总结 前言 最近项目中有用到redis进行一些数据的缓…

导数公式及求导法则

目录 基本初等函数的导数公式 求导法则 有理运算法则 复合函数求导法 隐函数求导法 反函数求导法 参数方程求导法 对数求导法 基本初等函数的导数公式 基本初等函数的导数公式包括&#xff1a; C0(x^n)nx^(n-1)(a^x)a^x*lna(e^x)e^x(loga(x))1/(xlna)(lnx)1/x(sinx)cos…

Python---数据容器分类及通用操作

数据容器可以从以下视角进行简单的分类: 是否支持下标索引&#xff1a; 支持:列表、元组、字符串 - 序列类型不支持:集合、字典 - 非序列类型 是否支持重复元素: 支持:列表、元组、字符串 - 序列类型不支持:集合、字典 - 非序列类型 是否可以修改&#xff1a; 支持:列表、…

阿里云服务器配置怎么选择?几核几G?带宽系统盘怎么选?

阿里云服务器配置选择_CPU内存/带宽/存储配置_小白指南&#xff0c;阿里云服务器配置选择方法包括云服务器类型、CPU内存、操作系统、公网带宽、系统盘存储、网络带宽选择、安全配置、监控等&#xff0c;阿小云分享阿里云服务器配置选择方法&#xff0c;选择适合自己的云服务器…

C++系列-空指针访问成员函数及野指针

C系列-空指针访问成员函数 空指针空指针访问成员函数 野指针 空指针 在变量声明的时候&#xff0c;如果没有确切的地址可以赋值&#xff0c;为指针变量赋一个 NULL 值是一个良好的编程习惯。NULL指针是没有指向任何内容的指针。赋为 NULL 值的指针被称为空指针。 在大多数的操…

用selenium webdriver获取网站cookie后,实现免登录上网站

以csdn为例&#xff0c;代码分为两部分。 一、csdn_get_cookies.py为半手动登录网站后获取cookies 二、csdn_use_cookies.py为使用获取到的cookies免登录上网站 #获取登录cookiesfrom selenium import webdriver import jsoncsdn_driver webdriver.Chrome() url "htt…

ChatGPT OpenAI 完成Excel组合函数Vlookup+match多条件查找

ChatGPT OpenAI 现在已经助力职场办公。 我们现在有这样一个Excel需求: 根据姓名与科目查找对应的分数。可以使用Vlookup+match组合函数一起来实现 。 我们将公式复制到Excel中来进行验证。 ChatGPT生成的Excel函数公式可以直接进行使用。 更多实战内容。

Android:使用命令行发现keytool不是内部命令解决办法

一、前言&#xff1a;最近在搞引入高德地图的SDK&#xff0c;发现需要给app签名打包。记录一下。 二、当我在命令行中输入keytool的时候说keytool不是内部命令 解决方案&#xff1a; 找到系统属性--------高级----------点击环境变量 双击点开 找到java\jre1.8.0_202\bin新建…