MISC

ASCII编码

  • 控制字符(不可打印字符):范围是0到31和127,十六进制对应0X00到0X1F和OX7E;
  • 可打印字符:范围是32到126,十六进制对应0X00到0X7E

Base64编码

  • 一个字节的范围是0到255,其中0到31和127和255是不可打印字符

CTF入门

CTF简介

CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式,2013年全球举办了超过五十场国际性CTF赛事。

CTF比赛模式

  • 解题模式(Jeopardy):**在解题模式CTF赛制中,参赛队伍可以通过互联网或者现场网络参与,这种模式的CTF竞赛与ACM编程竞赛、信息学奥赛比较类似,以解决网络安全技术挑战题目的分值和时间来排名,通常用于在线选拔赛。题目主要包含逆向、漏洞挖掘与利用、Web渗透、密码、取证、隐写、安全编程等类别。
  • 攻防模式(Attack-Defense):在攻防模式CTF赛制中,参赛队伍在网络空间互相进行攻击和防守,挖掘网络服务漏洞并攻击对手服务来得分,修补自身服务漏洞进行防御来避免丢分。攻防模式CTF赛制可以实时通过得分反映出比赛情况,最终也以得分直接分出胜负,是一种竞争激烈,具有很强观赏性和高度透明性的网络安全赛制。在这种赛制中,不仅仅是比参赛队员的智力和技术,也比体力(因为比赛一般都会持续48小时及以上),同时也比团队之间的分工配合与合作。
  • 混合模式(Mix):**结合了解题模式与攻防模式的CTF赛制,比如参赛队伍通过解题可以获取一些初始分数,然后通过攻防对抗进行得分增减的零和游戏,最终以得分高低分出胜负。采用混合模式CTF赛制的典型代表如iCTF国际CTF竞赛

CTF方向

  • WEB(web类):WEB应用在今天越来越广泛,也是CTF夺旗竞赛中的主要题型,题目涉及到常见的Web漏洞,诸如注入、XSS、文件包含、代码审计、上传等漏洞。这些题目都不是简单的注入、上传题目,至少会有一层的安全过滤,需要选手想办法绕过。且Web题目是国内比较多也是大家比较喜欢的题目。因为大多数人开始安全都是从web日站开始

  • MISC(安全杂项):全称Miscellaneous。题目涉及流量分析、电子取证、人肉搜索、数据分析、大数据统计等等,覆盖面比较广。我们平时看到的社工类题目;给你一个流量包让你分析的题目;取证分析题目,都属于这类题目。主要考查参赛选手的各种基础综合知识,考察范围比较广

  • CRYPTO(密码学):全称Cryptography。题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。实验吧“角斗场”中,这样的题目汇集的最多。这部分主要考查参赛选手密码学相关知识点。

  • REVERSE(逆向):全称reverse。题目涉及到软件逆向、破解技术等,要求有较强的反汇编、反编译扎实功底。需要掌握汇编,堆栈、寄存器方面的知识。有好的逻辑思维能力。主要考查参赛选手的逆向分析能力。此类题目也是线下比赛的考察重点。

编码解码

古典密码

凯撒密码

  • 在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

![](C:\Users\21649\Pictures\Screenshots\屏幕截图 2024-10-27 172052.png)

  • 根据偏移量的不同,还存在若干特定的恺撒密码名称:偏移量为10:Avocat(A→K)偏移量为13:ROT13偏移量为-5:Cassis (K 6)偏移量为-6:Cassette (K 7)

维吉尼亚密码

  • 维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。维吉尼亚密码曾多次被发明。该方法最早记录在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso)于1553年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso)中。然而,后来在19世纪时被误传为是法国外交官布莱斯·德·维吉尼亚(Blaise De Vigenère)所创造,因此现在被称为“维吉尼亚密码”。维吉尼亚密码以其简单易用而著称,同时初学者通常难以破解,因而又被称为“不可破译的密码”(法语:le chiffre indéchiffrable)。这也让很多人使用维吉尼亚密码来加密的目的就是为了将其破解。 [1]

  • ![](C:\Users\21649\Pictures\Screenshots\屏幕截图 2024-10-27 172601.png)

  • 例如,假设明文为:
    ATTACKATDAWN
    选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:
    LEMONLEMONLE
    对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:
    明文:ATTACKATDAWN密钥:LEMONLEMONLE密文:LXFOPVEFRNHR
    解密的过程则与加密相反。例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母L位于A列,因而明文第一个字母为A。密钥第二个字母E对应E行字母表,而密文第二个字母X位于此行T列,因而明文第二个字母为T。以此类推便可得到明文。

