CTF 在线平台密码wp

Posted 洪流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTF 在线平台密码wp相关的知识,希望对你有一定的参考价值。

1.变异凯撒

加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag
考点:凯撒加密变式

恺撒密码表是一种代换密码。通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

由于密文中有下划线和阿拉伯数字,所以推测应该不是用的字母表进行的替换加密,很有可能是用的ASCII码表。由题目可知其格式为flag ,所以我们可以从flagafZ_之间的对应关系找出规律

  可以看出其偏移量是对每个字符:从第一个字符的偏移量为5,第二个字符的偏移量为6……第n个字符的偏移量为4+n。偏移量依次递增。 下面我们写脚本进行解密,

public class Q123

public static void main(String[] args)
String ciphertext = "afZ_r9VYfScOeO_UL^RWUc";
char[] plaintext = new char[ciphertext.length()];
for(int i = 0; i < ciphertext.length(); i++) //注意i是从0开始的,所以是5+i
plaintext[i] = (char)(((int)ciphertext.charAt(i) + 5 + i) % 128);

for (char i: plaintext)
System.out.print(i);


 得到flagCaesar_variation

2.RSA

p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
dp+dq+p+q+c = m 已知dp dq泄露
使用脚本dp+dq+p+q+c = m

import gmpy2
I = gmpy2.invert(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q) #求幂取模运算

m = (((mp-mq)*I)%p)*q+mq #求明文公式

print(hex(m)) #转为十六进制

3.还原大师 

我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。 注意:得到的 flag 请包上 flag 提交

题目表示神秘字符串未知的问号部分为大写字母,我们可以将每一个位置替换成可能的字母(共262626种可能结果),计算MD5加密后的值,与题目所给的MD5比较。

import hashlib

s = "TASC?O3RJMV?WDJKX?ZM"
s_md5 = "E903???4DAB????08?????51?80??8A?"
for i in range(26):
# 替换第一个?
s1 = s.replace("?", chr(65 + i), 1)
for j in range(26):
# 替换第二个 ?
s2 = s1.replace("?", chr(65 + j), 1)
for k in range(26):
# 替换第三个 ?
s3 = s2.replace("?", chr(65 + k), 1)
# 将替换后的字符串进行MD5加密
c = hashlib.md5(s3.encode("utf-8")).hexdigest().upper()
if c.startswith(s_md5[0:4]):
print("flag" + c + "")

 

flagE9032994DABAC08080091151380478A2

在使用 hashlib 计算 md5 值时,需要将字符串先转换为字节类型,然后再计算其 md5 值。

hexdigest 函数是 hashlib 库中 md5 函数的一个方法,用于将 md5 函数计算出来的二进制数据转换为 16 进制字符串

4.篱笆墙的影子

查看题目

 篱笆墙很明显联想到栅栏密码,用栅栏在线解密即可

 

5.capper

还能提示什么呢?公平的玩吧(密钥自己找) Dncnoqqfliqrpgeklwmppu

 playfair也是一个加密方式,然后找了一个在线解密playfair在线解密

 再把得到的

 这个转换为小写即可提交。

6.异性相吸

查看题目

 把这两个用010打开

运行得到0110011001101100011000010110011101111011011001010110000100110001011000100110001100110000001110010011100000111000001110010011100100110010001100100011011100110110011000100011011101100110001110010011010101100010001101010011010001100001001101110011010000110011001101010110010100111000001110010110010101111101
二转十六 十六转文

 7.世上无难事

打开附件是一串字符
VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09

单词错落有致,我们考虑简单替换

 得到:THE KEY IS 640E11012805F211B0AB24FF02A1ED09,可知key为640E11012805F211B0AB24FF02A1ED09,又因为题目中提示为小写,转化大小写得到:640e11012805f211b0ab24ff02a1ed09

CTF密码学密文脚本解密及WP(凯撒解密)

题目来源实验吧

技术分享图片

分析题意,说是困在栅栏中,所以将字符栅栏解密看看有什么,利用工具CTFcraktools

技术分享图片

得到三条密文

然后说是密码是凯撒,在将四栏依次凯撒解码,寻找可能的key,这里很显然,在尝试第一个的时候,解出的明文里有一个“CTF{}”字样的一栏

技术分享图片

解题成功。

这时我在想,这些结果那么多,答案不容易找到。于是我写了一个给出密文和偏移度就能写得出唯一的结果。说了那么多上代码

#!/usr/bin/python
#encoding=utf-8

import string
import sys

z=[]
for i in string.lowercase:       #string.lowercase表示a~z所有字母
z.append(i)

zifu=raw_input("zi fu chuan:")
n=raw_input("pian yi du:")
str1=‘‘

for i in zifu:
if ord(i)+int(n)>122:         #ord()函数给出字母的ASCII码
a=96+ord(i)+int(n)-122
else:
a=ord(i)+int(n)
str1+=chr(a)             #给出ASCII码的对应字母
print str1

执行结果:

技术分享图片

脚本马马虎虎吧,害怕你们不理解,还用上了拼音(咳咳,承认英语水平欠优)

担待担待。。。。

以上是关于CTF 在线平台密码wp的主要内容,如果未能解决你的问题,请参考以下文章

ctf中涉及emoji表情的密码学问题怎么解

CTF密码学密文脚本解密及WP(凯撒解密)

密码学笔记-一段base64wp

深信服杯ctf部分wp

i春秋CTF-“百度杯”CTF比赛 九月场 XSS平台

Wechall 部分WP