攻防世界 Crypto 新手练习区 1-12 全详解

作者:神秘网友 发布时间:2020-10-23 22:46:30

攻防世界 Crypto 新手练习区 1-12 全详解

攻防世界 Crypto 新手练习区 1-12 全详解

前言

本篇是攻防世界 Crypto 新手练习区的全解

下下来一个txt
打开是最基础的base64

攻防世界 Crypto 新手练习区 1-12 全详解

直接解就是了

攻防世界 Crypto 新手练习区 1-12 全详解

下下来一个txt

攻防世界 Crypto 新手练习区 1-12 全详解

由小写字母,{},_构成
结合题目
应该是凯撒加密
即明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文

做一番尝试

攻防世界 Crypto 新手练习区 1-12 全详解
得到flag

下下来一个txt

攻防世界 Crypto 新手练习区 1-12 全详解
根据题目是摩斯密码
1换为-
0换为.
得到

-- --- .-. ... . -.-. --- -.. . .. ... ... --- .. -. - . .-. . ... - .. -. --.

解密
攻防世界 Crypto 新手练习区 1-12 全详解
得到flag
注意下提交时的格式

下下来的txt如下

攻防世界 Crypto 新手练习区 1-12 全详解
题目说有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)

攻防世界 Crypto 新手练习区 1-12 全详解

得到 flag

查了查
这叫云影密码

下下来txt

攻防世界 Crypto 新手练习区 1-12 全详解
栅栏密码
直接解
发现不对
没有符合的flag

查了查
有个w变种

攻防世界 Crypto 新手练习区 1-12 全详解
解码工具
攻防世界 Crypto 新手练习区 1-12 全详解

得到flag

下下来txt

--/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--.-/.-/-./---/-/...././.-./..--.-/-.././-.-./---/-.././..../..../..../..../.-/.-/.-/.-/.-/-.../.-/.-/-.../-.../-.../.-/.-/-.../-.../.-/.-/.-/.-/.-/.-/.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/.-/.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../-.../.-/.-/.-/-.../-.../.-/.-/-.../.-/.-/.-/.-/-.../.-/-.../.-/.-/-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/-.../-.../.-/.-/-.../-.../-.../.-/-.../.-/.-/.-/-.../.-/-.../.-/-.../-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../-.../.-/.-/-.../-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/-.../-.../.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/-.../-.../.-

肯定跟摩斯密码有关
先解码看看
解码工具

攻防世界 Crypto 新手练习区 1-12 全详解
看到一个小提示
和一堆ab

瞅着跟二进制有关
要么培根密码
要么进制转换

先试试培根密码
攻防世界 Crypto 新手练习区 1-12 全详解
得到flag

下下来txt

攻防世界 Crypto 新手练习区 1-12 全详解

JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzk7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM2ODsmIzY5OyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjNTI7JiM3NjsmIzEyMjsmIzEwNzsmIzUzOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc3OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiMxMDc7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzg7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjODQ7JiM2OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzUwOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc4OyYjMTA1OyYjNTY7JiM1MzsmIzc4OyYjMTIxOyYjNTY7JiM1MzsmIzc5OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM5OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjNjk7JiMxMTk7JiM3NzsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjNjU7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM2OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjMTA3OyYjNTM7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM4NDsmIzEwNzsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzEyMDsmIzc2OyYjMTIyOyYjNjk7JiMxMjA7JiM3ODsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjMTAzOyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjMTE5Ow==

瞅着是base64

攻防世界 Crypto 新手练习区 1-12 全详解

得到

LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw

再次base64

攻防世界 Crypto 新手练习区 1-12 全详解

/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

攻防世界 Crypto 新手练习区 1-12 全详解
找个工具直接算
注意下进制问题
攻防世界 Crypto 新手练习区 1-12 全详解
得到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)

攻防世界 Crypto 新手练习区 1-12 全详解
得到flag

下下来txt

攻防世界 Crypto 新手练习区 1-12 全详解
密钥是1-13的重排列
意思是按这个顺序排列行数
然后根据密文调整每一行
使得第一列是密文

过程如下

攻防世界 Crypto 新手练习区 1-12 全详解
攻防世界 Crypto 新手练习区 1-12 全详解
得到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)

下下来两个文件

攻防世界 Crypto 新手练习区 1-12 全详解
瞅着一个是密文一个是密钥
查了下

攻防世界 Crypto 新手练习区 1-12 全详解
正规思路

  • 使用 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

攻防世界 Crypto 新手练习区 1-12 全详解
直接得到flag

下下来txt

攻防世界 Crypto 新手练习区 1-12 全详解
椭圆曲线加密
直接ecctool

攻防世界 Crypto 新手练习区 1-12 全详解
再根据题目要求计算
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 全详解相关教程

  1. 初始JavaScript,世界上最流行的语言之一!

    初始JavaScript,世界上最流行的语言之一! 1.JavaScript 是什么? JavaScript 是世界上最流行的语言之一,是一种运行在客户端的脚本语言 (Script 是脚本的意思) 脚本语言:不需要编译,运行过程中由 js 解释器( js 引擎)逐行来进行解释并执行 现在也可以

  2. 斩获道路损坏检测竞赛世界第三,滴滴AI视觉团队提出CFM算法

    斩获道路损坏检测竞赛世界第三,滴滴AI视觉团队提出CFM算法 近日,在IEEE BigData2020 Global Road Damage Detection Challenge 2020道路损坏检测竞赛中,滴滴AI视觉团队提出的CFM(Consistency Filtering Mechanism with Self-Supervised Methods)算法,在两

  3. 勒索软件团伙做慈善:称让这个世界更美好

    勒索软件团伙做慈善:称让这个世界更美好 近年来,靠勒索软件发横财的犯罪团伙愈来愈多,按照惯例,发财了是要做慈善的。 10月中旬,一个名为DarkSide的勒索软件团伙就公开发布新闻稿,如下: 正如我们在第一份新闻稿中所说的那样-我们仅针对大型获利的公司进

  4. os x是什么系统

    os x是UNIX系统,OS X是全世界第一个基于UNIX系统采用“面向对象操作系统”的全面的操作系统,OS X非常简单易用,以至于从一开始打开Mac就会操作它,OS X处处体现着简洁的宗旨。 OS X是苹果公司为Mac系列产品开发的专属操作系统。基于UNIX系统。 易用性 OS X

  5. 【PWN系列】攻防世界 pwn note-service2题目分析

    【PWN系列】攻防世界 pwn note-service2题目分析 主要题解:https://blog.csdn.net/seaaseesa/article/details/103003167 这篇文章写已经是不错的了,这里主要写一下我对上面那篇文章的理解 1、以下 code0 到 code3 的长度都是七个字节。不足七个字节的用 \x9

  6. 攻防世界 web高手进阶区 10分题 Background_Management_System

    攻防世界 web高手进阶区 10分题 Background_Management_System 前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是Background_Management_System的writeup 进入界面 根据提示 应该要想办法获取管理员权限 与数据库有关,可能存在sql注入 关键词过

  7. python安全攻防字典脚本的编写

    python安全攻防字典脚本的编写 。 3个需要用的函数: permutation(iterable, r):返回terble中元素所有组合长度为r的项目序列,r省略则默认取iterable中项目的数量。例如itertools.Permutations(‘abc’,3),从“abc 中按顺序排列组合长度为 3进行输出, 即abc,

  8. Flink编程模型

    Flink编程模型 现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。如下图所示,根据现实的数据产生方式和数据产生是否含有边界(具有起始点和终止点