我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第4篇文章,点击查看活动详情
引文
CTF比赛中编码题目是非常常见的通常作为题目中的一小步来作为考点,今天带大家总结一下CTF中常用的编码类型。
BASE全家桶
Base系列:Base64 Base32 Base16
我们以Base64编码为例,Base64将输入字符串按字节切分,用字节对应的二进制值(若不足8比特则高位补0),然后将这些二进制数值串联起来,再按照6比特一组进行切分,接着一组若不足6比特则末尾补0。二进制值转成十进制,找到对应的符号串联起来就是Base64编码结果。
我们举例:base64(XINO)
WElOTw==
这是比较常见的,还有不常见的如base58,base62,base100等,其具有一些不一样的特征,有兴趣的可以自行了解。
凯撒密码
在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
例子:
synt{zlharw62onc209mm}
可以看到毫无规律,可以用网站或脚本编写解密:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print("凯撒密码解密")
#密文
str = 'synt{zlharw62onc209mm}'
#密钥(平移位数)
my = 12
print(str,"密钥",my)
print("密文:", end='')
for i in str:mw = ord(i)if (64 < mw < 91):#大写字母jm = mw + myif jm > 90:jm = (mw - 26) + myprint(chr(jm), end='')else:print(chr(jm), end='')elif (96 < mw < 123):#小写字母jm = mw + myif jm > 122:jm = (mw - 26) + myprint(chr(jm), end='')else:print(chr(jm), end='')else:#数字和特殊字符不做修改jm = mw + 0print(chr(jm), end='')
如上当偏移为13是得到结果
flag{myunej62bap209zz}
ROT13
ROT13(回转13位,rotate by 13 places,有时中间加了个连字符称作ROT-13)是一种简易的替换式密码。它是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13被描述成“杂志字谜上下颠倒解答的Usenet点对点体”。ROT13 也是过去在古罗马开发的凯撒加密的一种变体。
看百度简介就了解差不多了,凯撒变体,解密方式差不多就不细讲了。
JSFUCK
jsfuck源于一门编程语言brainfuck,使用8种特定的符号来编写代码。而jsfuck也是沿用了这个思想,它仅仅使用6种符号来编写代码。它们分别是 (、)、+、[、]、!.
实例:
false =>![]
true=>!![]
undefined =>[][[]]
NaN =>+[![]]
0 =>+[]
1 =>+!+[]
2 =>!+[]+!+[]
10=>[+!+[]]+[+[]]
Array =>[]
Number=>+[]
String=>[]+[]
Boolean =>![]
Function=>[]["filter"]
eval=>[]["filter"]["constructor"]( CODE )()
window=>[]["filter"]["constructor"]("return this")()
XXencode/AAencode/UUencode
因为名字差不多就放一起了。就拿AAencode来说,其原理是将JS编码转换为了颜文字,十分有趣。比如:
゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚)=_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
有兴趣的小伙伴可以看看这是什么意思。
社会主义核心价值观
看标题就知道是利用社会主义核心价值观编码,编码后类似于:富强民主文明和谐…
摩斯电码
摩尔斯电码(Morse alphabet)(又译为摩斯电码)是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。
维吉尼亚密码
人们在单一恺撒密码的基础上扩展出多表密码,称为"维吉尼亚"密码。该方法最早记录在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso)于1553年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso)中。
举百度百科下面的例子如下:
明码表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密码表1 Q W E R T Y U I O P A S D F G H K J L Z X C V B N M
密码表2 E K P R J B D N C V O U H T Y W Z X M L A S F I G Q
第一个密码表加密第一个字母,第二个密码表加密第二个字母,第一个密码表又加密第三个字母,不断地重复…那么:
明文 F O R E S T
密文 Y Y J J L L
结语
简单介绍了几个CTF比赛中常见的编码考点,当然远远不止这一些,有兴趣的小伙伴可以自己去找找。
最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。
因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。
干货主要有:
①1000+CTF历届题库(主流和经典的应该都有了)
②CTF技术文档(最全中文版)
③项目源码(四五十个有趣且经典的练手项目及源码)
④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/渗透测试工具镜像文件大全
⑦ 2023密码学/隐身术/PWN技术手册大全
扫码领取