攻防世界 Crypto 新手练习区 1-12 全详解
攻防世界 Crypto 新手练习区 1-12 全详解
攻防世界 Crypto 新手练习区 1-12 全详解前言
本篇是攻防世界 Crypto 新手练习区的全解
下下来一个txt
打开是最基础的base64
直接解就是了
下下来一个txt
由小写字母,{},_构成
结合题目
应该是凯撒加密
即明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文
做一番尝试
得到flag
下下来一个txt
根据题目是摩斯密码
1换为-
0换为.
得到
-- --- .-. ... . -.-. --- -.. . .. ... ... --- .. -. - . .-. . ... - .. -. --.
解密
得到flag
注意下提交时的格式
下下来的txt如下
题目说有8位字符
数了下有7个0
猜测是作为间隔
朴素的想法
剩下的数字加起来
表示字母
脚本
a = "8842101220480224404014224202480122" a = a.split("0") flag = '' for w in a: sum = 0 for i in w: sum += int(i) flag += chr(sum + 64) print(flag)
得到 flag
查了查
这叫云影密码
下下来txt
栅栏密码
直接解
发现不对
没有符合的flag
查了查
有个w变种
解码工具
得到flag
下下来txt
--/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--.-/.-/-./---/-/...././.-./..--.-/-.././-.-./---/-.././..../..../..../..../.-/.-/.-/.-/.-/-.../.-/.-/-.../-.../-.../.-/.-/-.../-.../.-/.-/.-/.-/.-/.-/.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/.-/.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../-.../.-/.-/.-/-.../-.../.-/.-/-.../.-/.-/.-/.-/-.../.-/-.../.-/.-/-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/-.../-.../.-/.-/-.../-.../-.../.-/-.../.-/.-/.-/-.../.-/-.../.-/-.../-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../-.../.-/.-/-.../-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/-.../-.../.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/-.../-.../.-
肯定跟摩斯密码有关
先解码看看
解码工具
看到一个小提示
和一堆ab
瞅着跟二进制有关
要么培根密码
要么进制转换
先试试培根密码
得到flag
下下来txt
JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzk7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM2ODsmIzY5OyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjNTI7JiM3NjsmIzEyMjsmIzEwNzsmIzUzOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc3OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiMxMDc7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzg7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjODQ7JiM2OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzUwOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc4OyYjMTA1OyYjNTY7JiM1MzsmIzc4OyYjMTIxOyYjNTY7JiM1MzsmIzc5OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM5OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjNjk7JiMxMTk7JiM3NzsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjNjU7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM2OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjMTA3OyYjNTM7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM4NDsmIzEwNzsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzEyMDsmIzc2OyYjMTIyOyYjNjk7JiMxMjA7JiM3ODsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjMTAzOyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjMTE5Ow==
瞅着是base64
得到
LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw
再次base64
/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100
都大于等于97小于等于119
ascii码
import re r="/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100" r=re.split("/",r) flag="" for i in range(1,len(r)): flag=flag+chr(int(r[i])) print flag
得到
welcometoattackanddefenceworld
下下来txt
找个工具直接算
注意下进制问题
得到flag
下下来一个pyc文件
用uncompyle6反编译
得到
# uncompyle6 version 3.5.0 # Python bytecode 2.7 (62211) # Decompiled from: Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] # Embedded file name: ans.py # Compiled at: 2018-08-09 11:29:44 import base64 def encode1(ans): s = '' for i in ans: x = ord(i) ^ 36 x = x + 25 s += chr(x) return s def encode2(ans): s = '' for i in ans: x = ord(i) + 36 x = x ^ 36 s += chr(x) return s def encode3(ans): return base64.b32encode(ans) flag = ' ' print 'Please Input your flag:' flag = raw_input() final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E===' if encode3(encode2(encode1(flag))) == final: print 'correct' else: print 'wrong'
反向
import base64 def decode1(ans): s = '' for i in ans: x = ord(i) - 25 x = x ^ 36 s += chr(x) return s def decode2(ans): s = '' for i in ans: x = i^ 36 x = x - 36 s += chr(x) return s def decode3(ans): return base64.b32decode(ans) final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E===' flag=decode1(decode2(decode3(final))) print(flag)
得到flag
下下来txt
密钥是1-13的重排列
意思是按这个顺序排列行数
然后根据密文调整每一行
使得第一列是密文
过程如下
得到flagfireinthehole
脚本
import re sss='''1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 11 < MNBVCXZQWERTPOIUYALSKDJFHG < 12 < LVNCMXZPQOWEIURYTASBKJDFHG < 13 < JZQAWSXCDERFVBGTYHNUMKILOP < ''' m="NFQKSEVOQOFNP" content=re.findall(r'< (.*?) <',sss,re.S) iv=[2,3,7,5,13,12,9,1,8,10,4,11,6] vvv=[] ans="" for i in range(13): index=content[iv[i]-1].index(m[i]) vvv.append(index) for i in range(0,26): flag="" for j in range(13): flag+=content[iv[j]-1][(vvv[j]+i)%26] print(flag)
下下来两个文件
瞅着一个是密文一个是密钥
查了下
正规思路
- 使用 openssl 解密 pem 中参数
- 参数十六进制转换为十进制
- 利用 factor 对大整数进行分解,得到 p 和 q
- 用 rsatool 生成私钥文件: private.pem
- 用 private.pem 解密 flag.enc
不过找到了一个很好用的工具
CTF-RSA-tool
python2 solve.py --verbose -k ./pubkey.pem --decrypt ./flag.enc
直接得到flag
下下来txt
椭圆曲线加密
直接ecctool
再根据题目要求计算
x+y=13957031351290+5520194834100=19477226185390
得到flag
脚本
# encoding=utf-8 p = 15424654874903 a = 16546484 b = 4548674875 def add(A, B): if A == (0, 0): return B if B == (0, 0): return A x1, y1 = A x2, y2 = B if A != B: λ = (y2 - y1) * pow((x2 - x1), p-2, p) else: λ = (x1*x1*3 + a) * pow(2*y1, p-2, p) x3 = λ * λ - x1 - x2 y3 = λ * (x1 - x3) - y1 return (x3 % p, y3 % p) G = (6478678675,5636379357093) k = 546768 C = (0, 0) for i in range(k): C = add(C, G) print(C) print("cyberpeace{%d}"%(C[0]+C[1]))
结语
了解了好多密码知识
以及好些好用的工具
得进一步学习
以后自己写工具
知识点
- base64
- 凯撒密码
- 摩斯密码,解码工具
- 云影密码
- 栅栏密码,w变种,解码工具
- 培根密码,解码工具
- RSA
- pyc反编译
- 转轮机加密
- ssl,CTF-RSA-tool
- 椭圆曲线加密,ecctool
攻防世界 Crypto 新手练习区 1-12 全详解相关教程
-
初始JavaScript,世界上最流行的语言之一!
初始JavaScript,世界上最流行的语言之一! 1.JavaScript 是什么? JavaScript 是世界上最流行的语言之一,是一种运行在客户端的脚本语言 (Script 是脚本的意思) 脚本语言:不需要编译,运行过程中由 js 解释器( js 引擎)逐行来进行解释并执行 现在也可以
-
斩获道路损坏检测竞赛世界第三,滴滴AI视觉团队提出CFM算法
斩获道路损坏检测竞赛世界第三,滴滴AI视觉团队提出CFM算法 近日,在IEEE BigData2020 Global Road Damage Detection Challenge 2020道路损坏检测竞赛中,滴滴AI视觉团队提出的CFM(Consistency Filtering Mechanism with Self-Supervised Methods)算法,在两
-
勒索软件团伙做慈善:称让这个世界更美好
勒索软件团伙做慈善:称让这个世界更美好 近年来,靠勒索软件发横财的犯罪团伙愈来愈多,按照惯例,发财了是要做慈善的。 10月中旬,一个名为DarkSide的勒索软件团伙就公开发布新闻稿,如下: 正如我们在第一份新闻稿中所说的那样-我们仅针对大型获利的公司进
-
os x是什么系统
os x是UNIX系统,OS X是全世界第一个基于UNIX系统采用“面向对象操作系统”的全面的操作系统,OS X非常简单易用,以至于从一开始打开Mac就会操作它,OS X处处体现着简洁的宗旨。 OS X是苹果公司为Mac系列产品开发的专属操作系统。基于UNIX系统。 易用性 OS X
-
【PWN系列】攻防世界 pwn note-service2题目分析
【PWN系列】攻防世界 pwn note-service2题目分析 主要题解:https://blog.csdn.net/seaaseesa/article/details/103003167 这篇文章写已经是不错的了,这里主要写一下我对上面那篇文章的理解 1、以下 code0 到 code3 的长度都是七个字节。不足七个字节的用 \x9
-
攻防世界 web高手进阶区 10分题 Background_Management_System
攻防世界 web高手进阶区 10分题 Background_Management_System 前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是Background_Management_System的writeup 进入界面 根据提示 应该要想办法获取管理员权限 与数据库有关,可能存在sql注入 关键词过
-
python安全攻防字典脚本的编写
python安全攻防字典脚本的编写 。 3个需要用的函数: permutation(iterable, r):返回terble中元素所有组合长度为r的项目序列,r省略则默认取iterable中项目的数量。例如itertools.Permutations(‘abc’,3),从“abc 中按顺序排列组合长度为 3进行输出, 即abc,
-
Flink编程模型
Flink编程模型 现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。如下图所示,根据现实的数据产生方式和数据产生是否含有边界(具有起始点和终止点