CTF入门——密码学基础

时间:2024-02-23 22:02:49
  • 开篇

协会纳新的人数越来越多,也直播了一些基础课程,不知道大家有没有全部看懂.初入信息安全不知道如何学是很常见的,我们竞赛的类型主要是CTF(cross the fire (o゚v゚)ノ2333开玩笑。。。。好吧是夺旗战  这是针对0基础的同学写的入门篇目,请大佬们轻喷~~

  • CTF介绍

CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式,2013年全球举办了超过五十场国际性CTF赛事。而DEFCON作为CTF赛制的发源地,DEFCON CTF也成为了目前全球最高技术水平和影响力的CTF竞赛,类似于CTF赛场中的“世界杯” 。(好想去DEFCONヾ(≧へ≦)〃... ...咳)

CTF是一种流行的信息安全竞赛形式,其英文名可直译为“夺得Flag”,也可意译为“夺旗赛”。其大致流程是,参赛团队之间通过进行攻防对抗、程序分析等形式,率先从主办方给出的比赛环境中得到一串具有一定格式的字符串或其他内容(格式一般为 flag{XXXXXX}   ),并将其提交给主办方,从而夺得分数。为了方便称呼,我们把这样的内容称之为“Flag”。

总而言是这种赛事就是通过技术手段(pwn 逆向分析 decode等)从 程序或者数据中 找到关键的字符串(flag)并正确提交。。。(●ˇ∀ˇ●)

  • 水了半天了,下面进入正题。


  • (初入CTF建议先从密码学入手,下面开始讲解):

 

  • 古典密码学

  • 凯撒密码(移位密码):通过明文在字母表中的偏位位数加密

例如偏移量为3位的时候:A对应D,B对应E,C对应F等。。。

这个很好懂,在这里就不详细说了。

偏移量为13位的时候凯撒密码又叫 回转密码(ROT13):明文加密得到密文,密文再加密就会得到明文(因为偏移量为13位一共 26个字母,加密两次就会回到明文了),在CTF中题目关键字眼 会有回转、回旋、十三踢等字眼。


 

  • 摩尔斯电码(又译为摩斯密码,Morse code)用 “ . ” 和 “ - ”的排列表达26个字母和数字0-9 

例如:-.-. - ..-. .. ... --. --- --- -..

明文:ctfisgood

  • 当铺密码:王夫 井工 夫口 由中人 井中 夫夫 由中大        (题目链接
  • playfair密码  用5x5的表格,格子放26个字母(I 和J算一个格子 )正好放满25个格子。有密钥的话先往各自中不重复的顺序填入再按照26个字母顺序填入密钥中没有的其他字母     例如密钥为:crazy dog

 

C
D
F
M
T
R
O
H
N
U
A
G
I ( J )
P
V
Z
B
K
Q
W
Y
E
L
S
X

 

 

先整理明文:将明文每两个字母组成一对。如果成对后有两个相同字母紧挨或最后一个字母是单个的,就插入一个字母X(或者Q)

对明文加密规则如下:
1 若p1 p2在同一行,对应密文c1 c2分别是紧靠p1 p2 右端的字母。其中第一列被看做是最后一列的右方。如,按照前表,ct对应dc
2 若p1 p2在同一列,对应密文c1 c2分别是紧靠p1 p2 下方的字母。其中第一行被看做是最后一行的下方。
3 若p1 p2不在同一行,不在同一列,则c1 c2是由p1 p2确定的矩形的其他两角的字母(至于横向替换还是纵向替换要事先约好,或自行尝试)。如,按照前表,wh对应ku或uk。
依照上表,明文where there is life,there is hope.
可先整理为:WH ER ET HE RE IS LI FE TH ER EI SH OP EX
然后密文为:KU YO XD OL OY PL FK DL FU YO LG LN NG LY
将密文变成大写,然后几个字母一组排列。
如5个一组就是KUYOX DOLOY PLFKD LFUYO LGLNN GLY
解密过程逆过来就OK了~
playfair密码有两种自动解决的方法:
  • 1.使用python的一个第三方库:pycipher 里的Playfair模块      (安装:pip install pycipher)
  解密>>>Playfair(\'密钥\').decipher(\'密文\')
  加密>>>Playfair(\'密钥\').decipher(\'明文\')

 


 

  • 栅栏密码就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
  • 一般比较常见的是2栏的栅栏密码
    比如明文:THERE IS A CIPHER
    去掉空格后变为:THEREISACIPHER
    两个一组,得到:TH ER EI SA CI PH ER
    先取出第一个字母:TEESCPE
    再取出第二个字母:HRIAIHR
    连在一起就是:TEESCPEHRIAIHR

 


 

为了生成密码,需要使用表格法。这一表格(如图1所示)包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。

 

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

常见编码/加密方式:

DES/AES/3DES/RC4加密 特点为常见以U2FsdGVkX1开头:

U2FsdGVkX1/l5+tEGEch+uPDGCc3P/P1xUoBSKEcePvrB6eaMKTQxvX9tMFk6v3n
vEOfd6aQcZg=

 

  • base64/32/16/58/36/62/91/85 base全加桶   以base64编码最为常见:QmFzZTY0JXU2NjJGJXU3RjUxJXU3RURDJXU0RTBBJXU2NzAwJXU1RTM4JXU4OUMxJXU3Njg0JXU3NTI4JXU0RThFJXU0RjIwJXU4RjkzOEJpdCV1NUI1NyV1ODI4MiV1NzgwMSV1NzY4NCV1N0YxNiV1NzgwMSV1NjVCOSV1NUYwRiV1NEU0QiV1NEUwMCV1RkYwQ0Jhc2U2NCV1NUMzMSV1NjYyRiV1NEUwMCV1NzlDRCV1NTdGQSV1NEU4RTY0JXU0RTJBJXU1M0VGJXU2MjUzJXU1MzcwJXU1QjU3JXU3QjI2JXU2NzY1JXU4ODY4JXU3OTNBJXU0RThDJXU4RkRCJXU1MjM2JXU2NTcwJXU2MzZFJXU3Njg0JXU2NUI5JXU2Q0Q1JXUzMDAyJXU1M0VGJXU2N0U1JXU3NzBCUkZDMjA0NSV1RkY1RVJGQzIwNDkldUZGMEMldTRFMEEldTk3NjIldTY3MDlNSU1FJXU3Njg0JXU4QkU2JXU3RUM2JXU4OUM0JXU4MzAzJXUzMDAy     

ZGFkZGFkYXdnZw==

base64中包含大写字母(A-Z)、小写字母(a-z)、数字0——9以及+/;

                                                            base64索引表:

wKiom1ZdBl7TmntCAABm9HpvYYE373.png

base32中只有大写字母(A-Z)和数字234567

base32索引表:

wKiom1ZdBISg6vx_AABuBZlOPKI733.png

base16中只有数字0-9以及大写字母ABCDEF。

base16索引表:

wKioL1ZdBoyS1GfDAAAPj7Mgg7E532.png 

在base家族中有小写的是base64,没有189的是base32,“=”是凑位数的。      原文链接


 

 unicode:\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064\u0021     (Hello World!)


 

  • Brainfuck/Ook!:++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.                                                    (Hello World!)

 

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.

Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.                                                                 
(Hello World!)


 

  • JSFuck:

[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()

 


 

  • aaencode:      ゚ω゚ノ= /`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゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) (\'_\');    

          上面那一堆表情解密后就是: alert: Hello, JavaScript     F12去控制台之后执行密文就行,类似还有XXencode UUencode PPencode JJencode。

 

  • BubbleBabble :

明文:flag 

密文:xinik-samak-loxox


 

  • 核心主义价值观编码:这个见的很少但是第一次见的时候容易懵啊哈哈哈    

            密文:和谐*和谐文明和谐和谐和谐*

           明文:1234

          解密网站:http://ctf.ssleye.com/cvencode.html