BUUCTF Crypto_WP(2)
BUUCTF Crypto WP
- 几道密码学
wp
[GXYCTF2019]CheckIn
知识点:Base64,rot47
- 下载文件后,发现一个
txt
文件,打开发现一串base64
,界面之后出现一串乱码,由符号,字母,数字构成,尝试多词之后发现是rot47
- 大致介绍一下
rot47
,这个其实和凯撒差不多,都属于移位密码,rot47
大家估计不常见,常见的是rot13
,rot47
是对数字,字母,常用符号进行编码,按照它们的ASCII
值进行位置替换,并且ASCII
的范围在33~126
,解密时,对于ASCII
减47
后值在这个范围内的直接替换即可,不在这个范围内的则采用其ASCII
加上47
来实现编码。 - 解码代码:
chiper="v)*L*_F0<}@H0>F49023@FE0#@EN"
flag=''
for i in chiper:
if(33<=ord(i)-47<=126):
flag+=chr(ord(i)-47)
else:
flag+=chr(ord(i)+47)
#flag:GXY{Y0u_kNow_much_about_Rot}
- 在线解密网站:
https://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php
Unencode
知识点:UUencode
- 题目就一个题目交
Uencode
,网上找了半天都解不开这个,但隐隐约约记得好像还有一个叫UUencode
的,遂尝试解密发现成功解出 - 在线解密网站:
http://ctf.ssleye.com/uu.html
信息化时代的步伐
知识点:汉字电报码
- 题目提示最后
flag
是汉字,但是给出的密文是一串数,一开始以为是16
进制转汉字,但是解出来是乱码,遂最后查出来是这种汉字的电报码 - 解题链接:
https://www.qqxiuzi.cn/bianma/dianbao.php
一张谍报
知识点:替换密码
- 给出的word,有两段对于同一件事情描述的文段,大概读了一下,发现有些文章对应部分文字不同,判断可能就是码表的对应关系
- 看到网上有大佬写好了代码,本来打算用一下,却发现,
python3
的setdefaultencoding
函数已经被删除了,所以稍作修改,成了下述代码
str1 = "今天上午,朝歌区梆子公司决定,在每天三更天不亮免费在各大小区门口设卡为全城提供二次震耳欲聋的敲更提醒,呼吁大家早睡早起,不要因为贪睡断送大好人生,时代的符号是前进。为此,全区老人都蹲在该公司东边树丛合力抵制,不给公司人员放行,场面混乱。李罗鹰住进朝歌区五十年了,人称老鹰头,几年孙子李虎南刚从东北当猎户回来,每月还寄回来几块鼹鼠干。李罗鹰当年遇到的老婆是朝歌一枝花,所以李南虎是长得非常秀气的一个汉子。李罗鹰表示:无论梆子公司做的对错,反正不能打扰他孙子睡觉,子曰:‘睡觉乃人之常情’。梆子公司这是连菩萨睡觉都不放过啊。李南虎表示:梆子公司智商捉急,小心居民猴急跳墙!这三伏天都不给睡觉,这不扯淡么!到了中午人群仍未离散,更有人提议要烧掉这个公司,公司高层似乎恨不得找个洞钻进去。直到治安人员出现才疏散人群归家,但是李南虎仍旧表示爷爷年纪大了,睡不好对身体不好。"
str2 = "喵天上午,汪歌区哞叽公司决定,在每天八哇天不全免费在各大小区门脑设卡为全城提供双次震耳欲聋的敲哇提醒,呼吁大家早睡早起,不要因为贪睡断送大好人生,时代的编号是前进。为此,全区眠人都足在该公司流边草丛合力抵制,不给公司人员放行,场面混乱。李罗鸟住进汪歌区五十年了,人称眠鸟顶,几年孙叽李熬值刚从流北当屁户回来,每月还寄回来几块报信干。李罗鸟当年遇到的眠婆是汪歌一枝花,所以李值熬是长得非常秀气的一个汉叽。李罗鸟表示:无论哞叽公司做的对错,反正不能打扰他孙叽睡觉,叽叶:‘睡觉乃人之常情’。哞叽公司这是连衣服睡觉都不放过啊。李值熬表示:哞叽公司智商捉急,小心居民猴急跳墙!这八伏天都不给睡觉,这不扯淡么!到了中午人群仍未离散,哇有人提议要烧掉这个公司,公司高层似乎恨不得找个洞钻进去。直到治安人员出现才疏散人群归家,但是李值熬仍旧表示爷爷年纪大了,睡不好对身体不好。"
str3 = "喵汪哞叽双哇顶,眠鸟足屁流脑,八哇报信断流脑全叽,眠鸟进北脑上草,八枝遇孙叽,孙叽对熬编叶:值天衣服放鸟捉猴顶。鸟对:北汪罗汉伏熬乱天门。合编放行,卡编扯呼。人离烧草,报信归洞,孙叽找爷爷。"
res = ""
for i in range(len(str3)):
for j in range(len(str2)):
if str3[i] == str2[j]:
res += str1[j]
break
print(res)
python3
已支持的是unicode
编码,而unicode
已涵盖大部分汉字UCS-2
包含可有六万多字符,到了UCS-4
已经可以有一百多万,而2016
年定义的unicode9
已收录有十多万字,所以在python3
中已不需要像2
中那样的写法
[NCTF2019]childRSA
知识点:光滑数smooth number
,Pollard's p-1 method
- 这题参考了一下几篇文章,发现有多种解法,其中的一个非预期是利用的
yafu
直接分解n
,因为这里的p,q
相差位数不是很大,所以可以用yafu
很快就分解出来 - 而对于预期的解,则是要利用
Pollard's p-1 method
- 首先还是来先看一下题目源码
from random import choice
from Crypto.Util.number import isPrime, sieve_base as primes
from flag import flag
def getPrime(bits):
while True:
n = 2
while n.bit_length() < bits:
n *= choice(primes)
if isPrime(n + 1):
return n + 1
e = 0x10001
m = int.from_bytes(flag.encode(), 'big')
p, q = [getPrime(2048) for _ in range(2)]
n = p * q
c = pow(m, e, n)
# n = 32849718197337581823002243717057659218502519004386...........
# c = 26308018356739853895382240109968894175166731283702...........
sieve_base
是由前10000
的素数组成的列表,它生成的n
是由这一列表中随机的数相乘而来,而对于p,q
则是利用的将n+1
取素数而来- 这里我们要解决的就是想办法通过这个
n
求解p,q
,对于如何实现这个问题,我们这里就要用到Pollard's p-1 method
Pollard's p-1 method
主要就是说:如果p-1
正好是一些很小的质数的乘积,那么p-1
就能整除n!
,其中n
是一个不太大的数。- 而对于费马小定理:\(a^{p-1}\equiv 1(mod)p \Rightarrow a^{t\times(p-1)}-1=k \times p\) (\(t,k \in \mathbb{Z}\)),这里我们可以发现对于一个素数\(p\),它的一个倍数可以写成\(a^{t\times(p-1)}-1\),那么对于这个大素数\(n\),它也算是\(p\)的一个倍数,那么如果我们可以找到一个指数\(L\),使得对于某一个底数\(a\),\(a^{L}-1\)也是\(p\)的倍数,那么我们只要能通过求解\(n\)和\(a^{L}-1\)的公因数,不就求出\(p\)了吗
- 对于这个\(L\)的求解,就要用到
Pollard's p-1 method
了,具体的一些原理细节,还没太弄懂,所以就直接按照当时NCTF2019
的官方WP
写了一些exp
,文章链接如下:
http://www.soreatu.com/ctf/writeups/Writeup%20for%20Crypto%20problems%20in%20NCTF%202019.html#childrsa
- exp:
# -*- coding:utf-8 -*-
# Author:Konmu
# [NCTF2019] childrsa
from Crypto.Util.number import *
import gmpy2
def Pollard(n):
a=2
while True:
for i in range(2,80000):
a=pow(a,i,n)
for j in range(80000,104729+1):
a=pow(a,j,n)
if j % 15 ==0:
d=GCD(a-1,n)
if(1<d<n):
return(d)
a+=1
n=3284971819733758182300224371705765921850251900438699...........
c=2630801835673985389538224010996889417516673128370292...........
p=Pollard(n)
q=n//p
e=0x10001
d=int(gmpy2.invert(e,(p-1)*(q-1)))
m=pow(c,d,n)
print(long_to_bytes(m))
BUUCTF Crypto_WP(2)的更多相关文章
- 刷题记录:[BUUCTF 2018]Online Tool
目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...
- BUUCTF 部分wp
目录 Buuctf crypto 0x01传感器 提示是曼联,猜测为曼彻斯特密码 wp:https://www.xmsec.cc/manchester-encode/ cipher: 55555555 ...
- buuctf misc 刷题记录
1.金三胖 将gif分离出来. 2.N种方法解决 一个exe文件,果然打不开,在kali里分析一下:file KEY.exe,ascii text,先txt再说,base64 图片. 3.大白 crc ...
- BUUCTF知识记录
[强网杯 2019]随便注 先尝试普通的注入 发现注入成功了,接下来走流程的时候碰到了问题 发现过滤了select和where这个两个最重要的查询语句,不过其他的过滤很奇怪,为什么要过滤update, ...
- buuctf misc wp 01
buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...
- buuctf misc wp 02
buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...
- BUUCTF WEB-WP(3)
BUUCTF WEB 几道web做题的记录 [ACTF2020 新生赛]Exec 知识点:exec命令执行 这题最早是在一个叫中学生CTF平台上看到的类似,比这题稍微要复杂一些,多了一些限制(看看大佬 ...
- BUUCTF WEB
BUUCTF 几道WEB题WP 今天做了几道Web题,记录一下,Web萌新写的不好,望大佬们见谅○| ̄|_ [RoarCTF 2019]Easy Calc 知识点:PHP的字符串解析特性 参考了一下网 ...
- BUUCTF Crypto
BUUCTF 几道crypto WP [AFCTF2018]Morse 简单的莫尔斯密码,最直观的莫尔斯密码是直接采用空格分割的点和划线,这题稍微绕了一下使用的是斜杠来划分 所以首先将斜杠全部替换为空 ...
随机推荐
- msf的rpc和json-rpc,我该选择哪个?
msf的rpc有两种调用方式,那么我们应该调用哪一个呢? 其中restful接口暂且不谈,这个rest api其实是简单对接了一下msf的后端数据库,这个自己也能读数据库来做,这个以后有时间再谈 首先 ...
- 支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb)
支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除, ...
- 自动化运维工具Ansible之Roles测验详解
Ansible Roles 详解与实战案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. 该用 ...
- http协议跟tcp协议的简单理解
在说明这两个协议之前,我们先简单说一下网络的分层. 1)应用层 支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信.主要的协议有:http.ftp.te ...
- 【Kafka】Kafka集群基础操作!新手上路必备~
目录 bin目录 Topic命令概览 创建Topic 查看Topic 描述Topic Producer生产数据 Consumer消费数据 增加topic分区数 增加配置 删除配置 删除Topic 所有 ...
- Boosting算法总结(ada boosting、GBDT、XGBoost)
把之前学习xgb过程中查找的资料整理分享出来,方便有需要的朋友查看,求大家点赞支持,哈哈哈 作者:tangg, qq:577305810 一.Boosting算法 boosting算法有许多种具体算法 ...
- Excel开始,Excel结束,R语言居中
入职.离职,总公司调往分公司,分公司调往总公司,每月社保.公积金和上月比较有增减.税局导出的为Excel文件,需要和记录对照一番. 用Excel处理,那就是姓名粘贴为两列,条件格式-重复值,没变色的为 ...
- python第七天--文件练
目的: 将不同人物说的话分别保存下来 以==========分段 代码: f=open('record.txt','r',encoding='UTF-8') zyf=[] smy=[] count=1 ...
- linux --vim 补充 .vimrc
1.今天发现了一个新的功能.vimrc 1.这个是一个个人配置文件,可以在这个里面首先对vim进行一些设置呢 如果系统没有.vimrc文件,可以自己创建一个,touch .vimrc 举个栗子,我在. ...
- 如何在一台计算机上安装多个 JDK 版本
前言 对于使用 Java 语言开发的朋友可能会遇到这种情况,有时想学习和探索 Java 的最新版本提供的一些新特性,比如 Java 11,但你无法将其安装在自己的计算机上,因为你的团队正在使用比这个旧 ...