培根密码

  • ![](C:\Users\21649\Pictures\Screenshots\屏幕截图 2024-10-27 173220.png)

加密者需使用两种不同字体,分别代表A和B。准备好一篇包含相同AB字数的假信息后,按照密文格式化假信息,即依密文中每个字母是A还是B分别套用两种字体。解密时,将上述方法倒转。所有字体一转回A,字体二转回B,以后再按上表拼回字母。法兰西斯·培根另外准备了一种方法,其将大小写分别看作A与B,可用于无法使用不同字体的场合(例如只能处理纯文本时)。但这样比起字体不同更容易被看出来,而且和语言对大小写的要求也不太兼容。培根密码本质上是将二进制信息通过样式的区别,加在了正常书写之上。培根密码所包含的信息可以和用于承载其的文章完全无关。

栅栏密码

①把将要传递的信息中的字母交替排成上下两行。

②再将下面一行字母排在上面一行的后边,从而形成一段密码。

③例如:明文:THE LONGEST DAY MUST HAVE AN END加密:

1、把将要传递的信息中的字母交替排成上下两行。

T E O G S D Y U T A E N N

H L N E T A M S H V A E D

2、 密文:将下面一行字母排在上面一行的后边。

TEOGSDYUTAENN

HLNETAMSHVAED

解密:先将密文分为两行

T E O G S D Y U T A E N N

H L N E T A M S H V A E D

再按上下上下的顺序组合成一句话明文:THE LONGEST DAY MUST HAVE AN END

希尔密码

base密码

base16

  • base16编码也称为十六进制编码或Hex编码,是一种将二进制数据表示为十六进制数字和字符的方法。它使用16个字符(0-9和A-F)来表示4位二进制数的每个组合。

  • 编码原理:由于4bit就可以表示2^4 = 16个字符。所以用4bit可以表示所有的十六进制数。

    1byte=8bit 所以1byte = 俩个十六进制数据。

  • ![](C:\Users\21649\Pictures\Screenshots\屏幕截图 2024-10-27 174508.png)

将二进制数据分割为4个一组,将每四位二进制数据映射到对应的base16字符,一一对应,若二进制数据不是4的倍数,就在后面填充0。

base32

  • Base32编码是一种将二进制数据转换为使用32个不同字符表示的文本编码方式

    由于5bit就可以表示2^5 = 32个字符。
    所以base32就是将二进制数据分割成5个一组,如果结尾不满足5的倍数,就用“=”填充,之后再根据base32索引表,进行编码。

    ![](C:\Users\21649\Pictures\Screenshots\屏幕截图 2024-10-27 174846.png)

base64

1)原理:
1.准备要编码的二进制数据: 将要编码的二进制数据准备好,通常是字节的形式。
2.分组: 将二进制数据分成固定大小的组,每组通常为3字节(24位)。如果最后一组不足3字节,通常需要进行填充,以便每组都有3字节。
3.将每个组的二进制数据转换为十进制: 将每个3字节的二进制数据视为一个8bit*3=24bit位的二进制整数,再转化为一个十进制整数。
4.Base64编码: 将每个十进制整数编码为Base64字符。

1)Base64字符集通常包括64个字符,通常是大写字母A到Z、小写字母a到z、数字0到9以及两个额外的字符(通常是”+”和”/“)。
2)以24位整数为例,将它分成4组,每组6位。这4组6位整数将被编码为4个Base64字符。
3)每个6位整数对应一个Base64字符,根据其在Base64字符集中的位置来选择。
4)如果原始数据不足3字节,会添加一个或两个额外的0位,以确保每个6位整数都有6位。
5)Base64编码的结果是一个文本字符串,其中包含一系列Base64字符,每4个字符分为一组,每组表示一个24位整数。
5.填充(可选): 如果原始数据的长度不是3的倍数,可以使用一个或两个填充字符“=”来补全Base64编码,以确保编码长度是4的倍数。
最终,Base64编码的结果就是表示输入二进制数据的文本字符串。在解码时,可以根据相同的算法将Base64编码的文本字符串还原为原始的二进制数据。

![](C:\Users\21649\Pictures\Screenshots\屏幕截图 2024-10-27 175054.png)