蓝鲸安全CTF打卡题——第一期密码学
前言
渣渣一枚,萌新一个,会划水,会喊六六
本文首发于先知社区:https://xz.aliyun.com/t/2778
再发于i春秋平台:https://bbs.ichunqiu.com/thread-46119-1-1.html
个人博客:https://www.cnblogs.com/lxz-1263030049/
再过几天就是中秋节了,我打算尽自己最大的能力把蓝鲸安全平台上面的打卡题目的writeup
整理出来。
有什么错误的地方 希望各位大佬指正(谢谢Orz)
一:检查符号
知识点
摩斯密码、替换密码
解题思路
这道题很容易就可以看出是摩斯密码 摩斯密码就是由'.'
和'-'
组成的密码 先丢在notepad++
里转换下
把。
换成 空格
把o
转换成.
把0
转换成-
就会得到:....- --- ... .--- -.... -. -.-- --. --... .--. ----. -.. -.. ..--- --.. ..--- ...-- ..... .- .---
放在解密工具里面就会得到:
最后得到答案:key{4osj6nyg7p9dd2z235aj}
二: 密钥生成
知识点
RSA
密钥生成 RSA-Tool
工具的使用
解题思路
首先放一张关于RSA-Tool
工具使用的方法图;
我们只需要根据上面的解释以及下面一些关于RSA
算法的资料就可以得到:
即最后答案:key{125631357777427553}
三: RSA解密
知识点
zip
伪加密、RSA
解密,openssl
用法
解题思路
下载下来题目,告诉我们需要解压密码
这里就要涉及到伪加密的知识了
解开伪加密有多种方法,包括用7z
,在linux
下直接打开,更改伪加密位置处的奇数位为0(偶数)
等方法,我选择使用ZipCenOp.jar
这个工具来解密
# 在window下 $ java -jar ZipCenOp.jar r rsa.zip
使用linux
两种都可以的(我个人更偏向于使用linux
),打开经过解密之后的伪加密文件:
用notepad++
打开imhere
文件打开看到
-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCw44GKtDqBlD2hTQVm9oMyp7w3C8i4tCE0zsWTWtV0gVaofyF9 idBeZR3AX/crKnlX1QC6YD/pUJJRPzoKY+bk0YFT64mca7oW2fP719LFiQReirGM fs4n9mvIYeBx1TtHfFwWBDeIHcjP33eR1hue69Dq5tZYRl2e3SrUJXvRFwIDAQAB AoGAMUQcF1KdHOv5wkweXg/4eIpJHJe2nuLkgL26P5FD9D/1r9ZAsKNKmo/VGnhf 8fDRfQoBOueFxWjAZ8qRUsWCT+/0ZDs0xCKrQ7YuxO2p9HV1sMQF74D2TVcoFZ4d P5sjTvs0MutaoTdU0YDNO/ssqk3We2e11tr6ii3HmHtquwkCQQDezreUOIjWV30n ndoGwYf9LsXoEZVMSI6vw/SqiqOvagN3mufApNfj+JrZ6LvV0hHbYfaVkEUvqMyq BKAQapNFAkEAyz2RlugQ20fVzUkzDCSF8ByWjK4GgAqQ/qioXJ9tSPcsgV1yUem4 WM7rTBDWaohHT3N+vhAcsszQ2VJZy6vKqwJBAL2liH7CLD79Uwswgg70FfM8J7oj lUfMDp+vFIdA4JiDjRX2JUNFTHm/9tZ6Eb+rQgXQ+ZlOpoUtkZ85tqCihl0CQCQI R16MyChIRRR/LMizVPer6dkJJWff97LebfL15OcxwzcwPQtet2svTDIRLiJ3BMWG QWsq6hudCk3tNrRQQb8CQQCTcs0uWBe6klDKWLCPEYxuTqB9xksQTmlqvdwfdCZF BWaxHtc/ByfAisj9cfq2CY/fEoeGqLagZ5tG5G81V9VZ -----END RSA PRIVATE KEY-----
看到是RSA
私钥文件,说明我们要用这个私钥去解密我们的flag
文件 这里就需要用到openssl
文件了 kali
里自带了openssl
工具
使用命令:openssl rsautl -decrypt -in flag -inkey imhere -out flag.txt
打开flag.txt
文件就会得到答案:key{c42bcf773d54cf03}
四: 公平交易
知识点
playfair
加密 pycipher
库使用
解题思路
第一种方法:
使用pycipher
库,就可以得到答案
由于pycipher
库是python
中的第三方库,所以使用的时候需要安装即:pip install pycipher
使用pycipher
就可以得到答案:
第二种方法:
使用在线解密工具:http://www.practicalcryptography.com/ciphers/classical-era/playfair/
最后得到答案:key{WHALECTFISVERYFAIR}
五:填空题
知识点
utf-9
编码,替换密码,进制ascii
码转换
解题思路
下载得到一个叫做flag_is_here_rfc4042
的文件 看到rfc4042
,知道了应该是utf-9
编码了文件用python2
来解,我们需要先安装VCForPython27.msi
接下来就是需要安装UTF-9
文件
关于UTF-9
中的问题,我们只需要写一段python
代码就可以解决了:
import utf9 f1 = open('flag_is_here_rfc4042','r') f2 = open('flag.txt','w') str1 = f1.read() print utf9.utf9decode(str1) f2.write(utf9.utf9decode(str1))
我们采用的是直接读取flag_is_here_rfc4042
文件的方法是为了避免复制粘贴时格式出现问题,下面就是具体的操作方法:
我们先来分析一下关于解密出来的内容:
我们由以上的分析可以写出脚本:
import binascii _ = 1 __ = 2 ___ = 3 ____ = 4 _____ = 5 ______ = 6 _______ = 7 ________ = 8 _________ = 9 a = _____*((__//__+___+______-____%____)**((___%(___-_))+________+(___%___+_____+_______%__+______-(______//(_____%___)))))+__*(((________/__)+___%__+_______-(________//____))**(_*(_____+_____)+_______+_________%___))+________*(((_________//__+________%__)+(_______-_))**((___+_______)+_________-(______//__)))+_______*((___+_________-(______//___-_______%__%_))**(_____+_____+_____))+__*(__+_________-(___//___-_________%_____%__))**(_________-____+_______)+(___+_______)**(________%___%__+_____+______)+(_____-__)*((____//____-_____%____%_)+_________)**(_____-(_______//_______+_________%___)+______)+(_____+(_________%_______)*__+_)**_________+_______*(((_________%_______)*__+_______-(________//________))**_______)+(________/__)*(((____-_+_______)*(______+____))**___)+___*((__+_________-_)**_____)+___*(((___+_______-______/___+__-_________%_____%__)*(___-_+________/__+_________%_____))**__)+(_//_)*(((________%___%__+_____+_____)%______)+_______-_)**___+_____*((______/(_____%___))+_______)*((_________%_______)*__+_____+_)+___//___+_________+_________/___ a = hex(a)[2:][:-1] a = binascii.a2b_hex(a) print a
运行之后就会得到:
最后得到答案:key{I_4m-k3y}
六:RSA破解
知识点
RSA
模数分解,RSA
解密 openssl
使用方法
解题思路
下载并打开压缩包文件就会发现:
这是一个加密的flag
文件和公钥文件 我们先通过openssl
来分析一下公钥是否可以被攻击
使用linux
,其中的命令是:
openssl rsa -pubin -text -modulus -in public.pem
我们接着使用msieve
就可以了
就会得到相应的P Q
我们需要使用脚本生成使用文件
import math import sys from Crypto.PublicKey import RSA keypair = RSA.generate(1024) keypair.p = 290579950064240059571837821251441436997 keypair.q = 314436328879392457343835667929324128609 keypair.e = 65537 keypair.n = keypair.p * keypair.q Qn = long((keypair.p-1) * (keypair.q-1)) i = 1 while (True): x = (Qn * i ) + 1 if (x % keypair.e == 0): keypair.d = x / keypair.e break i += 1 private = open('private.pem','w') private.write(keypair.exportKey()) private.close()
使用linux
运行脚本很简单 进入文件直接使用命令:
python prikeygen.py
就会生成相应的私钥
-----BEGIN RSA PRIVATE KEY----- MIGpAgEAAiEAygD17Xszub1CHncxiqF4513t48sbx9R6fRQ750kckCUCAwEAAQIg XbBsX6TQrMj2raKiu6WAqRtv86ps6lbgXsftak7iqgECEQDam6mnJeZJM1o5QlZY XKlFAhEA7I478Iv1HnDUJ/xGsCkJYQIQFvqv7bMNLvqn7Ebt3qH25QIQFwZlKS3G Rxc+X0H782ubIQIQL2kzJ1i8luHD5eQlbYjXgg== -----END RSA PRIVATE KEY-----
接下来就是需要使用openssl
命令了
就会得到答案:whalectf{256_n_get}
参考资料:
RSA算法原理(一): http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
RSA算法原理(二): http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
CTF中那些脑洞大开的编码和加密: https://www.tuicool.com/articles/2E3INnm
UTF-9: https://github.com/enricobacis/utf9
CTF中RSA的常见攻击方法 : https://www.anquanke.com/post/id/84632
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python 机器学习库 Top 10,你值得拥有!
随着人工智能技术的发展与普及,Python 超越了许多其他编程语言,成为了机器学习领域中最热门最常用的编程语言之一。有许多原因致使 Python 在众多开发者中如此受追捧,其中之一便是其拥有大量的与机器学习相关的开源框架以及工具库。根据 builtwith.com 的数据显示,45% 的科技公司都倾向于使用 Python 作为人工智能与机器学习领域的编程语言。 使 Python 如此受欢迎主要由于: ●Python 从设计之初就是为效率而生,以使项目从开发到部署再在运维都能保持较高的生产力; ●坊间有大量的基于 Python 的开源框架及工具库; ●Python 易于上手,可以说是编程小白的福音; ●相比起 C、Java、C++ 来讲,Python 的语法更简单,更高级,只需要更少行数的代码便能实现其他编程语言同样的
- 下一篇
JavaScript 2018 中即将迎来的新功能
JavaScript 2018 中即将迎来的新功能:异步生成器及更好的正则表达式 2018 年 6 月发布的最新年度 ECMAScript 更新,尽管在常见功能的积压上仍然远远小于 ECMAScript 6,但依然是迄今为止最大的年度版本。 身为 ECMAScript 编辑及微软在 ECMA TC39 委员会代表的 Brian Terlson 告诉 The New Stack:这个版本中两个最大的开发者功能是异步生成器和一些期待已久的正则表达式改进,以及 rest/spread 属性。 “异步生成器和迭代器是将异步函数和迭代器结合起来的结果,所以它就像你可以在其中等待的异步生成器或你可以从中得到返回值的异步函数,”他解释道。以前,ECMAScript 允许你编写一个可以输入或等待但不能同时进行两者操作的函数。“这对于在 Web 平台占比越来越大的消费流来说非常方便,尤其是在 Fetch 对象公开流的情况下。” 异步迭代器类似于 Observable 模式,但更灵活。“Observable 是推模型; 一旦你订阅了它,无论你是否准备好,你都会被爆炸式的事件和通知冲击,所以你必须实施缓冲或...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境